我正在尝试将Google Ngrams中的弧线馈入MongoDB(版本3.2.4),但即使使用了像MBP Mid 2014,2.2 GHz Intel Core i7和16GB这样的良好配置,它仍然需要太长时间。
对于原始文件中的8.9百万行数据,我为每个创建一个
在插入了500个文档后,我执行
以下是代码:
对于原始文件中的8.9百万行数据,我为每个创建一个
doc
并将其插入无序批量中bulk.insert(doc);
。在插入了500个文档后,我执行
bulk.execute()
并重复此过程,直到所有文档都添加到数据库中。然而,由于每插入1000个文档需要超过一分钟的时间,因此我肯定没有8900多分钟等待它完成。以下是代码:
MongoClient.connect(url, function (err, db) {
if (err) {
console.log('Unable to connect to the mongoDB server. Error:', err);
} else {
//connected
console.log('Connection established to', url);
var bulk = db.collection('bigrams').initializeUnorderedBulkOp();
const rl = readline.createInterface({
input: fs.createReadStream(path+filename)
});
rl.on('line', function (line) {
var stringArray = line.split("\t");
var firstPart = stringArray[0]+'\t'+stringArray[1]+'\t'+stringArray[2]+"\t";
var head_token = stringArray[0];
var syntatic_ngram = stringArray[1].split(" ");
var total_count = stringArray[2];
var counts_by_year = line.replace(firstPart,'').split("\t");
var doc = {
"head token" : head_token,
"syntatic ngram" : syntatic_ngram,
"total count" : total_count,
"counts by year" : counts_by_year
};
count++;
bulkCount++;
if (bulkCount == bulkSize) {
console.log("BulkSize reached. Executing...");
bulk.execute();
bulkCount = 0;
}
console.log("bulk inserted count:"+count);
bulk.insert(doc);
});
rl.on('end', function(){
bulk.execute();
db.close();
});
}
});
P.S.: 前10k次插入, 即前20个 bulk.execute()
的处理速度非常快,小于1分钟。之后处理时间会逐渐增加。有任何建议吗?谢谢。