微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

cassandra 如何处理 QUORUM 读取之间的写入时间戳冲突?

如何解决cassandra 如何处理 QUORUM 读取之间的写入时间戳冲突?

在极不可能发生的情况下,2 次 QUORUM 写入并行发生在同一行上,并导致 2 个分区副本与同一时间戳不一致:

当 CL=QUORUM READ 发生在 3 节点集群中,并且 READ 中的 2 个节点报告具有相同时间戳的不同数据时,READ 将决定什么是实际记录?还是会出错?

那么下一个问题是,既然数据具有相同的时间戳,集群如何再次达到一致性?

我知道这种情况不太可能发生,但我的猜测是仍有可能。

示例图:

enter image description here

解决方法

这是我从 Datastax 支持中得到的:

绝对是一种需要考虑的可能情况。 Cassandra/Astra 使用以下优先规则处理这种情况,以便客户端的结果始终保持一致:

比较时间戳,最新的时间戳总是胜出 如果读取的数据具有相同的时间戳,则删除优先于插入/更新 如果仍然有平局,Cassandra/Astra 会选择词法上较大的列的值 虽然这些肯定有点武断,但 Cassandra/Astra 无法知道应该优先考虑哪个值,并且这些规则确实可以在发生平局时始终为所有客户端提供完全相同的结果。

当 CL=QUORUM READ 发生在 3 节点集群中,并且 READ 中的 2 个节点报告具有相同时间戳的不同数据时,READ 将决定什么是实际记录?还是会出错?

Cassandra/Astra 会在遍历读取路径时在幕后为您处理此问题。如果两个副本返回的数据之间存在差异,则在将数据发送回客户端之前,将在参与读取的两个节点之间比较和同步数据。

因此,对于您的图表,W1 和 W2 都发生在 t = 1,返回到客户端的数据将为 data = 2,因为 2 > 1。此外,节点 1 现在将具有缺失的数据= 2 在 t = 1 记录。节点 2 在 t = 1 时仍然只有数据 = 1,因为它没有参与该读取。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?