cassandra群集上的数据如何保持一致

cassandra群集上的数据如何保持一致,cassandra,datastax-enterprise,datastax,cassandra-2.0,Cassandra,Datastax Enterprise,Datastax,Cassandra 2.0,当我阅读有关cassandra write一致性的datastax文档时,我有一个疑问。我有一个问题,卡桑德拉将如何在以下场景中保持一致状态: 写入一致性级别=仲裁 复制因子=3 根据文档,当写入发生时,协调器节点将向群集中的所有副本发送此写入请求。如果一个副本成功而另一个失败,那么协调器节点将向客户端发送错误响应,但节点1成功写入数据,并且不会回滚 在这种情况下, 读取修复(或暗示的切换或节点醇修复)是否会将不一致的数据从节点1复制到节点2和节点3 如果没有,cassandra将如何避免将

当我阅读有关cassandra write一致性的datastax文档时,我有一个疑问。我有一个问题,卡桑德拉将如何在以下场景中保持一致状态:

  • 写入一致性级别=仲裁
  • 复制因子=3
根据文档,当写入发生时,协调器节点将向群集中的所有副本发送此写入请求。如果一个副本成功而另一个失败,那么协调器节点将向客户端发送错误响应,但节点1成功写入数据,并且不会回滚

在这种情况下,

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

如果没有,cassandra将如何避免将不一致的数据复制到其他副本


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

我看不出有任何错误-系统按照您所说的做,即两个覆盖一个,并且由于将错误消息作为“失败”发送回客户端,因此最终状态应为“失败”通过读取修复工具。

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


在任何读取查询的情况下,协调器节点向所有副本节点发送请求,并将比较所有副本节点的结果。如果其中一个副本节点未发送最新数据,则它将向该节点发送读取修复命令,以保持节点同步。

如何克服此问题。我不希望我的用户在提交时失败的收件箱中看到邮件。有什么解决方法可以避免这个问题吗?我不知道有什么方法可以避免这个问题,但是你可以做的是在失败的写入中再试一次。只有当该分区键有足够的节点可用时,这才有效,否则写操作将再次失败。一个选项是将第二次写入的写入一致性级别降低为1。感谢您的更新。我希望卡桑德拉能想出一些解决办法。