我正在阅读关于Cassandra的读取操作和一致性级别的post。根据这篇文章:
例如,在复制因子为3且读取一致性级别为QUORUM的群集中,将联系给定行的3个副本中的2个以完成读取请求。假设联系的副本具有不同版本的行,具有最新版本的副本将返回所请求的数据。在后台,检查第三个副本与前两个副本的一致性,如果需要,最新副本会发出对过期副本的写入。
因此,即使是Quorum的一致性级别,也不能保证您不会过时阅读。 根据上面的段落,如果第三个副本具有最新的时间戳,则协同协调器已经返回了它所询问的两个副本的最新时间戳。但它不是最新的,因为第三个副本有最新的时间戳。
答案 0 :(得分:16)
QUORUM CL 读取不保证数据的一致性。什么保证一致性是以下的不公平
(WRITE CL + READ CL)>复制因素
翻译保证数据一致性所需的最小W + R是
全部写完+读一个写一个+阅读所有写的字数+读取数量
就像在帖子中所说的那样,如果你的复制因子为3并且你用CL1写了肯定1节点有新信息,而其他2可能有旧信息。询问cassandra CL QUORUM读取您可能从其他2个节点(旧数据)检索数据,并将信息返回给客户端。但是,由于协调器将读取请求发送到所有节点(但在将响应发送回客户端之前仅等待2),他将找出哪个节点具有最新鲜的信息并更新其他节点。
其他,在RF3情况下,如果您在Quorum中写入数据,则至少有2个节点会有新信息 - 使用CL QUORUM执行读取将调用3个节点中的2个,在这种情况下,至少有两个节点中的一个有新鲜的信息。