Cassandra:如何在轻量级事务中执行upsert

时间:2016-01-14 13:42:02

标签: cassandra cassandra-2.0 upsert

在Cassandra中,我想添加一行,如果它已经存在,只有在现有日期早于新日期时才更新它。这就是它的完成方式:

INSERT INTO tbl (...) VALUES (...) IF NOT EXISTS;

如果未应用第一个查询,我将运行第二个查询:

UPDATE tbl SET ...
WHERE ...
IF date <= ?;

是否可以将两个查询合并为一个?也许使用UPDATE作为upsert,同时保持IF条件。我们在这些陈述中遇到了性能问题(超时),所以这就是我想要改变它的原因。

如果行不存在,定期更新(没有IF)也会执行插入,但轻量级事务不会。也许它可以&#34;技巧&#34;它也插入插入。

谢谢!

1 个答案:

答案 0 :(得分:4)

LWT基本上是在执行数据突变之前进行检查。仅对具有以下条件的INSERT和UPDATE启用条件执行: 1.如果没有插入INSERT 2. IF列='值'为UPDATE

您不能将这些条件与不同的操作混合使用。如果有一个选项可以说UPDATE ... IF列&lt; ='value',则必须点击所有节点并向所有节点提出交易,这将对性能产生巨大影响。即使在等于条件的情况下,LWT也只通过命中副本节点来影响性能。