cassandra - 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'
解决方案
Cassandra 中的“正常”插入和更新只是附加到内存表中(然后刷新到 SSTables 中)——在这些操作期间不会发生读取。如果时间戳较低,它只会覆盖以前的数据。
潜在地,您可以使用轻量级事务(LWT) 来实现您所需要的 - 如果存在冲突,它们会返回先前的值(当您使用时,行已经存在IF NOT EXISTS
,或者值与您在IF
条件中指定的不同)。但 LWT 对性能非常不利,因此应谨慎使用。
我会尝试以这种方式重新制定您的任务,使其适合“正常”插入/更新行为。
推荐阅读
- swift - 字典不添加从 Firestore 检索到的值
- arrays - 在两个单独的反应子组件中使用完全相同的数据。一个组件允许操作数据,另一个组件不允许
- excel - 动态工作簿名称更改和单元格引用 - 可能吗?
- swift - 当视图被 tableview 回收时,如何保持 Lottie 动画运行?
- c++ - 如何使用 ftp 测试模块带宽
- javascript - 拆分字符串,得到后半部分
- sql - 在日志传送中恢复辅助服务器
- python - 在 hadoop 集群中运行 mrjob python 脚本时出错
- python - 多处理卡住显示 No such file or directory '/dev/null'
- linux - 计算大目录中的文件