ElasticBF: Hotstorage 18

分类:LSM-Tree optimization,Bloom filter

ElasticBF: Hotstorage 18

Backgroup

LSM-base 的KVstore 中都使用level compaction的policy,导致了严重的write amplification问题。并且在查询的时候,数据是分很多层级的,会带来read amplification的问题。

虽然有bloom filter存在,但是bloom filter也有如下的问题:

  • 需要在内存中,会消耗大量内存
  • false positive问题,导致io操作

Motivation

提高 bloom filter的设计:

  • 减少内存消耗
  • 减少read的io消耗
  • 提高查询performance

Main idea

主要的方法是来源于对某种现象的统计:

  • access frequecies of sstable in lower level are higher
  • unevenness of accesses even within the same level

方法:

  • elastic schema according to access freque

  • sstalbe with high access frequency

    • more powerful bloom filter
    • lower false positive -> fewer extra io
    • larger memory consumption

Main design and implementation

ElasticBF的设计

问题:

  • how to reduce the false positive?

  • bits per key

    >hot sstable,使用更多的bloom filter,cold sstable使用更少的bloom filter(实际上减少bits per key)
    
  • how to adjust the bloom filter dynamically ?

    However, the bits-per- key allocated to a filter is fixed and unable to change as long as the filter has been generated, so it is unable to dynamically adjust the allocation for different filters at running time.

如何实现呢:

  1. build multiple filters,每一个filter都分配比较小的bits-per-key,如下图所示。

Since multiple filter units within a filter group are independent, when querying for a key exists in the SSTable, the key must be nonexistent certainly as long as one filter unit gives a negative return.

image.png

实现的基础:

  1. separability 分离性

false positive rate of a filter group is exactly the same as that of a single Bloom filter which uses the same number of bits-per-key allocated to all filter units within the filter group

如何减少io访问的数学证明

在内存固定的情况下,如何减少io

设定一个目标优化函数:

image.png

函数的含义就是表示,因为false positive造成的io的影响。

所以可以在固定内存的情况下去,调整每一个sstable的false positive,调整每个sstable的false positive的方法就是调整load到内存中的filter unit。

implementation

最终的目标就是计算优化函数的值,通过选择加入一个或者多个当前sstable的filter unit,然后去除某些sstable的filter unit来达到目标函数值变小的结果。但是如何快速找到需要被移除出内存的filter unit以及个数是一个非常重要的问题。

通过上小结了解到了目标函数和约束(内存有限,也就是载入到内存的filter unit是有限的)。当一个sstable被访问的时候,增加这个sstable的访问频率(frequency),然后去检查是否可以把其他的filter unit移除,把这个sstable的filter unit加入,从而使得我们的目标优化函数的值减小。这就涉及到了:

  1. 需要去除哪一个sstable的filter unit,以及个数

  2. 需要load对应的sstable的filter unit的个数

方法:

实现multi-queue:队列i存储的是load到内存i个filter unit的sstable的item。每一个item保存了一个expireTime(表示过期时间,代表了对应的sstable是否为cold),expireTime的计算等于访问这个sstable的currentTime+lifeTime。每一个队列的存储都是按照LRU的方式。

去除方式:从MQ的最大队列m(filter unit最多的)的LRU部分开始查找 expired的sstable,然后把对应的sstable降级到下一层m-1,去除对应一个filter unit。如果没有找到expired的sstable,就接着向下层寻找,如果都没有找到,就不进行调整。

image.png

experiment

首先评估自己方案带来的overhead(写,内存,compaction),解释自己的方案这些overhead都不是太重,可以忽略。

worload description

  • 机器配置

  • 实验室平台

  • 数据量:分析内存,等占用

  • workload distribution:uniform,zipf(多种zipf分布),latest分布

performance analysis

  • read performance

    • throughput

    • io count

  • memory analysis

    • 大量memory的情况下,elasticBF性能下降,但是打的bloom filter在现实中是不允许的。

方法收获

  • 如何去计算写的throughput(通过iostat采集,然后进行积分即可)。

    • iostat 统计写入速率,然后计算平均写入速率。

    • 统计总的flush磁盘的大小,总的系统运行时间,平均计算写入磁盘的速度。

    • leveldb,rocksdb计算吞吐的方式:total_kv/total_time,total_time/total_operation,total_size/total_time

  • 如何统计io count(目前还是未知,询问论文作者)。

  • kv 数据分布的含义。

  • 如何解释实验的某种workload或者实际情况是不存在的。

疑问

目标函数:文件的frequency和对应文件的false positive(false positive可以通过载入内存的filter unit进行调整)。

约束条件:内存一定,也就是在内存中存放的filter unit的个数是一定的,在稳定的情况下,载入一个filter unit,就需要移除某个sstable的filter unit。

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