Cassandra - 具有相同时间戳的混合列更新的冲突解决方案

时间:2012-03-07 13:29:50

标签: cassandra

我想知道在具有相同客户端时间戳的两次更新的情况下哪些写入获胜。

初始数据:KeyA: { col1:"val AA", col2:"val BB", col3:"val CC"}

客户端1发送更新:KeyA: { col1:"val C1", col2:"val B1"}

客户端2发送更新:KeyA: { col1:"val C2", col2:"val B2"}

两个更新都具有相同的时间戳

KeyA上的行查询会返回什么结果?

  1. { col1:"val C1", col2:"val B1", col3:"val CC"} - 克林特1胜
  2. { col1:"val C2", col2:"val B2", col3:"val CC"} - 客户2获胜
  3. { col1:"val C2", col2:"val B1", col3:"val CC"} - 混合更新
  4. 我希望,这个结果是不可预测的 - 因为两个更新都有相同的时间戳。

    混合情景也可能吗?

2 个答案:

答案 0 :(得分:4)

时间戳是每列的属性,而不是整个插入本身。通过比较实际列值本身来解析具有相同确切时间戳的多个列。这是通过词法按字节比较值来完成的,这样返回的值就是确定的。

因此,在您的示例中,如果两个客户端插入的每个列都具有相同的确切时间戳,则可以看到混合更新,具体取决于实际列值的比较方式。

答案 1 :(得分:1)

以下是我刚才写的关于Cassandra Timestamps和冲突的帖子的链接。