我试图从大型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的流插入数据?