CrimsonDB系列(一) Bloom Filter优化

本文Monkey: Optimal Navigable Key-Value Store
哈佛大学DASLab自研的CrimsonDB存储系列文章第一篇,完整的系列文章列表见http://daslab.seas.harvard.edu/projects/crimsondb-demo/#publications

本文的核心是通过对LSM tree进行建模,根据建模分析得出了LSM的一些优化方向,并提出了基于动态调整bloom filter的方式来优化查询性能的方法。

先说结论: 通过在较低层级设置更多的bit降低FPR,不同层级间FPR与层级数i层指数正比可以提高查询效率。通俗点就是由于level越大包含的entry越多,只有分配的bit越少才能减少总的 M(buffer)的使用。下面根据数学模型进行详细的结合分析。

LSM 建模

在LSM 中,内存包含了M(buffer) M(filter) M(point), M(buffer)用户缓存磁盘数据以加速对磁盘数据的访问,M(filter)通过bloom filter进行过滤,可以减少不存在的key对磁盘的访问,M(point) 则存储数据区间到page的指针映射。

对于LSM ,目前主流的存储引擎compaction实现主要包含Tiered和leveled,两种compaction策略的区别如图,本文不做详细展开说明。两种策略的开销分析如下


两种策略其实再试读开销与写开销之间进行平衡,当T为1的时候,Tiering退化为append log,此时写入开销最小,当 T= N*E/M(buffer)的时候 Leveling退化为sorted array,此时查询开销最小。

优化分析

根据上面的建模,以tiered的查询开销为例,因为N E 是固定的,不考虑M(point)的情况下 M(buffer) + M(filter) = M. M 大小也是固定的. 因此可以根据数学模型得出几个优化的方向:

  • 调整T的大小以及compact policy的策略
  • 调整M(buffer) 以及M(filter) 的分配
  • 在 M(filter) 固定的情况下如何调整不同 bloomfilter 的分配来建下 False Positive Ratio (FPR)

为了方便表述,定义了如下的标识符进行指代:

4.png

降低查询开销

最坏情况的查询开销取决于FPR,对于leveled,最坏情况下每一层都是出现了FPR,那么最差的查询开销为每一层的累加,由于tiered每层最多可能包含 T-1 个重叠的run,因此可以得出两种policy的最差开销为



根据公式3 和 4 问题可以转化为在R 一定的情况下,如何使 M(filter) 最少。数学证明部分此处不做详细说明,如果感兴趣可以去看论文附录的证明环节。直接看论文中的结论,根据公式5 和 6 可以得出,在R 一定的情况下,以指数方式递增提升FPR可以实现M(filter) 最小。这里和传统的LSM 最大的不同是传统的LSM 每一层都是同样的FPR,传统的设计会导致最底层的level占用大量的内存。通过降低 M(filter)的大小, 倒换个角度,在M(filter) 固定的情况下,monkey的方式会使得 R 最小。

查询开销指标化

传统的调优很多时候都是基于经验测试值,对于不同的负载这会导致调优变得异常困难。通过将开销进行数字化,可以快速根据具体的负载调整不同的参数来使得负载开销最小化. 对于查询到不存在的数据的场景,极端开销根据 公式4 5 6可以得出公式 7 8。 对于最差在最底层查询的到场景开销则为:V = R - P(L) + 1, 因此该数据肯定在最后一层被读取到,因此只需要加上1即可。R 取决于 R(filter) 于 R(unfiltered) 之和,这两个值则受 M(filter) 影响。当T =2时,M(threshold)的值为1.44 ,而传统的LSM 实现 bit/entry 为10,因此传统的实现查询复杂度为 R(filter). 此外还可以看到 R 与层数无关,也与entry大大小无关,只与entry num有关。

9.png

另外论文里来对更新开销以及range查询开销进行了建模,详细模型分析可以去原文。

merge policy与 T 的调节

前面提到不同的 T 以及 merge policy 会影响查询以及更新的性能开销,如何选择合适的T以及merge policy 以达到最优解,论文的附录部分给出了详细的迭代计算过程。r v q w 分别表示不同的操作类型在总体负载中的占比,基于此可以根据负载信息动态计算出合适的 T 以及 merge policy。


动态调整filter

论文的正文部分,也就是降低查询开销的部分,基于entry size固定的前提进行bit/entry 的计算, 但是实际负载下entry size大多数不一样的,在论文的附录部分,给出了对于entry size 动态变化的情况下如何动态调整filter 的计算策略。为了实现这一方法,monkey在每一个run中额外保存了 metadata信息记录每个run的entry num。结论基本以上述一直,让level小的run拥有更多的bit能有效降低R

总结

本文通过数学推导计算得出了bloom filter的优化算法,通过调整bloom filter即达到了性能 吞吐的提升。通过数学工具进行分析的思路方法论非常的具有参考意义,是时候好好复习下数学了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容