我正在尝试通过JSONStream将流式JSON数据写入MongoDB。需要流,因为数据可能会变得非常大(可能高达数十GB),我想使用MongoDB的批量写入功能来进一步加快流程。要做到这一点,我需要缓冲数据,批量写入每1000个JSON对象左右。
我的问题是,当我缓冲数据的写入时,它不会写入所有数据并且遗漏了最后几千个对象。也就是说,如果我尝试编写100000个JSON对象,我的代码只能编写97000个JSON对象。我尝试使用类似的错误结果缓冲MongoDB批量写入和正常写入。
我的代码:
var JSONStream = require('JSONStream');
var mongodb = require('mongodb');
// DB connect boilerplate here
var coll = database.collection('Collection');
var bulk = coll.initializeOrderedBulkOp();
var bufferSizeLimit = 1000;
var recordCount = 0;
var jsonStream = JSONStream.parse(['items', true]);
jsonStream.on('data', (data) => {
bulk.insert(data);
recordCount++;
// Write when bulk commands reach buffer size limit
if (recordCount % bufferSizeLimit == 0) {
bulk.execute((err, result) => {
bulk = coll.initializeOrderedBulkOp();
});
}
});
jsonStream.on('end', () => {
// Flush remaining buffered objects to DB
if (recordCount % bufferSizeLimit != 0) {
bulk.execute((err, result) => {
db.close();
});
}
});
如果我用一个简单的MongoDB插入替换缓冲的写代码,代码就可以正常工作。这里有什么我想念的吗?