dse cassandra 3.x删除操作

2jcobegt  于 2021-06-10  发布在  Cassandra
关注(0)|答案(2)|浏览(364)

我有一个主键为((a,b),c)分区键(a,b)集群键c的表
我的问题是从这个表中删除。
删除时使用in子句或使用相等操作发出多个delete语句是否有效。

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';

在第一条delete语句中使用in运算符是否有任何危害。总共可能有大约20次删除(或in子句中的20项)。
谢谢你的帮助!

new9mtju

new9mtju1#

除了一些小的例外,使用第二个选项来代替异步发出的多个删除几乎总是更好的。in子句的协调者将承担大量的负载,而后者将平均分配负载。此外,使用令牌感知负载平衡器,请求将直接转到正确的副本,并且可以很快完成。如果您要执行数百次或更多的删除,您可能需要使用信号量或其他方法来限制正在执行的删除的数量,以防止集群过载。

bmvo0sr5

bmvo0sr52#

这取决于应用程序的需要。如果希望删除操作速度快,那么您可能希望显式地运行每个操作(第二个选项)。
另一方面,如果delete作为批处理或清理作业的一部分运行,并且没有人真正关心它需要多长时间,那么使用delete可能会得逞 IN . 诀窍在于防止它超时(正如chris所指出的,在节点上施加不适当的负载)。将列的值分组可能是有意义的 B ,以保持这些小。而20个列表项 IN 这不是我听过的最多有人尝试过的,它肯定比我个人使用的要多(我会尽量把它保持在10以下)。
基本上,使用 IN 具有 DELETE 它将很容易受到性能问题的影响,就像在 SELECT ,如本答复所述(包括在此处以供参考):
Cassandra的关系不适合询问吗?

相关问题