Cassandra小压缩回收行墓碑时如何检查其他SSTable中行是否存在?
Cassandra小压缩中行墓碑的回收逻辑及场景验证
一、小压缩回收行墓碑的检查机制
- 回收行墓碑时,Cassandra的检查流程分为两步:
- 首先通过布隆过滤器快速筛查分区键:如果布隆过滤器显示该分区键在其他SSTable中不存在,直接判定该行无存活数据;
- 若布隆过滤器提示分区键可能存在,则进一步读取对应SSTable的分区索引,校验完整的行键(即分区键+聚类键的组合)是否真的存在。
- 简言之:布隆过滤器做分区键级别的快速排除,有匹配嫌疑时再精准校验完整行键。
二、示例场景的结果分析
给定场景:3个SSTable(s1、s2、s3),s1存储行键p.c1(p为分区键,c1为聚类键),s2存储行键p.c2,s3存储p.c2的行墓碑。当对s2和s3触发小压缩时:
- 压缩过程中会检查
p.c2这个行键是否存在于其他SSTable(此处为s1); - s1仅包含
p.c1,没有p.c2对应的行数据,布隆过滤器会快速排除s1存在该行的可能; - 因此压缩合并后,s2的
p.c2数据与s3的墓碑会被判定为无后续存活数据,最终p.c2会被完全回收,压缩生成的新SSTable中不会保留该行的任何相关数据。
内容的提问来源于stack exchange,提问作者user20621111
相关产品推荐
相关产品推荐

