我想知道以下查询的性能如何变化。 我知道批量插入按顺序执行,而普通/数组插入也按顺序执行。
BULK INSERT
var bulk = db.items.initializeUnorderedBulkOp();
bulk.insert( { _id: 1, item: "abc123", status: "A", soldQty: 5000 } );
bulk.insert( { _id: 2, item: "abc456", status: "A", soldQty: 150 } );
bulk.insert( { _id: 3, item: "abc789", status: "P", soldQty: 0 } );
bulk.execute( { w: "majority", wtimeout: 5000 } );
普通INSERT
db.items.insert( { _id: 1, item: "abc123", status: "A", soldQty: 5000 } );
db.items.insert( { _id: 2, item: "abc456", status: "A", soldQty: 150 } );
db.items.insert( { _id: 3, item: "abc789", status: "P", soldQty: 0 } );
数组插入
var array_insert = [
{ _id: 1, item: "abc123", status: "A", soldQty: 5000 } ,
{ _id: 2, item: "abc456", status: "A", soldQty: 150 } ,
{ _id: 3, item: "abc789", status: "P", soldQty: 0 }
] ;
db.items.insert( array_insert );
任何人都可以解释上述查询的性能或好处的不同之处是什么?
答案 0 :(得分:3)
批量插入更快,因为插入是一次性发送的。将它与发送一个插入的常规流进行比较,等待服务器回复,然后再发送下一个插入。
无论模式如何(批量与常规),服务器都需要插入所有内容。在常规模式下,客户端在等待服务器响应时丢失时间。不一定是因为服务器很慢。网络也可能很慢。
无论使用何种数据库,批处理请求都是加速应用程序的常用方法。例如,请参阅pipelining in Redis。