DSE Cassandra 3.x删除操作

时间:2019-02-08 15:38:58

标签: cassandra datastax

我有一个表,其主键为(((A,B),C) 分区键(A,B) 群集密钥C

我的问题与从此表中删除有关。

删除或发出多个时使用IN子句是否有效 使用相等操作删除语句。

delete from table where A=xx and B IN ('a','b','c');

-或-

delete from table where A=xx and B='a';
delete from table where A=xx and B='b';
delete from table where A=xx and B='c';

像第1条delete语句中那样使用IN运算符是否有任何危害。 总共总共可能有大约20个删除项(或IN子句中有20个项目)。

在此先感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

除了一些小的例外,使用第二个选项而不是异步发出的多次删除几乎总是更好。 IN子句的协调器将承受大量负载,而后者将平均分配负载。同样,使用TokenAware负载平衡器,请求将直接转到正确的副本,并且可以很快完成。如果您要进行数百个或更多的删除操作,则可能要使用信号量或某些方法来限制进行中的删除操作的数量,以防止群集超载。

答案 1 :(得分:1)

这取决于您的应用程序需求。如果希望删除操作很快,那么您可能希望显式地运行每个操作(第二个选项)。

另一方面,如果删除是作为批处理或清除作业的一部分运行的,并且没有人真正在乎它需要多长时间,那么您可能可以避免使用IN。诀窍在于避免超时(并且正如Chris所指出的那样,在节点上施加了不适当的负载)。分解列B的值组以保持较小的值可能很有意义。虽然我听说有人用IN列出的20个项目不是最多的,但绝对比我个人使用的要多(我尝试将其保持在小于10个)。

本质上,将IN运算符与DELETE一起使用将容易受到性能问题的影响,就像在SELECT上一样,如此答案所述(此处包含在参考):

Is the IN relation in Cassandra bad for queries?