处理大型json时插入数据库

时间:2017-02-01 23:30:34

标签: node.js knex.js

我试图从大型json文件将数据导入SQL数据库。 使用node.js可读流逐行读取当前实现,然后使用knex.js暂停stream do async insert。

const fs = require('fs');
const JSONStream = require('JSONStream');
const environment = process.env.NODE_ENV || 'development';
const config = require('./knexfile')[environment];
const knex = require('knex')(config);

const stream = fs.createReadStream('books.json', {encoding: 'utf8'})

stream
  .pipe(JSONStream.parse('*'))
  .on('data', (data) => {
        stream.pause();

        knex('books').insert(data)
              .then((res) => {
                    stream.resume()
                    console.log(res)
              })
  });

这种方法的问题是,每次插入连接量都会增加,并且knex在每次插入后都不会丢弃sql连接。

  knex:pool INFO pool sqlite3:sqlite3:client0 - dispense() clients=956 available=0 +1ms

有没有正确的方法使用来自大型json的流插入数据?

0 个答案:

没有答案