我正试图向自己解释这个......
以下是我的理解:
假设我有4个节点,RF = 3且CL = QUORUM用于读取和放大写。
在我的表(id,title)中,我写了数据{id = 1,title ='mytext'},如果2个节点成功写入,则write将返回成功。说它是成功的,我们现在(至少)2个节点{id = 1,title ='mytext'},可能还有一个节点(id = 1,title ='olddata')
然后任何后续读取(其中id = 1)需要找到具有相同数据的2个节点(QUORUM)才能成功返回,这对旧数据永远不会发生。因为剩下的最多只有1个节点包含旧数据。
这是准确的吗?
答案 0 :(得分:0)
节点数量并不重要,更重要的是RF,即有多少节点拥有数据副本。因此CL Quorum意味着:
2个节点必须在写入时确认 2个节点必须在读取时确认
在引擎盖下,请求实际上不会转到所有节点。根据一些统计数据和组件探测器,协调器将选择其中一个具有数据的节点,而其他节点只会被要求散列,而不是整个数据。如果接收的数据与散列方式匹配,则将其返回给客户端。如果不是,协调器将从其他节点请求完整数据并使用上次写入获胜策略解决冲突。
为了能够做到这一点,时钟必须同步。通常由ntp ...但有些人甚至在主机上安装GPS接收器以保持时钟偏差非常紧张。
简而言之,你的推理完全是o.k。
如果您想了解更多有关所有组合的信息,请查看以下链接: https://www.ecyrd.com/cassandracalculator/