MongoDB:批量插入(Bulk.insert)vs插入多个(插入([...]))

时间:2016-01-31 09:17:01

标签: mongodb

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

document.getElementById('slide');

VS

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

有没有更快的?

2 个答案:

答案 0 :(得分:33)

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

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

此操作将返回BulkWriteResult,请参阅documentation中的更多详细信息。

答案 1 :(得分:25)

是的,有区别。使用批量操作(总是),您只需要访问数据库一次,然后对批量记录执行操作,然后返回应用程序。对于单独的插入,您将需要转到数据库,执行插入操作,然后返回到应用程序,并且您将为告诉数据库执行的每个插入操作重复此过程。因此,与批量操作相比,单个插入非常慢。这就像杂货购物,如果你有你需要购买的所有东西,你可以一次购买(批量插入),但如果每个项目,你需要开车到商店获得它,然后开车回家,然后开车回商店购买另一件商品,然后效率不高(如个别插页)

注意:即使在使用shell与MongoDB交互时,您只需处理一个insert函数来进行批量和单个插入,您应该区分insertOne()和{{ 1}}使用MongoDB驱动程序API时的操作。你永远不应该在一个循环中打电话给insertMany()(理由:看看我上面的杂货购物比喻)。