知识卡片
CollectionIndex用哈希分层子目录应对海量小文件
内容
一个 PG 对应本地文件系统里的一个目录(collection),PG 内所有对象都是这个目录下的文件;但绝大多数本地文件系统单目录文件数一多,查找性能会急剧下降。HashIndex 的解法是按对象哈希值从低位到高位逐层展开成多级子目录(如 root/DIR_2/DIR_D/...),每层子目录里的对象数一旦超过阈值(由 merge_threshold 和 split_multiplier 配置)就自动分裂出更深一层,从而把本该退化成 O(n) 目录扫描的查找,重新摊薄成有限层级的哈希路径查找。这是把”数量太多导致的性能退化”转化为”用可控深度的树形结构分摊数量”的通用应对模式,本质与 [[数据分布算法的两种流派|CRUSH 靠层级结构而非集中索引应对大规模]]是同一类思路的不同应用场景。
参考来源
《Ceph源码分析》第7章《本地对象存储》