论文阅读(4):elasticBF

elasticbf:张月明 中国科技大学 ElasticBF: Fine-grained and Elastic Bloom Filter Towards Efficient Read for LSM-tree-based KV Stores

 

针对的问题:lsm的kv存储读放大问题很严重,尤其可能查了一遍,并不在lsm里。现存的bf设计都很单一,很难适应动态调整,造成高误判率以及大量内存消耗。(这部分怎么验证下)

本文思路:提出弹性bf,每个sstable建立更多bf,并且根据访问频率按需加载进内存。实现了细粒度以及动态调整。

性能比较:与leveldb相比,读带宽1.92x-2.24x。并且与现存工作兼容,可以作为加速器很好的嵌入进去。

 

自己的想法:布隆过滤器不能删除和误判并没严重影响这两点,是否可以这样来看?内存中保留一个很大的bf,判断lsm中是否有对应的key,那么这个大小应该是9.6b×keycount(10M)~!~12MB,大小可以接受,但keycount有待商榷,误判率1%。但问题在于,随着kv不断插入删除,内存中的bf都无法删除bitset,导致最后bf基本不起到任何过滤的作用。我初步的设想,就随机删除,每个bit都有一定概率翻转为0,关键是要测试,这种实现能在多大程度上过滤不存在于lsm的key查询。而且可以加一层hash?虽然不知道有什么用。

 

elasticbf主要设计:

对sstable根据访问频率划分冷热,热的sstable filter每个key分配更多bit,冷的则更少,从而同样的内存空间可以减少误判率。但如果filter已经被生成,那么bits-per-key不可动态改变。

为了达到这个目的,在构建每个sstable,建立多个filter用更小的bits-per-key,叫做filter单元。通过添加或减少filter unit来动态调整sstable的filter的bits-per-key。

 

一个datablock后面附加多个filterunit,每个filterunit都对datablock中所有key进行判断,而多个filterunit的叠加可以看做在bits-per-key的延长。每个filterunit都判断positive才会吧datablock取出来找key。

存在问题:怎么决定每个sstable对应的最合适的filterunit数量?

怎么实现动态结构,而开销不要太大?

 

动态调整的实现方式:

MQ-multiqueue。

多个LRUqueue来管理每个sstable的元信息。

qi代表有i个filterunit的sstable的队列。有一个过期时间,每个sstable最后一次get之后,长时间没有访问,那么会调整他所在队列到下一级,从而有更少的filter unit的数量。直到我们找到足够的内存空间存放新增sstable的filter。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值