在 Cassandra 中,与压缩期间的 row/cell 墓碑相比,分区墓碑本质上是否更便宜?

In Cassandra, are partition tombstones inherently less expensive compared to row/cell tombstones during compaction?

假设我的 table 被建模为我只删除整个分区而不是其中的一些行。也就是说,Cassandra永远不会创建行墓碑,只会创建分区墓碑。

现在,据我了解,Cassandra 中的压缩过程将每个 SSTable 中的分区条目带到内存中,因为它必须跨多个 SSTable 合并给定分区的所有条目。我想这个过程对于有很多已删除行(行墓碑)的分区来说成本更高,因为该过程必须遍历该分区的每个 SSTable 中的所有行,并查看哪些行被标记为要删除并合并这些行成一个单一的SSTable。这与处理分区墓碑相反,在我的例子中,这意味着要删除整个分区。

我假设压缩过程“不必太担心”处理逻辑删除分区是否正确?据我了解,在合并 SSTables 时,如果它遇到一个已标记为墓碑的分区,它将简单地移动到下一个分区,并且对于存在该分区的所有 SSTables 都会发生这种情况。最终,压缩结束删除所有这些旧的 SSTable。

我的理解对吗?与删除(大量)行相比,删除整个分区是否更便宜?

是的,您的理解是正确的,分区墓碑在压缩过程中优于行墓碑。它还有助于阅读流程。当你有分区墓碑而不是行墓碑时,阅读速度很快。可以参考博客中的the lastpickle blog和评论