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

Jie*_*eng 28 mongodb

批量插入插入多个文档之间有什么区别吗?

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();
Run Code Online (Sandbox Code Playgroud)

VS

db.collection.insert(
   <document or array of documents>
)
Run Code Online (Sandbox Code Playgroud)

有没有更快?

Ale*_*lex 36

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

db.collection.insert(<document array>,{ordered:false})
Run Code Online (Sandbox Code Playgroud)

此操作将返回a BulkWriteResult,请参阅文档中的更多详细信息.


Tee*_*eez 25

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

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