13

我正在阅读这篇关于 Cassandra 中读取操作和一致性级别的文章。根据这篇文章:

例如,在复制因子为 3 且读取一致性级别为 QUORUM 的集群中,联系给定行的 3 个副本中的 2 个以完成读取请求。假设联系的副本具有不同版本的行,具有最新版本的副本将返回请求的数据。在后台,检查第三个副本与前两个副本的一致性,如果需要,最新的副本会向过期的副本发出写入。

因此,即使具有 Quorum 的一致性级别,也不能保证您不会获得过时的读取。根据上面的段落,如果第三个副本有最新的时间戳,则co-coordinator已经返回了它查询的两个副本的最新时间戳。但这不是最新的,因为第三个副本具有最新的时间戳。

4

1 回答 1

22

QUORUM CL读取不保证数据的一致性。保证一致性的是以下不等式

(写 CL + 读 CL)> 复制因子

翻译保证数据一致性所需的最小 W+R 是

写所有 + 读一个
写一个 + 读所有
写法定人数 + 读法定人数

就像帖子中所说的那样,如果您的复制因子为 3,并且您使用 CL1 编写,则肯定 1 个节点有新信息,而其他 2 个节点可能有旧信息。向 cassandra 询问 CL QUORUM 读取,您可能会从其他 2 个节点(旧数据)检索数据,并将信息返回给客户端。但是由于协调器向所有节点发送了读取请求(但在将响应发送回客户端之前只等待了 2 次),他将找出哪个节点具有最新的信息并更新其他节点。

其他,在 RF3 情况下,如果您在 Quorum 中写入数据,至少 2 个节点将有新信息——使用 CL QUORUM 执行读取将调用 3 个节点中的 2 个,在这种情况下,两个节点中至少有一个节点有新信息信息。

于 2014-07-30T17:50:16.427 回答