1

在 Cassandra 集群中说我有 twp 节点,现在客户端会在同一时间发送相同记录(具有不同值)的更新,这些更新会发送到 Cassandra 集群的两个不同节点。由于 Cassandra 在 master less 模式下工作,并且两个节点都可以接受更新请求,我的问题是在最终一致性期间如何解决这个冲突,最终哪个值优先?

这是示例场景

Initial data: KeyA: { colA:"val AA", colB:"val BB"}

Client 1 sends update:  `update data set colA:"val C1_ColA" where 
colB="val BB"` and data becomes below at node_1

KeyA: { colA:"val C1_ColA",  colB:"val BB"}

Client 2 `update data set colA:"val C2_ColA" where 
colB="val BB"` and data becomes becomes below at node_2

KeyA: { colA:"val C2_ColA",  colB:"val BB"}

现在这里的值colA最终会如何解决?

4

1 回答 1

2

最后一次写入总是会获胜,我怀疑时间戳是否相同——它们的分辨率为微秒,因此时间戳具有相同值的可能性非常低。

如果你想防止这种情况发生,那么你可以使用轻量级事务,允许对插入/更新/删除设置条件,但你需要记住它们非常占用资源,并且会给集群增加相当大的负载。

于 2019-03-25T10:21:12.010 回答