【发布时间】:2016-04-19 20:55:39
【问题描述】:
在 Cassandra 中,我想添加一行,如果它已经存在,则只有在现有日期早于新日期时才更新它。这样做是这样的:
INSERT INTO tbl (...) VALUES (...) IF NOT EXISTS;
如果第一个查询未应用,我将运行第二个查询:
UPDATE tbl SET ...
WHERE ...
IF date <= ?;
是否可以将两个查询合并为一个?也许使用 UPDATE 作为 upsert,同时保持 IF 条件。我们在这些语句(超时)方面存在性能问题,所以这就是我想要更改它的原因。
如果行不存在,定期更新(没有 IF)也会执行插入,但轻量级事务不存在。也许也可以“欺骗”它进行插入。
谢谢!
【问题讨论】:
-
如果行不存在,更新条件
date <= ?如何为真? -
我在想如果该行不存在,也许有一种方法可以“告诉”它进行更新;像 IF date
-
无法保证在执行第一次插入和后续更新之间没有创建行。您确实需要使用单个 LWT 语句来实现原子性。
-
我正在尝试使用单个语句,但我不知道如何实现。我只知道模拟交易的批次......但我更愿意将它减少到一个语句
标签: cassandra cassandra-2.0 upsert