Cassandra条件更新与IF EXISTS相结合

时间:2017-09-28 11:21:05

标签: cassandra cql conditional-operator

我知道在cassandra中可以使用条件更新(轻量级事务)。

update myTable 
set 
col1 = 'abc',
where id = 1 
IF priority < 2  

这允许我仅更新具有更高优先级的行。不幸的是,当该行不存在时,该语句返回false。是否可以将“IF NOT EXISTS”和“IF”与OR运算结合起来?

否则我必须对集群执行更多查询。在我的用例中,这可能是一个很大的性能问题。

2 个答案:

答案 0 :(得分:0)

我明白了 - 不幸的是,它在cassandra中是不可能的。我们必须分开插入和更新语句。

https://issues.apache.org/jira/browse/CASSANDRA-8335

insert ... if not exists
update ... if priority < 2

答案 1 :(得分:0)

您可以使用IN运算符,假设“优先级”具有一个有限(且可能很小)的允许值集,例如0和1。通过将NULL值添加到该值集,如果行不存在。

您使用的是单个查询,但请注意,对性能的影响是不可忽略的,并且与使用两个查询可能相同或更糟。

update myTable 
set 
col1 = 'abc',
where id = 1 
IF priority IN (0, 1, NULL)