我有一个表Foo,有4列A,B,C,D。分区键是A.聚类键是B,C,D。
我想扫描整个表格,找到D在集合中的所有行(X,Y,Z)。
然后我想删除这些行,但我不想" kill" Cassandra(由于压缩),我希望这些行被删除,中断或风险最小。
我该怎么做?
答案 0 :(得分:2)
你这里有一个大问题。实际上,如果没有实际扫描所有分区,您实际上找不到行。问题是真正的问题是C *允许您使用分区键限制查询,然后按照它们在PRIMARY KEY
表声明中出现的顺序使用您的群集键。所以,如果你的PK是这样的:
PRIMARY KEY (A, B, C, D)
然后你需要首先按A过滤,然后按B,C过滤,最后只用D过滤。
话虽如此,对于找到行的部分,如果这是你必须只运行一次,你
请注意,根据您拥有的节点数3实际上不是一个选项,二级索引不会缩放)
如果你需要多次执行这样的任务,我建议你创建另一个满足这个查询的表,比如PRIMARY KEY (D)
,你只需要扫描三个分区就可以了
关于删除行,我认为没有触发压缩就无法做到这一点,它们是C *的一部分,你必须和它们一起生活。如果你真的不能容忍墓碑创建和/或压缩,唯一的选择是不从C *集群中删除行,这通常意味着考虑一个不需要的新数据模型删除。