我們有一個客戶端在兩個文檔上連續寫入(使用{w:1}
)。 例如,原件可能是:在兩個文檔上寫入時,Mongodb在副本集上的最終一致性
{_id: "a", value: 0}
, {_id: "b", value: 0}
和客戶端更新文件「a」到{_id: "a", value: 1}
,然後,更新完成後,客戶端更新文件「B」至{_id: "b", value: 1}
後。
第二個客戶事後撥打find({})
。第二個客戶端從輔助服務器讀取數據,可能尚未收到所有更改。 很明顯,它可以閱讀以下狀態:
{_id:"a",value:0}
,{_id:"b",value:0}
{_id:"a",value:1}
,{_id:"b",value:0}
{_id:"a",value:1}
,{_id:"b",value:1}
這些都對主要的 「真實」 的狀態(在某個時刻過去)。
第二個客戶端可以看到如下狀態:{_id:"a",value:0}
,{_id:"b",value:1}
?注意這個狀態從來就不存在於小學。
P.S. 解釋here說:
二級工具......它們出現在OPLOG順序應用的寫操作。
這是否意味着輔助用戶按照他們在主服務器上更新的順序更改他們的文檔?
P.S. find
遊標是否「凍結」了他們正在讀取的文檔的狀態(即忽略光標創建後所做的更改)?如果我使用find(...).sort({_id:-1})
或者文檔「a」的id是「c」(即大於「b」),情況會不同嗎?
感謝
謝謝你的光標解釋。 – Oren