進入mongodb中文手冊(4.2版本)目錄
mongodb提供能夠執行批量寫操作的客戶端。批量寫入操作會影響單個集合。mongodb允許應用程式確定可接受的批量寫入操作所需的確認級別。
批量寫入為3.2版中的新功能。
db.collection.bulkwrite()方法提供了批量插入,更新和刪除操作的能力。mongodb還支援通過db.collection.insertmany()完成批量插入。
批量寫操作可以有序或無序。
mongodb根據操作的有序列表序列執行操作。如果在其中乙個寫操作的處理過程中發生錯誤,mongodb將返回,並且不處理列表中任何剩餘的寫操作。請參閱有序批量寫入。
mongodb可以使用無序的操作列表並行執行操作,但是不能保證此行為。如果其中乙個寫操作的處理過程中發生錯誤,mongodb將繼續處理列表中剩餘的寫操作。請參閱無序批量寫入。
在分片集合上執行有序列表的操作通常比執行無序列表的操作要慢,因為對於有序列表,每個操作必須等待上乙個操作完成。
預設情況下,bulkwrite()執行有序操作。要指定無序寫操作,請在選項文件中進行設定 ordered : false。請參閱執行操作。
bulkwrite() 支援以下寫操作:
每個寫操作都作為文件放入陣列中並傳遞給bulkwrite()。
例如,以下執行多個寫操作:
characters集合包含以下文件:
,,
以下bulkwrite()對集合執行多項操作:
try}}
,}},
,"update" : }}
},}}
,,"replacement" : }}
]);}
catch
(e)
該操作返回以下內容:
,"upsertedids" :
}
有關更多示例,請參見 bulkwrite()示例。
大量的批量插入操作(包括初始資料插入或常規資料匯入)可能會影響分片群集(sharded cluster)的效能。對於批量插入,請考慮以下策略。
如果分片集合為空,則該集合只有乙個初始塊(chunk),它位於單個分片上。然後,mongodb必須花一些時間來接收資料,拆分資料,並將拆分的塊分發到可用的分片。為了避免這種效能損失,您可以預先拆分集合,請按照在分片集群中拆分塊(split chunks in a sharded cluster)的說明 。
要提高對分片群集的寫入效能,請將bulkwrite()可選引數ordered 設定為false。mongos可以嘗試同時將寫入傳送到多個分片。對於空集合,首先預先拆分集合,請按照在分片集群中拆分塊(split chunks in a sharded cluster)的說明 。
如果您的分片鍵(shard key )在插入過程中是單調地(monotonically )增加的,則所有插入的資料將儲存在集合中的最後乙個塊(chunk)中,該塊始終位於單個分片上。因此,群集的插入容量將永遠不會超過該單個分片的插入容量。
如果您的插入容量大於單個分片可以處理的插入容量,並且如果您無法避免單獨地增加分片鍵,那麼請考慮對應用程式進行以下修改:
例如,在c ++中,以下示例交換生成的bson objectid的第乙個和末尾的16位字,因此它們不再單調遞增。
using namespace mongo;
oid make_an_id(
)void foo(
)
也可以看看:
分片鍵(shard keys )中獲取有關選擇分片鍵的資訊。另請參見分片鍵內部(shard key internals)(特別是 選擇分片鍵(choosing a shard key))。
進入mongodb中文手冊(4.2版本)目錄
Redis批量寫入資料
生產中的有些場景,我們經常需要大批量的往redis中寫入資料,如果我們採用單條迴圈寫入的話,不僅效率低下,而且可能會出現頻繁的建立和銷毀redis連線,這些都是很不合理的.對此,我們可以採用jedis的父類中的pipelined 方法獲取管道,它可以實現一次性傳送多條命令並一次性返回結果,這樣就大量...
HBase BulkLoad批量寫入資料實戰
在進行資料傳輸中,批量載入資料到hbase集群有多種方式,比如通過hbase api進行批量寫入資料 使用sqoop工具批量導數到hbase集群 使用mapreduce批量匯入等。這些方式,在匯入資料的過程中,如果資料量過大,可能耗時會比較嚴重或者占用hbase集群資源較多 如磁碟io hbase ...
PHP批量寫入資料 批量刪除資料
批量插入可以參考 sql insert into data id,ip,data values for i 0 i 100 i sql join sqls connect mysql query sql 批量刪除多條記錄,對於比較多的資訊,如果沒有批量刪除功能是非常麻煩的。可以加全選核取方塊 連線資...