db.collection.insert与db.collection.insertOne&的性能影响db.collection.insertMany

时间:2016-05-30 10:15:44

标签: node.js mongodb

我正在使用Node的 mongodb驱动程序,其中有3种方法:

1)db.collection.insert

2)db.collection.insertOne

3)db.collection.insertMany

我发现db.collection.insert完成了insertOne和insertMany的工作。

我也找到了与删除相同的方法。更新。

对db.collection.insertOne& amp;和db.collection.insertOne& db.collection.insertMany方法?

可以安全地假设我正在收集一个在某个时间点将有数百万条记录的集合。

3 个答案:

答案 0 :(得分:1)

存在一些细微差别:

因此,这取决于您选择的访问模式。通常,为了提高性能,如果您必须添加多个文档,请尝试仅进行1次调用(insert()insertMany())并使其无序(如果可能,从应用程序的角度来看)。如果您对是否应该使用(insert()insertMany())提出疑问,则取决于您是否需要explain()或生成的objectIds,但性能没有差异(如果您输入:db.yourCollection.insertdb.yourCollection.insertMany(不含()),您会看到两者都执行了bulk.insert(obj)

<强> TL; DR:

答案 1 :(得分:0)

执行操作时,请说明30个文档,使用许多选项插入/更新效率更高:

  1. 有一次对服务器的调用
  2. 服务器引擎处理工作而无需等待新数据
  3. 因此减少往返次数,网络开销并允许db引擎一次处理所有文档,通过客户端调用插入/更新的所有文档逐个循环来列出优势

答案 2 :(得分:0)

性能测试

  • 3.7k x 50000数据
  • 试图考虑相同的情况
  • 流星驱动程序包装了用于光纤的Node驱动程序以编写代码

节点驱动程序测试

  • 节点驱动程序insert很多具有异步+无级同步:10〜11秒
  • 节点驱动程序insertMan很多具有异步功能:13〜15秒
  • 异步插入节点驱动程序:20〜23秒

流星驱动程序测试

  • 流星驱动程序异步插入:24〜27秒
  • 流星驱动程序插入并同步:43-49秒

结论

  • insertMany比插入要快得多
  • 承诺+等待比异步更快
    • 无法解释。有想法吗?
  • 流星同步功能对于批量插入很慢