首页 > 解决方案 > Cassandra 中的 ON CONFLICT 运算符

问题描述

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

你能告诉我另一种方法来避免对 Cassandra 的 2 个请求(选择和插入)吗?也许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'

标签: cassandradatastax

解决方案


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

潜在地,您可以使用轻量级事务(LWT) 来实现您所需要的 - 如果存在冲突,它们会返回先前的值(当您使用时,行已经存在IF NOT EXISTS,或者值与您在IF条件中指定的不同)。但 LWT 对性能非常不利,因此应谨慎使用。

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


推荐阅读