1

当我阅读有关 cassandra 写入一致性的 datastax 文档时,我有疑问。我对 cassandra 如何在以下情况下保持一致状态有疑问:

  • 写入一致性级别 = Quorum
  • 复制因子 = 3

根据文档,当发生写入时,协调节点会将此写入请求发送到集群中的所有副本。如果一个副本成功而另一个副本失败,则协调节点将向客户端发送错误响应,但节点 1 成功写入数据并且不会回滚。

在这种情况下,

读取修复(或提示切换或节点工具修复)是否会将不一致的数据从节点 1 复制到节点 2 和节点 3?

如果不是,cassandra 将如何处理不将不一致的数据复制到其他副本?

你能澄清我的问题吗

4

3 回答 3

2

您完全正确,读取修复或其他方法将更新 node-2 和 node-3。这意味着即使失败的写入最终也会更新其他节点(如果至少有一个成功)。Cassandra 没有关系数据库所具有的回滚功能。

于 2014-02-13T07:22:45.167 回答
0

我看不出有什么问题——系统按照你说的做,即两个覆盖一个,并且由于错误消息作为“失败”发送回客户端,那么最终状态应该是“失败”读取维修工具。

于 2014-09-29T20:50:42.540 回答
0

Cassandra Coordinator 节点在其存储中维护失败的副本数据,它会定期重试(3 次左右),如果成功则发送最新数据,否则将截断其存储中的数据。

如果有任何读取查询,Coordinator 节点会向所有副本节点发送请求,它将比较来自所有副本节点的结果。如果其中一个副本节点没有发送最新数据,那么它将向该节点发送读取修复命令以保持节点同步。

于 2016-09-29T13:08:39.200 回答