2017-05-17 156 views
0

在執行批量更新時,mongodb是否鎖定了數據庫? 我正在使用mongo批量操作。併發寫入mongodb批量更新

var bulk = db.items.initializeUnorderedBulkOp(); bulk.find({ status: "D" }).updateOne({ $set: { status: "I", points: "0" } }); bulk.find({ status: "A" }).updateOne({ $set: { status: "B", points: "0" } }); bulk.execute();

假設這個操作有100查找和更新,並有其他進程運行的也試圖在數據庫更新同一集合。

它有鎖定以防止併發更新嗎?

回答

1

假設您使用的MongoDB版本> = 3.0 WiredTiger Storage Engine(這是MongoDB的版本> = 3.2的默認存儲引擎),使用Document Level Concurrency控制。

因此,在您的示例中使用WiredTiger時,您的更新可以同時運行。如果兩個線程或進程碰巧試圖同時更新同一文檔,MongoDB將檢測到寫入衝突並以透明方式重試。

查看Concurrency FAQ瞭解更多詳情。

+0

是的。我明白,使用'db.collection.update()'更新集合時,mongo使用鎖定。我特別要求,如果我正在使用bulk.initializeUnorderedBulkOp更新集合。它會使用鎖嗎? 是的。我正在使用mongo 3.2 –

+0

批量更新與鎖定/併發性沒有區別。 – helmy