Cassandra 中的 ON CONFLICT 运算符

ON CONFLICT operator in Cassandra

我在 Cassandra 中有一个包含 2 列的 table:id 和 date_proc 并计划插入大量插入内容。是否可以在 Postgres 中使用类似 ON CONFLICT 的东西来获取先前的插入值?

你能告诉我另一种避免向 Cassandra 发出 2 个请求的方法吗(select 和插入)?也许 DataStax 中有一些解决方案?

ddl:

create table test.date_dict (
    id text,
    date_proc text,
    PRIMARY KEY (id));

插入示例:

INSERT INTO test.date_dict (id, date_proc) VALUES ('1', '2020-01-01'); // return '2020-01-01'
INSERT INTO test.date_dict (id, date_proc) VALUES ('1', '2020-01-05'); // return '2020-01-01'

Cassandra 中的“正常”插入和更新只是追加到内存表中(然后刷新到 SSTables 中)——在这些操作期间不会发生读取。如果它具有较低的时间戳,它只会覆盖以前的数据。

您可能可以使用 lightweight transactions (LWT) 来实现您的需要 - 如果存在冲突,它们 return 以前的值(当您使用 IF NOT EXISTS 时行已经存在,或者值不同于您在 IF 条件中指定的值)。但是LWTs对性能很不利,所以要谨慎使用。

我会尝试以这种方式重新制定您的任务,使其适合“正常”inserts/updates 行为。