论文地址:https://www.cs.utexas.edu/~vijay/papers/sosp17-pebblesdb.pdf
背景
主要解决LSM Tree的level compaction写放大:预期解决第N层到第N+1层compaction过程中需要参与compaction的文件过多的问题;
主要思想
借鉴skipList的思想,引入guard概念,将level compaction的每层切割为不同的guard分而治之;
guard特点:
- 弱化全局有序的约束;
- 每层分段,每层的段之间不重叠;
- 每层的guard之间要求保序,但是guard内部可以无序;
- guard如果在上一层存在,那么下面所有层都存在;
- 层数越深,guard越多;
- L0没有guard划分;
compaction流程的变化
- Level compaction:
- 分层组织结构导致写放大的原因是Li在下推数据的时候跟整个Li+1是重叠的,所以导致所有Li和Li+1的数据都要重写,这显然增加了写放大。
- FLSM:
- 使用guard分而治之,当L-n层数据需要下推的时候,不再是整个L-n一起下推,而是以guard粒度进行,那些基本没有数据变化的guard就不用下推了;
- compaction 第N层文件,直接放入N+1层,而不是和N+1层的文件合并;
FLSM优点:因为每次需要重写的文件少了,所以写放大减小了;
FLSM缺点:因为文件变多,读放大严重了;
参考资料
https://www.cs.utexas.edu/~vijay/papers/sosp17-pebblesdb.pdf
https://zhuanlan.zhihu.com/p/46069535
https://zhuanlan.zhihu.com/p/32225460
https://zhuanlan.zhihu.com/p/368061877
https://www.cs.utexas.edu/~vijay/papers/pebblesdb-sosp17-slides.pdf