从非常大的Cassandra表中删除大量行

时间:2016-11-02 21:35:16

标签: cassandra

我有一个表Foo,有4列A,B,C,D。分区键是A.聚类键是B,C,D。

我想扫描整个表格,找到D在集合中的所有行(X,Y,Z)。

然后我想删除这些行,但我不想" kill" Cassandra(由于压缩),我希望这些行被删除,中断或风险最小。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

你这里有一个大问题。实际上,如果没有实际扫描所有分区,您实际上找不到行。问题是真正的问题是C *允许您使用分区键限制查询,然后按照它们在PRIMARY KEY表声明中出现的顺序使用您的群集键。所以,如果你的PK是这样的:

PRIMARY KEY (A, B, C, D)

然后你需要首先按A过滤,然后按B,C过滤,最后只用D过滤。

话虽如此,对于找到行的部分,如果这是你必须只运行一次,你

  1. 可以扫描您的所有表格,并在您的App逻辑中对D进行比较。
  2. 如果您知道A的值,您可以并行查询每个分区,然后在应用程序中比较D
  3. 您可以附加二级索引并尝试从那里开始使用速度。
  4. 请注意,根据您拥有的节点数3实际上不是一个选项,二级索引不会缩放)

    如果你需要多次执行这样的任务,我建议你创建另一个满足这个查询的表,比如PRIMARY KEY (D),你只需要扫描三个分区就可以了

    关于删除行,我认为没有触发压缩就无法做到这一点,它们是C *的一部分,你必须和它们一起生活。如果你真的不能容忍墓碑创建和/或压缩,唯一的选择是从C *集群中删除行,这通常意味着考虑一个不需要的新数据模型删除。

相关问题