cassandra-2.0 - 在 Cassandra 中以 Quorum 的一致性级别读取操作?

标签 cassandra-2.0 eventual-consistency

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

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

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

最佳答案

法定人数 CL 读做 不是 保证您数据的一致性。保证一致性的是以下不等式

(WRITE CL + READ CL) > REPLICATION FACTOR



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

WRITE ALL + READ ONE
WRITE ONE + READ ALL
WRITE QUORUM + READ QUORUM



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

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

关于cassandra-2.0 - 在 Cassandra 中以 Quorum 的一致性级别读取操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25043208/

相关文章:

erlang - 最终与 erlang 一致的 mnesia 数据库。最佳实践任何人?

cassandra - Cassandra 中的一对多映射

hadoop - 无法从 Presto 使用 Cassandra

scala - 无法从 Spark 连接到 Cassandra(接触点包含多个数据中心)

cassandra - cassandra 中的高读取延迟

database - 分布式事务+强一致性 : Feasibility?

javascript - 如何在 CQRS Web 应用程序中向用户提供即时反馈

cassandra - 5 个 cassandra 节点之一降低了整个集群的性能

java - 将 Amazon RDS 与只读副本结合使用时,如何处理最终的不一致问题?

休息而不放