MongoDB中的多插入。哪种方式更有效?

时间:2015-04-01 06:40:55

标签: performance mongodb

// first approach
for (var i = 0; i < 1000000; i++) {
  db.testdata.insert({number: i});
}

// second approach
for (var i = 0, arr = []; i < 1000000; i++) {
  arr.push({number: i});
}
db.testdata.insert(arr);

哪种方式更有效?第二种方法是否向数据库发出单个请求?

1 个答案:

答案 0 :(得分:2)

对于大量插入,肯定第二个会更快。这是因为您只会进行一次数据库调用。

但是自己测试它并不难。

var X = 100000;
var start = new Date();
for (var i = 0; i < X; i++) {
  db.coll1.insert({number: i});
}
var time1 = new Date() - start;

第二个

var start = new Date();
for (var i = 0, arr = []; i < X; i++) {
  arr.push({number: i});
}
db.coll2.insert(arr);
var time2 = new Date() - start;

正如评论中所建议的那样,您可以尝试bulk插入(我认为这与2相同,但我可能错了):

var start = new Date();
var bulk = db.coll3.initializeUnorderedBulkOp();
for (var i = 0; i < X; i++) {
    bulk.insert({number: i});
}
bulk.execute();
var time3 = new Date() - start;

我的计算机time1 = 33846time2 = 2191time3 = 2203的结果

正如你所看到的,2和3之间的差异可以忽略不计,但是1几乎是15倍(如果你增加X则会更大)。如果我是你,我会使用有文件记录的批量插入。