2016-12-26 20 views
0

我碰到上述行博客 http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/dml/dml_about_hh_c.html在卡桑德拉分包的切換(當羣集無法滿足客戶指定的一致性水平,卡桑德拉不存儲提示)

其相當混亂來了。所以我們可以說我有5節點的集羣,與RF 3寫一致性作爲法定人數即2節點

現在,如果我嘗試寫一些東西並給予了特別的了三個副本節點數據,兩個都下降了。那麼,這是否意味着cassandra不會存儲提示(因爲它知道它無法滿足首位法定人數的一致性)?並拒絕立即寫入,或者將存儲提示給他們,併成功迴應?

有人可以詳細說明嗎?

回答

0

這裏有兩種不同的機制。讓我給你一個例子來澄清。

假設我有3節點3複製和一致性仲裁(2)羣集。 這意味着當我寫入數據庫時​​,我必須得到兩個響應才能滿足我的查詢。

當我滿足我的查詢後,節點將不得不將這個寫入發送到第3個節點。處理查詢的節點嘗試將寫入發送到第3個節點。該節點當前不可用,這會導致節點寫入已提示的切換。然後它將成功返回給客戶端。

注意是暗示切換的一致性已經得到滿足後,會發生。提示切換可以確保寫入到所有擁有副本的節點。

現在有這個的一個例外,這是你發佈的文章中提到的。 一致性級別ANY是一個一致性級別,只要存在能夠服務請求的節點,就可以通過編寫提示的切換來滿足該級別。

1

如果您有RF = 3且2個節點關閉或無法及時處理請求,則寫入請求將失敗並且不會存儲已提示的切換。只有滿足請求的一致性級別(CL)並且你在提示的切換窗口內時,纔會存儲提示的切換。唯一的例外是使用CL = ANY編寫的請求。

+0

如果任何節點無法及時處理請求,那麼根據文檔它將存儲提示。你說它不會存儲,爲什麼? –

+0

只有在寫入請求能夠滿足您的情況下的指定一致性級別(CL = QUORUM)時纔會存儲提示。如果<2個節點能夠成功寫入請求,則請求將失敗並且不會存儲任何提示。如果2個節點能夠滿足寫入,則將爲第3個節點存儲提示。如果所有3個副本都可以寫入,則不會存儲任何提示。希望這有助於。 – bechbd

+0

因此,無論何時在寫入時獲取**超時異常**。這意味着它無法達到我的一致性級別,在這種情況下,提示將不會被存儲。是嗎 ? –