2017-10-06 65 views
2

我有一個RF = 2的設置,並且所有讀/寫操作都是在CL = 1的情況下完成的。有幾個地方我打開一個會話,寫入一個條目,後端processin並再次閱讀。這大多工作,但有時閱讀返回無。我們懷疑來自協調器節點的讀數是否與寫入完成的節點不同。我的理解是,協調器節點將讀取請求發送到兩個副本節點並正確返回結果。Cassandra與RF = 2和CL = 1的立即一致性

我們並不擔心行的更新,因爲大部分時間我們只需要對新創建的行進行立即一致性操作。我們實際上不需要Quoram,RF = 2主要是爲了容忍一個節點的丟失。我們非常感謝任何有關如何實現RF = 2和CL = 1的一致性的指針。

+0

在多節點集羣中,幾乎無法立即與CL = 1保持一致。 –

回答

1

具有QUORUM的RF = 3可以讓您立即獲得單節點丟失的一致性。任何少於這個數字的東西都是不可能的,因爲總會有一個節點在其他節點之前看到突變的窗口。

R + W > N to have a consistent read/write. 
R (number of nodes needed for read) + W (number of nodes needed for write) > N (number of nodes with data, RF) 

與CL 1的讀/寫和RF = 2,你有1 + 1是不是> 2.你可以使用所有,只在讀或寫,你會得到你的一致性兩個或法定人數(因爲對於TWO和QUORUM,rf = 2),但是任何節點故障都會降低讀取或寫入的能力。

+0

感謝克里斯的迴應。我們很可能會去使用Rf = 3和Quoram。我想看看是否有人有經驗使用read_repair_chance = 1。有了這個,我可以使用CL = 1進行編寫,但讀取將相當於CL = ALL,並且仍然可以按照https://docs.datastax.com/en/cassandra/2.1/cassandra/operations/opsRepairNodesReadRepair.html – Chetan

+0

容忍一個節點故障您將能夠處理節點故障,但不會使查詢保持一致。讀取修復= 1.0的CL.ONE查詢仍然會返回不一致的數據,但如果存在不一致性,它們將在查詢返回給您之後異步修復。這與阻止在更高一致性級別獲得的讀取修復不同。 –