-
hi master, 代码里为meta cf和subkey cf配置了:新生成的sst文件中,删除/过期key比率达到30%时候,继续compact 当前sst文件的行为。但是存在以下2个问题
烦请帮忙看一下,上面分析是否正确。 |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 1 reply
-
对于 SubKey Column Family 的回收是在 Compaction Checker 里面实现,里面的逻辑会依赖 Collector 生成的数据。NeedCompact 仅针对 Metadata Column Family 这个逻辑没有问题
Collector 只会在 Table Builder 阶段调用,Metadata Key 过期不需要去更新 Collector 的数据。也就是这些过期数据一定程度上必然不是实时的,所以依赖于 Compaction Checker 在时间上强制去做 Compaction 来更新这些数据。 我可能没有完全理解上面想表达的优化点是什么?如果有更好的策略也欢迎提出来。 |
Beta Was this translation helpful? Give feedback.
-
感谢大佬回复。
这个逻辑是理解的。只是看到代码NewCompactOnExpiredTableCollectorFactory(kMetadataColumnFamilyName, 0.3),看着和实现不太符合,因为实现中,meta cf统计了 subkey的数量。对应我提的问题1.
这个逻辑也是理解的。我的疑问是,对于meta cf,CompactOnExpiredCollector::AddUserKey函数中,deleted_keys_ += metadata.size + 1;不会被执行吧。 抱歉,我没有描述清楚,重新描述一下我的问题。 问题1,compact meta cf的时候,为什么deleted_keys需要计算 subkey的数量,也就是deleted_keys_ += metadata.size + 1 ? NeedCompact函数需要依赖metadata.size的原理是什么? 问题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; 小优化, 谢谢 |
Beta Was this translation helpful? Give feedback.
这个数值主要是给 Compaction Checker 使用,Compaction Checker 会处理全部的 Column Family,所以更多会关心对应 Key 范围的 Key-Value 数量,不关心到底是哪个 Column Family(权重一致).
这个还是取决于 Compaction 调度,Metadata 不一定会比 SubKey 更加早被 Compaction,即使是 Metadata 更早回收也影响不是很大。