Cassandra读取ONE的一致性有时会返回没有数据

时间:2016-04-06 17:55:24

标签: cassandra spring-data datastax nosql

我是Apache Cassandra的新手,所以请原谅我提出愚蠢的问题。 我最近在4个DC之间的8个节点上部署了一个Cassandra集群。

以下是配置: Strategy: NetworkTopologyStrategy Replication factor: 8 Write consistency: ALL Read consistency: ONE

现在我不关心所有写入一致性造成的PUT延迟。但是在测试时,当我在PUT之后尝试“GET”时,请求有时会失败,说“找不到”。

如果我正确解释了datastax文档,那么ONE的一致性级别应该返回一些内容,因为写入一致性设置为ALL。也就是说,当我执行PUT时,所有节点都应该在发送响应之前确认,然后GET应该返回一些东西,即使它是陈旧的数据。

如果我遗失了某些内容或者我误解了文档,请告诉我。

提前致谢。

1 个答案:

答案 0 :(得分:2)

你是正确的,用ALL写和用ONE读取相同的数据应该总是返回一个结果。您还可以使用以下公式:

(nodes_written + nodes_read)> replication_factor

计算读写一致性以保证一致性。

所以有几件事可能会导致这个问题:

  • 在您阅读数据时,您的写入请求尚未完全完成的竞争条件。
  • 您的ALL一致性写入失败,您没有正确处理它。
    • 您的群集连接正在使用DowngradingConsistencyRetryPolicy,其中第一次写入ALL失败,因此它以较低的一致性级别重试写入。
    • 您的群集连接正在使用LoggingRetryPolicy,但您没有正确检测到写入失败。
  • 与您的应用程序如何阅读书写数据有关的其他一些错误。