flamedb:a key-value store with grouped level structure and heterogeneous bloom filter
2018 WEI TAO ZHANG 中国科技大学
本文主要工作:
- 提出了grouped level structure数据结构减少写放大,
- group之间的数据无序,为了弥补读性能,提出了heterogeneous bloomfilter。
- 实现了flamedb原型,但没找到开源代码
grouped level structure
- 设计:component ci被分成m个group,
m=max(|ci+1|)/max(|ci|)
.并且|ci|代表ci包括的kv对数量。 - 基本概念就像上面图片里的原文讲的,在ci向ci+1层compact过程中,因为ci所有kv对数量,正好是ci+1层的一个group的kv对数量。将ci层所有kv对排序,合并成ci+1的一个group。所以ci+1层group内部有序,但group间是无序的。
- 这样必然增加读复杂性,这是通过本文提出的异构布隆过滤器解决的,简单讲就是,因为上层component访问频率更高,所以给他们分配更大的bits-per-key。可以减少误判率,从而提高读性能。
性能分析
本文有两段关于写放大和读性能的数学分析,单独摘出来看看
上面是讲,LSMtree写放大主要包括两部分,ci中的kv写到ci这种不会下沉的compact和所有kv都要最后下沉到ct的compact。
而flamedb对此做出的优化就是,分了group之后,因为ci下沉到ci+1时,不需要把ci+1的group都读出来再整体排序,所以减少了第一部分的写放大,即最后的计算公式,只有第二部分,所有kv下沉到ct的开销。
这部分是LSMtree的读放大分析,i代表key在不同的层,pi为kv在不同层的概率,文中是按照size占整体权重来计算的。f为bf的false positive概率。
这个结果是GLS的读放大公式,gk代表第k层的group数量,在0-m之间。同样,gij的概率大小也是kv 数量占整体得比重。
在如上的测试参数下,LSM和GLS的读放大对比结果如下: