优先级与公平性混合的压缩调度机制:Slot
在数据密集型应用中,键值存储(KV-stores)是基础组件,其核心数据结构 LSM-tree 在大量 SSTables 参与单次压缩时,会导致前端写入停滞和较大的写入放大问题。为缓解这一现象,本文介绍一种更合理的压缩调度机制——Slot。
1. 问题背景
在 LSM-tree 中,单次压缩涉及过多 SSTables 会导致前端写入停滞和较大的写入放大。例如,随着输入数据量的增加,L2 压缩涉及的平均文件数从输入 5GB 时的 11 个增长到 500GB 时的 31 个。压缩写入放大(WA)的原因是单次压缩涉及过多 SSTables,这会影响系统的整体性能。
2. 现有调度机制及问题
2.1 基于分数优先级的压缩调度机制
LevelDB 采用基于分数优先级的压缩调度机制,每个级别的分数定义为 (S_n = N_n / T_n),其中 (S_n) 是 (L_n) 的分数,(N_n) 是 (L_n) 的 SSTables 运行时数量,(T_n) 是 (L_n) 上 SSTables 数量的阈值。通常会选择分数最高的级别进行压缩。
L0 的优先级始终最高,分数默认设为 10000,当 L0 的 SSTables 数量达到 4 时,立即进行压缩。这虽然能让更多内存表刷新到磁盘,保证前端写入持续进行,但也会导致大量 SSTables 滞留,造成 L0 和 L1 之间巨大的写入放大,占用大量压缩时间,抑制后续前端写入。
2.2 问题总结
这种机制导致压缩机会不平衡,低级别可能长时间无法进行压缩,文件滞留问题严重。因此,需要一种更平衡的压缩
Slot:优先级与公平性混合的压缩调度
超级会员免费看
订阅专栏 解锁全文
5

被折叠的 条评论
为什么被折叠?



