MongoDB 中的 Milti 插入.哪种方式效率更高? [英] Milti-insert in MongoDB. Which way is more efficient?

查看:34
本文介绍了MongoDB 中的 Milti 插入.哪种方式效率更高?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

// 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);

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

Which way is more efficient? Does the second approach make a single request to the database?

推荐答案

对于大量插入,第二个肯定会更快.这是因为您将只进行一次 db 调用.

Definitely the second one will be way faster for big number of inserts. This is because you will make only one db call.

但是自己测试并不难.

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 做的一样,但我可能错了):

And as it was suggested in the comments, you can try bulk insert (which in my opinion is doing the same as 2, but I might be wrong):

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,它会更大).如果我是你,我会使用文档化的批量插入.

As you see the difference between 2 and 3 is negligible, but 1 is almost 15 times longer (if you will increase X it will be way bigger). If I were you, I would use documented bulk insert.

这篇关于MongoDB 中的 Milti 插入.哪种方式效率更高?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆