MongoDB bulk.execute()在无序插入时花费了太多时间

MongoDB bulk.execute() taking too much time to insert unordered

本文关键字:时间 太多 插入 无序 execute bulk MongoDB      更新时间:2023-09-26

我正试图用谷歌ngrams的arcs为mongoDB(3.2.4版)提供数据,但即使配置不错(MBP Mid 2014,2.2 GHz英特尔酷睿i7,16gb),也需要太多时间。

对于原始文件中890万行中的每一行,我都将docbulk.insert(doc);创建为无序的大容量。

在插入500个文档后,我执行bulk.execute()并重复此过程,直到所有文档都添加到数据库中,这从未发生过,因为每千个文档需要一分钟以上的时间才能插入,而且我肯定没有8,9k分钟的时间等待。

代码来了:

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();
    });
  }
});

附言:前10k次插入,即前20次bulk.execute()是非常快的过程<1米。之后,处理时间会增加。):有什么建议吗?非常感谢。

我从mongoDB文档中得到了答案:"执行后,如果不重新初始化,就无法重新执行Bulk()对象。"

我刚刚在bulk.execute();之后添加了bulk = db.collection('bigrams').initializeUnorderedBulkOp();,插入时间是恒定的。几分钟后,所有内容都插入了。

希望这能帮助其他人。(: