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