关于Cassandra中R+W>N强一致性规则的疑问与求证
关于Cassandra强一致性条件
R + W > N的疑问与分析 背景说明
Datastax提出,Cassandra中当读写一致性级别满足R + W > N时,读写操作具备强一致性,各参数定义:
R:读操作的一致性级别W:写操作的一致性级别N:副本集群的节点数量
矛盾场景举例(N=3,R=3,W=1)
假设集群有3个副本节点,其中两个节点持有最新数据,一个节点数据过期:
nodeA k1 -> v_new nodeB k1 -> v_new nodeC k1 -> v_old
此时设置R=3、W=1,满足3+1>3的条件,但执行如下更新语句:
UPDATE my_table SET my_count = my_count + 1 WHERE id = my_primary_key
若该更新仅被持久化到nodeC,最终nodeC的值会变为v_old + 1,而非预期的v_new + 1,出现数据不一致问题。
对强一致性条件的探讨
是否强一致性需要满足更严格的约束?比如:
R > N / 2 + 1 W > N / 2 + 1
具体要求为:
- 读取操作需从至少
N/2+1个节点获取数据,确保能拿到最新版本 - 写入操作需先从至少
N/2+1个节点读取最新值,再将更新同步至法定数量的节点
内容的提问来源于stack exchange,提问作者olaf
相关产品推荐
相关产品推荐

