Cassandra 中的 ON CONFLICT 运算符
Posted
技术标签:
【中文标题】Cassandra 中的 ON CONFLICT 运算符【英文标题】:ON CONFLICT operator in Cassandra 【发布时间】:2021-08-21 17:47:37 【问题描述】:我在 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'
【问题讨论】:
【参考方案1】:Cassandra 中的“正常”插入和更新只是追加到内存表中(然后刷新到 SSTables 中)——在这些操作期间不会发生读取。如果时间戳较低,它只会覆盖以前的数据。
您可能可以使用lightweight transactions (LWT) 来实现您所需要的 - 如果存在冲突,它们会返回先前的值(当您使用 IF NOT EXISTS
时,行已经存在,或者值与您在 @987654323 中指定的不同@ 健康)状况)。但 LWT 对性能非常不利,因此应谨慎使用。
我会尝试以这种方式重新制定您的任务,使其适合“正常”插入/更新行为。
【讨论】:
以上是关于Cassandra 中的 ON CONFLICT 运算符的主要内容,如果未能解决你的问题,请参考以下文章
POSTGRES - 使用 ON CONFLICT DO NOTHING 防止串行增量 [重复]
如何在 flask_sqlalchemy 中使用 PostgreSQL 的“INSERT...ON CONFLICT”(UPSERT)功能?
postgresql ON CONFLICT ON CONSTRAINT 用于 2 个约束