在Cassandra群集中,我有twp个节点,现在客户端正好在同一时间发送同一记录(具有不同值)的更新, Cassandra群集的两个不同节点。由于Cassandra在少主模式下工作,并且两个节点都可以接受更新请求, 我的问题是,在最终的一致性期间如何解决该冲突,以及哪个值最终会优先?
这是示例场景
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
的值最终将在这里解析吗?
答案 0 :(得分:2)
最后一次写入始终会获胜,我怀疑时间戳是否相同-它们具有微秒级的分辨率,因此时间戳具有相同值的可能性很小。
如果要防止这种情况,可以使用lightweight transactions来允许在插入/更新/删除中添加条件,但是请记住它们非常耗费资源,并且会增加给集群带来很大的负担。