首页 > 解决方案 > Cassandra 原子性与删除属于不同表的分区键

问题描述

我有一个用例,我需要从 cassandra 的三个表中执行删除。所有表示例的分区键都相同:-

db_name/table1/1111 db_name/table2/1111 db_name/table3/1111

我将使用 Put/batch 哪个操作来保持原子性。我希望一次删除所有键或不删除任何键

我需要删除大量这样的键..我的意思是说我想从所有三个表中删除 10k 个这样的键。会是这样的

循环遍历所有键..然后一次从三个表中删除键

标签: cassandrabatch-processingdelete-rowatomicdata-consistency

解决方案


您需要使用 CQL 批处理对非规范化表的更新进行分组,以便将它们作为原子操作执行。

在 cqlsh 中,批量删除看起来像:

BEGIN BATCH
   DELETE FROM table1 WHERE pk = 1111;
   DELETE FROM table2 WHERE pk = 1111;
   DELETE FROM table3 WHERE pk = 1111;
APPLY BATCH;

对于要删除的每个分区键,您都需要一个批处理语句。重要的是不要将不相关的分区组合在一个批次中,因为 CQL 批次不是像 RDBMS 中那样的优化。

我已在本文中更详细地解释了这一点 -如何使非规范化表中的数据保持同步。干杯!


推荐阅读