Как прочитать действительно БОЛЬШОЙ JSON файл и вставить данные этого файла в базу данных MYSQL, используя node.js? - PullRequest
0 голосов
/ 10 марта 2020

У меня большой JSON файл (22 ГБ). Я хочу прочитать этот файл и ввести данные этого файла в базу данных MySql, используя node.js. Как я могу это сделать?

Это мой запрос к базе данных:

var query = connection.query("INSERT INTO hotels (property_id, name, address,city, state_province_name, postal_code, 
        country_code, star_rate, latitude, longitude, category, rank, collect, property_collect, featured_image, breakfast_included, free_wifi_available) 
VALUES ('" + .... + "', .........;

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Я нашел решение для этого. Спасибо всем, кто пытался мне помочь.

Это мое соединение с БД (дБ. js)

var mysql = require('mysql');

//connect to db
var dbCon  = mysql.createPool({
   connectionLimit : 50,
   host: 'xxxxx',
   user: 'xxx',
   password: 'xxx',
   database: 'xxxxx',
   waitForConnections: true,
   queueLimit: 0,
 });

 dbCon.on('connection', function (connection) {
    console.log('db pool connection');
    connection.query("SET time_zone='+5:30'");
  });

 dbCon.on('release', function (connection) {
    console.log('Connection %d released', connection.threadId);
 });

 module.exports = {
   dbCon
 };

Это мое решение.

var express = require('express');
var app   = express();
var dbCon = require('./config/db').dbCon;
var fs = require('fs');
var readline = require('readline');
var stream = require('stream');
var data = '';

// Create a readable stream
var readerStream = fs.createReadStream('./data/myJson.jsonl');

// Set the encoding to be utf8. 
readerStream.setEncoding('UTF8');

var outstream = new stream();
//createInterface - read through the stream line by line and print out data from it
var r1 = readline.createInterface(readerStream, outstream);
var lineCount = 0;

r1.on('line', function (line) {
  // increment line count
  lineCount++;
  data = JSON.parse(line);

saveRecord(data);
})


function saveRecord(data) {

if (typeof data["city "] !== 'undefined') {
    var cityTemp = data["city"];
} else {
    cityTemp = "";
}

var property_id = data["property_id"];
var name = data["name"];
var city = cityTemp;

var sql = "INSERT INTO hotels (property_id, name, city) VALUES (?, ?, ?)";

dbCon.query(sql, [property_id, name, city]);

console.log('data inserted');
}

console.log("Program Ended");
1 голос
/ 10 марта 2020

Для этого большого файла потоковая передача - лучший способ. Существует пакет под названием etl , который выполняет эту работу за вас. как то так

etl.file('somefile')
  .pipe(etl.mysql.upsert(pool,'testschema','testtable',{concurrency:4 }))
...