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).

相關文章
相關標籤/搜索