[英]Most efficient way to insert JSON objects from many files to MongoDB in NodeJS
我正在寻找将JSON对象从文件导入到MongoDB集合的最有效方法。
文件看起来像这样:
[ { ... }, { ... } ]
每个文件约有200个对象,有100个文件,因此总共有20.000个对象。 我尝试了很多方法,很多库...
我当前的工作示例是:
const fs = require('fs');
const JSONStream = require('JSONStream');
const es = require('event-stream');
const MongoClient = require('mongodb').MongoClient;
const glob = require('glob');
const url = 'mongodb://localhost:27017/inventory';
console.time('import');
MongoClient.connect(url, function(err, database) {
const db = database.db('inventory');
const collection = db.collection('storage');
let importer = [];
glob('../data/*.json', function (error, files) {
files.forEach(function (filename) {
importer.push(new Promise(function (resolve) {
fs.createReadStream(filename).pipe(JSONStream.parse('*')).pipe(es.map(function (document) {
collection.insertOne(document).then(resolve);
}));
}));
});
Promise.all(importer).then(function () {
console.timeEnd('import');
});
});
});
在我的本地计算机上平均需要20秒钟(20074.834毫秒)。 好吧,20多岁是好的,但是我想在这里提高性能。
这个代码还没有完全优化,在这里我不做任何错误处理,但是它可以减少插入的时间。(您的主要瓶颈)
const fs = require('fs'); const JSONStream = require('JSONStream'); const es = require('event-stream'); const MongoClient = require('mongodb').MongoClient; const glob = require('glob'); const url = 'mongodb://localhost:27017/inventory'; console.time('import'); MongoClient.connect(url, function(err, database) { const db = database.db('inventory'); const collection = db.collection('storage'); let importer = []; glob('../data/*.json', function (error, files) { files.forEach(function (filename) { const documents = JSON.parse(fs.readFileSync(filename, 'utf8')); importer.push(collection.insertMany(documents),{w:0,ordered:false}); }); }); Promise.all(importer).then(function () { console.timeEnd('import'); }); }); });
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.