我有一个主键为((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项)。
谢谢你的帮助!
2条答案
按热度按时间new9mtju1#
除了一些小的例外,使用第二个选项来代替异步发出的多个删除几乎总是更好的。in子句的协调者将承担大量的负载,而后者将平均分配负载。此外,使用令牌感知负载平衡器,请求将直接转到正确的副本,并且可以很快完成。如果您要执行数百次或更多的删除,您可能需要使用信号量或其他方法来限制正在执行的删除的数量,以防止集群过载。
bmvo0sr52#
这取决于应用程序的需要。如果希望删除操作速度快,那么您可能希望显式地运行每个操作(第二个选项)。
另一方面,如果delete作为批处理或清理作业的一部分运行,并且没有人真正关心它需要多长时间,那么使用delete可能会得逞
IN
. 诀窍在于防止它超时(正如chris所指出的,在节点上施加不适当的负载)。将列的值分组可能是有意义的B
,以保持这些小。而20个列表项IN
这不是我听过的最多有人尝试过的,它肯定比我个人使用的要多(我会尽量把它保持在10以下)。基本上,使用
IN
具有DELETE
它将很容易受到性能问题的影响,就像在SELECT
,如本答复所述(包括在此处以供参考):Cassandra的关系不适合询问吗?