批量寫入操作

2021-10-05 21:59:57 字數 1889 閱讀 4298

進入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 批量刪除多條記錄,對於比較多的資訊,如果沒有批量刪除功能是非常麻煩的。可以加全選核取方塊 連線資...