一种优先级与公平性混合的压缩调度机制
1 背景与问题提出
在基于 LSM - tree 的键值存储(KV - Stores)中,压缩操作是一个关键环节。当输入数据量增大时,一次压缩操作涉及的平均文件数量会显著增加。例如,L2 层压缩涉及的平均文件数会从输入数据量为 5 GB 时的 11 个增长到 500 GB 时的 31 个。压缩写放大(WA)的原因是一次压缩中涉及过多的 SSTables,这会导致系统整体写放大,影响系统性能。
传统的基于分数中心优先级的压缩调度机制存在问题。以 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 之间巨大的写放大,占用大量压缩时间,抑制后续前端写入。这种压缩机会的不平衡促使我们提出一种更平衡的压缩优先级调度机制——Slot。
2 Slot 机制设计
2.1 设计思路
Slot 的主要思想是将分数中心优先级的压缩调度与时间片中心公平性的压缩调度相结合,以缓解文件滞留问题,降低基于 LSM - tree 的键值存储的写放大。它避免一次压缩涉及过多文件,减少写入暂停或停止的频率。
超级会员免费看
订阅专栏 解锁全文
7

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



