Cassandra

當其中一種模式崩潰時,這些衝突的場景將如何在 cassandra 中工作?

  • June 21, 2018

假設我們有兩個節點(簡單副本無分片),即 N1,N2,複製因子為 2。我使用預設的讀寫一致性級別R,即W1,這意味著它將從單個節點讀取/寫入

方案 1

  1. 考慮寫請求去節點N1 更新記錄R1。說名字scott更新到scott_update1
  2. 在它被複製到之前N2N1崩潰了
  3. 另一個寫入請求轉到節點N2 以更新相同的記錄R1。現在scott更新為scott_update2
  4. 現在N1回來時,名稱scott_update1會更新為scott_update2嗎?

方案 2

  1. 考慮寫請求去節點N1 更新記錄R1。說名字scott更新到scott_update1
  2. 在它被複製到之前N2N1崩潰了
  3. 讀取請求轉到節點N2 以讀取相同的記錄R1。它返回scott
  4. 現在N1回來時,名稱scott_update1會更新scott還是保留scott_update1

在這兩種情況下,一切都取決於節點N1離線的時間,以及提示啟用與否的位置……

在場景 1 中,如果停機時間少於 3 小時(儲存提示的預設視窗),則將N1重播離線時所做的更改,並且值將更新為,scott_update2因為該值具有更大的時間戳。如果停機時間大於此視窗 - 那麼您需要執行修復。

對於場景 2,有兩件事 - 它最終可能會在發生讀取修復時被修復,或者您可以顯式執行修復。

但是談到複製 - 寫入通常同時發生在所有副本上,並且一致性級別指定需要響應多少節點才能將請求視為成功,因此在大多數情況下也可以更新 N2。

引用自:https://dba.stackexchange.com/questions/210204