在分布式系統中,如果只有一半的節點寫入成功,那么后續讀取未寫入資料的節點就會不一致。如何避免這種情況?
client write --> Node1 v
--> Node2 v
client read --> Node3 x(The latest data was not read)
我的計劃:
- 讀取資料時與其他節點比較資料版本
- 如果發現當前節點版本較低,則會路由到其他節點讀取資料。
uj5u.com熱心網友回復:
我看到 mongodb 和 elasticsearch 都被標記了,我不知道你在想哪種情況,但是這兩個資料庫有很大的不同。
對于 mongo,默認情況下不使用副本來提高讀取速度,請參閱https://docs.mongodb.com/manual/core/read-preference,默認讀取首選項只會查看主副本并排除所有副本。Mongo 的寫入也是先寫入主庫,并且復制可能會在寫入主庫完成后異步發生,請參閱https://docs.mongodb.com/manual/core/replica-set-members/。因此,如果您強制讀取輔助設備,則不能保證您擁有最新資料。
對于elasticsearch,elasticsearch自然不能保證你總是閱讀最新的資料,見https://www.elastic.co/guide/en/elasticsearch/reference/current/near-real-time.html,所以無論哪種方式甚至如果只有一個節點,您可能會得到過期的資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/414393.html
標籤:
上一篇:為彈性搜索創建索引時出錯
