ElasticBF: Hotstorage 18

2019-03-21  本文已影响0人  qingshuiting

分类:LSM-Tree optimization,Bloom filter

ElasticBF: Hotstorage 18

Backgroup

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

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

Motivation

提高 bloom filter的设计:

Main idea

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

方法:

Main design and implementation

ElasticBF的设计

问题:

如何实现呢:

  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

performance analysis

方法收获

疑问

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

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

上一篇 下一篇

猜你喜欢

热点阅读