我知道在cassandra中可以使用条件更新(轻量级事务)。
update myTable
set
col1 = 'abc',
where id = 1
IF priority < 2
这允许我仅更新具有更高优先级的行。不幸的是,当该行不存在时,该语句返回false。是否可以将“IF NOT EXISTS”和“IF”与OR运算结合起来?
否则我必须对集群执行更多查询。在我的用例中,这可能是一个很大的性能问题。
答案 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)