GitHub user git-hulk added a comment to the discussion: CompactOnExpiredCollector的工作不符合预期
> 问题1,compact meta cf的时候,为什么deleted_keys需要计算 subkey的数量,也就是deleted_keys_ += > metadata.size + 1 ? NeedCompact函数需要依赖metadata.size的原理是什么? 这个数值主要是给 Compaction Checker 使用,Compaction Checker 会处理全部的 Column Family,所以更多会关心对应 Key 范围的 Key-Value 数量,不关心到底是哪个 Column Family(权重一致). > 问题2, CompactOnExpiredCollector::AddUserKey函数中的deleted_keys_ += metadata.size > + 1大概率是执行不到的代码;meta cf > compact过程中,对于metakey1(已经过期了),先调用MetadataFilter::Filter,把metakey1转换成entry_type > rocksdb::kEntryDelete,导致调用CompactOnExpiredCollector::AddUserKey的时候,不会调用到deleted_keys_ > += metadata.size + 1; 这个还是取决于 Compaction 调度,Metadata 不一定会比 SubKey 更加早被 Compaction,即使是 Metadata 更早回收也影响不是很大。 > 1.我理解NewCompactOnExpiredTableCollectorFactory(kMetadataColumnFamilyName, > 0.3)大概意图是解决大量tombs的问题,看起来使用rocksdb::CompactOnDeletionCollectorFactory可能是一个更好的选择。 CompactOnExpiredTableCollector 就是为了实现 CompactOnDeletionCollector 不同的 Key 计算逻辑而自己实现的(见第一个问题)。 GitHub link: https://github.com/apache/kvrocks/discussions/2898#discussioncomment-12932497 ---- This is an automatically sent email for [email protected]. To unsubscribe, please send an email to: [email protected]
