假设你的表有一个字段(列)作为主(分区)键(比如说它的名字是“id”),其余的字段列是“常规”(没有聚类) - 让我们称之为“ field1“,”field2“,field3”,“field4”等 . 系统中当前存在的逻辑可能会为同一行生成2个单独的更新命令 . 例如:
UPDATE table SET field1='value1' WHERE id='key';
UPDATE table SET field2='value2' WHERE id='key';
这些命令在仲裁中一个接一个地运行 .
很少,当您从数据库中检索行(仲裁读取)时,就好像其中一个更新没有发生 . 是否可能由于此写入模式而导致不一致,并且可以通过如下所示进行一次更新调用来规避:
UPDATE table SET field1='value1',field2='value2' WHERE id='key';
这发生在Cassandra 2.1.17上
2 回答
是的,这是完全可能的 .
如果你在制作这两个陈述时需要保留订单,你可以做两件事:
将
using timestamp
添加到您的查询并在客户端代码上明确设置 - 这将防止不一致使用批次
我要做的是改变表的定义
这样您就不必担心特定键的字段更新 .
你的疑问是,
设计的缺点是,如果你有太多的'key'数据,它会创建宽行 .
对于选择查询 -
在客户端,构建您的对象 .