【问题标题】:MongoDB: Bulk insert (Bulk.insert) vs insert multiple (insert([...]))MongoDB:批量插入(Bulk.insert)与插入多个(插入([...]))
【发布时间】:2016-01-31 17:44:28
【问题描述】:

bulk insertinserting multiple documents 之间有什么区别吗?

var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { item: "abc123", defaultQty: 100, status: "A", points: 100 } );
bulk.insert( { item: "ijk123", defaultQty: 200, status: "A", points: 200 } );
bulk.insert( { item: "mop123", defaultQty: 0, status: "P", points: 0 } );
bulk.execute();

VS

db.collection.insert(
   <document or array of documents>
)

有没有更快的?

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    @Dummy 是正确的,批量操作通常比单个插入更快,但是,从 2.6 及更高版本开始,使用 collection.insert 插入多个文档只是 BulkWrite 的语法糖。如果您将 ordered 标志设置为 false,则性能应该与无序批量插入相同:

    db.collection.insert(<document array>,{ordered:false})
    

    这个操作会返回一个BulkWriteResult,更多细节请看documentation

    【讨论】:

      【解决方案2】:

      是的,有区别。使用批量操作(总是),您只需要访问数据库一次,对批量记录执行操作,然后返回应用程序。对于单独的插入,您需要进入数据库,执行插入,然后返回应用程序,您将针对您告诉数据库执行的每个插入操作重复此过程。因此,与批量操作相比,单个插入非常慢。就像买杂货一样,如果你把需要买的东西都列出来了,你可以一次买完(批量插入),但是如果每件东西都需要开车去商店买,然后开车回家,然后开车回店里再买一件,那么效率不是很高(比如单独插入)

      注意:尽管在使用 shell 与 MongoDB 交互时,您只需要处理一个 insert 函数来进行批量插入和单独插入,但在使用时您应该区分 insertOne()insertMany() 操作MongoDB 驱动程序 API。而且你永远不应该在循环中调用insertOne()(原因:参见上面我的杂货购物类比)。

      【讨论】:

      • 这个答案在MongoDB 2.6 之后有效吗? Alex's answer 提到collection.insertBulkWrite 的语法糖
      • 只有当你传递一个文档数组给它时才是真的
      猜你喜欢
      • 1970-01-01
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 2015-09-06
      • 1970-01-01
      • 2013-07-12
      • 2017-10-05
      相关资源
      最近更新 更多