簡體   English   中英

mongodb-如何使用mongodb java客戶端鎖定集合

[英]mongodb - how to lock collection with mongodb java client

我需要在后台線程中同時更新整個集合,但是讀取操作可能會同時發生。 當我對它進行基准測試時,大約需要3秒鍾來更新它。 在更新收藏集時有什么方法可以鎖定收藏集嗎? 我嘗試創建一個新集合並將所有文檔插入其中,並使用“ dropToTarget = true”將其重命名為原始集合,但是我不確定分片的安全性和穩定性。 我讀到renameCollection與分片不兼容。

如果有人可以提出一個好主意,那就太好了。

謝謝。

您是否提出了兩種可能的策略來更新您的收藏,一種是內聯的並帶有鎖,另一種是臨時的?

正如mongodb文檔明確指出的那樣,它不適用於分片集合( http://docs.mongodb.org/manual/reference/command/renameCollection/ )。 根據我的理解,這意味着您要重命名的集合不會被分片,因為在進行實際重命名之前您需要刪除其他集合,因此很可能會丟失以前保留的所有分片(-信息)。 因此,您需要重新激活分片。 我強烈不鼓勵使用兩種收集方法,尤其是在分片數據時。
您需要從分片的集合中獲取所有數據並將其集中存儲,完成更新后,您需要重命名集合並再次對其進行分片。 這將為整個系統造成大量的I / O,尤其是對於進行更新的客戶端而言。

取決於您的系統體系結構(具有單個入口點)。 您可以輕松地持有一些全局標志來告訴您當前是否正在運行集合更新。 禁止其他寫操作。
對於進入MongoDB的多入口點,您可以嘗試$ isolated,但這不適用於分片集合。 而且我不確定它是否允許讀取操作,文檔不是很清楚。

正在進行更新時,是否嚴格禁止寫入任何數據? 您執行什么類型的更新。 他們可以互相影響嗎? 還是可能有並發寫入?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM