【问题标题】:Cassandra cluster : How it resolve single timestamp updates?Cassandra 集群:它如何解决单个时间戳更新?
【发布时间】:2019-03-30 09:23:00
【问题描述】:

在 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的值最终将如何在这里解决?

【问题讨论】:

    标签: cassandra


    【解决方案1】:

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

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

    【讨论】:

    • 我理解概率概率非常低,但是当你设计时你甚至不能跳过那些罕见的场景。例如,在具有多节点的可扩展系统中,可能会在同一记录上同时发生更新。
    • 也不确定我提到的场景将如何通过你提到的轻量级事务链接来解决?
    • 您可以设置更新前应该存在的值的条件
    • 您可以在单个节点上设置条件并验证值,但您将如何在多个节点上进行。
    • 抱歉 - 我不明白这个问题 - LWT 在集群中执行,例如 QUORUM (SERIAL) 或 LOCAL_QUORUM (LOCAL_SERIAL) - 如果条件中的值不同, 交易将被中止...
    猜你喜欢
    • 2017-12-20
    • 1970-01-01
    • 2015-05-23
    • 2015-02-05
    • 1970-01-01
    • 2019-11-13
    • 2018-02-16
    • 1970-01-01
    • 2021-12-04
    相关资源
    最近更新 更多