更新多个表时,Cassandra原子批次中的写入写入冲突?

时间:2015-12-16 23:58:30

标签: cassandra cassandra-2.0

关于原子批次的文件说:

  

例如,没有批次隔离。客户端能够从批处理中读取第一个更新的行,而其他行仍在服务器上更新。

但是,当我作为批处理的一部分更新两个不同表中的列时,会出现写 - 写冲突情况吗?

参考:https://en.wikipedia.org/wiki/Write%E2%80%93write_conflict

例如:

批处理1:Table1.column = x,Table2.column = x

批次2:Table1.column = y,Table2.column = y

结果(写 - 写冲突情况):Table1.column = x,Table2.column = y

1 个答案:

答案 0 :(得分:0)

您引用的引用回答了您的问题:

  

例如,没有批次隔离。客户端能够从批处理中读取第一个更新的行,而其他行仍在服务器上更新。

但是,一旦完全应用批次,将以正常的时间戳分辨率为准。值为X的两个单元格都有一个时间戳。具有值Y的两个单元格将具有另一个时间戳。获胜者将是X或Y,但获胜者将是相同的,因为时间戳将是相同的:

  

BATCH语句将多个数据修改语言(DML)语句(INSERT,UPDATE,DELETE)组合到一个逻辑操作中,并为批处理中的语句写入的所有列设置客户端提供的时间戳

在这种情况下,您是否看到X / Y或Y / X答案取决于读数的一致性级别以及批次完全应用所需的时间。