我在當前項目中遇到了mongo更新問題。我們在MongoDB中維護了一個文檔池。閱讀器進程從該池中提取一批文檔。爲了確保來自DB的文檔不被再次提取,與每個文檔相關聯的狀態被改變(例如,從已到達到正在處理)。是否有可能在MongoDB中進行原子批量更新?
我們正在考慮擴大規模,並有多個讀取器進程撿起不同的批次。但是,根據我的理解,mongo更新在批處理中不是原子的。是否有任何方法可以實現這一目標?我需要以確保文檔在被前一個文檔更新之前不會被另一個讀取器從池中提取出來。我基本上是在查看原子批處理更新。 謝謝!
感謝您的答案,但我不認爲這將解決問題。我的問題是,我希望批處理中的所有文檔的狀態可以自動更改並添加readerId似乎不處理該問題。 – Tazo 2013-05-02 05:07:06
隨着更新的全部或部分行爲,標記時批量大小爲1,或者所有新文檔都將發送給一個閱讀器。 – grogers 2013-05-02 14:55:59
在http://docs.mongodb.org/manual/faq/concurrency/的第二次閱讀中,我想說當多個線程使用相同的查詢發出更新語句時,結果將不甚明瞭。這些線程將爭奪文檔,並且這將取決於什麼線程在yield之後獲得寫入鎖定。 mongo上有一個開放的問題來支持限制更新:https://jira.mongodb.org/browse/SERVER-1599。 – grogers 2013-05-02 15:23:04