boa*_*der 5 updates cassandra nosql conditional-statements cql3
我有一个无序事件列表,我的任务是存储它们的第一次和最后一次出现。
我在 Cassandra 中有以下列族:
CREATE TABLE events (
event_name TEXT,
first_occurrence BIGINT,
last_occurrence BIGINT,
PRIMARY KEY (event_name)
);
Run Code Online (Sandbox Code Playgroud)
因此,如果我有一个名为“some_event”的事件,并且出现次数为 123456,那么我想要做的事情在 MySQL 术语中看起来像这样:
INSERT INTO events (event_name, first_occurence, last_occurence)
VALUES ('some_event', 123456, 123456)
ON DUPLICATE KEY UPDATE
first_occurrence = LEAST(first_occurrence, 12345),
last_occurrence = GREATEST(last_occurrence, 123456)
Run Code Online (Sandbox Code Playgroud)
我打算在 Cassandra 中使用轻量级事务来完成它,如下所示:
INSERT INTO events(event_name, first_occurrence, last_occurrence) VALUES ('some_event', 12345, 12345) IF NOT EXISTS;
UPDATE events SET first_occurrence = 123456 WHERE event_name='some_event' IF first_occurrence > 123456;
UPDATE events SET last_occurrence = 123456 WHERE event_name='some_event' IF last_occurrence < 123456;
Run Code Online (Sandbox Code Playgroud)
但事实证明,CQL3 不允许在轻量级事务 IF 子句中使用 < 和 > 运算符。
所以我的问题是,进行此类条件更新的模式是什么?
您运行的是哪个版本的 cassandra?通过CASSANDRA-6839在 2.1.1 中添加了对 LWT 的非相等条件的支持:
cqlsh:test> UPDATE events SET first_occurrence = 123456 WHERE event_name='some_event' IF first_occurrence > 1;
[applied]
-----------
True
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7185 次 |
| 最近记录: |