问题描述
比方说,我的表经过建模,因此我只删除整个分区,而不是其中的某些行。也就是说,Cassandra将永远不会创建行逻辑删除,而只会创建分区逻辑删除。
现在,据我所知,Cassandra中的压缩过程将每个SSTables中的分区条目带入内存,因为它必须合并多个SSTables中给定分区的所有条目。我可以想象这个过程对于具有很多已删除行(行逻辑删除)的分区来说会比较昂贵,因为该进程必须遍历该分区的每个SSTable的所有行,并查看哪些标记为要删除并合并行到一个SSTable中。在本例中,这与处理分区逻辑删除相反,这意味着整个分区都将被删除。
我是否正确假设压缩过程“不必担心”处理逻辑删除的分区?据我了解,合并SSTables时,如果遇到一个已被标记为逻辑删除的分区,它将简单地移至下一个分区,并且该分区所在的所有SSTables都会发生这种情况。最终,压缩结束删除所有这些旧的SSTable。
我的理解正确吗?与删除(大量)行相比,删除整个分区是否会更便宜?
解决方法
是的,您的理解是正确的,对于压缩过程,分区逻辑删除比行逻辑删除更好。它还有助于读取流程。当您使用分区逻辑删除而不是行逻辑删除时,读取速度很快。您可以在博客中引用the lastpickle blog和评论。