pymongo--Bulk Write Operations

mongo支持客户端进行批量写操做,其基于单一集合。php

mongo数据库容许应用程序指定用于批量写操做的可接受的等级。数据库

mongo提供方法db.collection.bulkWrite()用于批量插入,修改,删除操做,固然每种操做也有其对应的批量操做方法,
如插入的insertMany()方法。数组

批量写的有序操做与无序操做:
A、对于有序操做的集合,mongo会串行的执行这些写操做。当集合中一个写操做执行失败时,mongo不会执行集合中剩余
的写操做,将直接返回。markdown

B、对于无序的操做集合,mongo能够并行的执行这些写操做,可是不保证必定并行执行。当集合中某个写操做执行失败时
mongo不直接返回,继续执行集合中剩下的写操做。oracle

C、对于分片集合来讲,一般执行有序的写操做集合每每慢于无序的写操做集合,由于,执行有序写操做集合时,每一个操做
的执行都要等其上一个操做执行完毕。性能

D、默认状况下,bulkWrite()执行有序的写操做集合,若是要指定执行无序的写操做集合,需将选项文档中的ordered域的
值设置为false。spa

bulkWrite()方法:
A、该方法支持的写操做:
insertOne,updateOne,updateMany,replaceOne,deleteOne,deleteManycode

B、该方法接收文档数组类型参数。文档

bulkWrite()方法的原型:原型

db.collection.bulkWrite(
   [ <operation 1>, <operation 2>, ... ], { writeConcern : <document>, ordered : <boolean> } )

bulkWrite()方法使用示例:

try { db.characters.bulkWrite( [ { insertOne : { "document" : { "_id" : 4, "char" : "Dithras", "class" : "barbarian", "lvl" : 4 } } }, { insertOne : { "document" : { "_id" : 5, "char" : "Taeln", "class" : "fighter", "lvl" : 3 } } }, { updateOne : { "filter" : { "char" : "Eldon" }, "update" : { $set : { "status" : "Critical Injury" } } } }, { deleteOne : { "filter" : { "char" : "Brisbane"} } }, { replaceOne : { "filter" : { "char" : "Meldane" }, "replacement" : { "char" : "Tanys", "class" : "oracle", "lvl" : 4 } } } ] ); } catch (e) { print(e); } 

批量插入到分片集合的策略:
A、Pre-Split the Collection:若是一个分片存储的集合是空的,那么这个集合仅有一个由某个分片持有的
初始化chunk(在某个分片上的分片键值的一段连续的范围),这样,mongo就就必须花费时间接收数据,建立
分chunk,而且把这些分离的chunk分配到可用的分片上。为了不这部分性能开销,可使用预先分离集合策
略。

B、Unordered Writes to mongos:为了提升在分片集群上的写操做性能,可使用批量操做bulkWrite()的无序 操做行为(将其选项参数ordered设置为false).

相关文章
相关标签/搜索