Cassandra
當其中一種模式崩潰時,這些衝突的場景將如何在 cassandra 中工作?
假設我們有兩個節點(簡單副本無分片),即 N1,N2,複製因子為 2。我使用預設的讀寫一致性級別
R
,即W
1,這意味著它將從單個節點讀取/寫入方案 1
- 考慮寫請求去節點
N1
更新記錄R1
。說名字scott
更新到scott_update1
- 在它被複製到之前
N2
,N1
崩潰了- 另一個寫入請求轉到節點
N2
以更新相同的記錄R1
。現在scott
更新為scott_update2
- 現在
N1
回來時,名稱scott_update1
會更新為scott_update2
嗎?方案 2
- 考慮寫請求去節點
N1
更新記錄R1
。說名字scott
更新到scott_update1
- 在它被複製到之前
N2
,N1
崩潰了- 讀取請求轉到節點
N2
以讀取相同的記錄R1
。它返回scott
- 現在
N1
回來時,名稱scott_update1
會更新scott
還是保留scott_update1
?
在這兩種情況下,一切都取決於節點
N1
離線的時間,以及提示啟用與否的位置……在場景 1 中,如果停機時間少於 3 小時(儲存提示的預設視窗),則將
N1
重播離線時所做的更改,並且值將更新為,scott_update2
因為該值具有更大的時間戳。如果停機時間大於此視窗 - 那麼您需要執行修復。對於場景 2,有兩件事 - 它最終可能會在發生讀取修復時被修復,或者您可以顯式執行修復。
但是談到複製 - 寫入通常同時發生在所有副本上,並且一致性級別指定需要響應多少節點才能將請求視為成功,因此在大多數情況下也可以更新 N2。