带有或不带有 IF EXISTS 的 Cassandra DELETE

nim*_*rex 3 database cassandra

我有一种情况,我不知道一组表中是否存在数据。因此,截至目前,我正在对所有这些表发出 DELETE。因此,单个 API 调用会在 Cassandra 中产生大约 30-50 个 DELETE。最近,大多数 DELETE 都是针对不存在的数据发出的。Cassandra 的性能是否仍然会因为对不存在的数据进行数百万次 DELETE 操作而受到负面影响?在删除我不确定它是否存在的数据时,我应该使用“IF EXISTS”吗?

Mar*_*jek 5

最好只发出不带 的定期删除,IF EXISTS因为在这种情况下,协调器开始使用串行一致性和 paxos 协议,这需要更长的时间并使其他节点批量运行等。如果不存在是一个轻量级事务,它们应该与 1 一起使用% 工作量,而不是你经常做的事情。

您仍然不希望周围有很多墓碑(删除的作用),因此这取决于您对数据建模的方式以及删除的方式。如果您提供一些架构、插入和删除语句,我将非常乐意提供有关此方面的见解;)