在Cassandra中,我想添加一行,如果它已经存在,只有在现有日期早于新日期时才更新它。这就是它的完成方式:
INSERT INTO tbl (...) VALUES (...) IF NOT EXISTS;
如果未应用第一个查询,我将运行第二个查询:
UPDATE tbl SET ...
WHERE ...
IF date <= ?;
是否可以将两个查询合并为一个?也许使用UPDATE作为upsert,同时保持IF条件。我们在这些陈述中遇到了性能问题(超时),所以这就是我想要改变它的原因。
如果行不存在,定期更新(没有IF)也会执行插入,但轻量级事务不会。也许它可以&#34;技巧&#34;它也插入插入。
谢谢!
答案 0 :(得分:4)
LWT基本上是在执行数据突变之前进行检查。仅对具有以下条件的INSERT和UPDATE启用条件执行: 1.如果没有插入INSERT 2. IF列='值'为UPDATE
您不能将这些条件与不同的操作混合使用。如果有一个选项可以说UPDATE ... IF列&lt; ='value',则必须点击所有节点并向所有节点提出交易,这将对性能产生巨大影响。即使在等于条件的情况下,LWT也只通过命中副本节点来影响性能。