bloom filter

bloom filter 也称"布隆过滤器"是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,简单的逻辑就是将一个数据值映射到一个二进制L长度的K个位上,有点类似于bit-map的情况,它可以以较低的空间占用去判断某一个元素是不是在某个集合中,对于元素不在集合中的情况的判断率是100%的,但是对于元素在某个集合的情况的判断率是有误差的,误差可以通过调节K和L做调整,可以应用在网络爬虫对已爬过的网页过滤、垃圾电子邮件过滤等方面,Hbase 中应用了Bloom Filter (详情可参考[HBASE-1200](https://issues.apache.org/jira/browse/HBASE-1200))去检查hstore,文章后面会做详细说明。首先用一个实例去讲解一下Bloom Filter的原理:目前有 1000个元素 {x0,x1,x2,x3.....} 每个元素10byte的话,总共需要张勇10000byte也就是80000bit,目前有一个L长度的位数组全部置为0


有K个不同的hash函数 hash1(x) ...hashk(x),或者一个hash函数但是通过参数可以去控制

在BloomFilter中,函数的选择至关重要直接影响性能和准确率,关于hash函数应该是独立的第三方并值均匀分布的

,而且要有良好的速度性能(像sha1这种加密函数,虽然应用比较广泛但是不是好的选择),满足以上条件的hash函数比如 murmur hash (在Cassandra 和 Hbase都有应用)、fnv系列hash 还有Jenkins Hashes, 对于想深入了解hash性能的可参考这个地址

对某一个值X经过几个hash之后所产生的值根据位的位置有0置换为1 比如K 为3的话,在hash后对应 1、3 、5位,另一个值Y经过hash后生成2,4,6,不同的值hash后可能会产生相同的值所以同时也会有一定误差率,此处只是为了方便颜色区分


通过上面重复操作,最后会形成一个含有0、1的L长度的位数组,当判断一个元素X是不是在集合中时,只需要把X经过hash后看对应的位是不是1即可,如果全是1的话,则可能在集合中,但是不全是1的话则表示肯定不在集合中,

例如一个值Z经过hash后 在 2、4、5上都是1,但实际情况是Z并不真正的在集合中,但是如果hash后是 2、4、7则表示Z肯定不在集合中。

通过上面的说明你会发现位数组的长度、元素个数以及hash个数是对准确率存在影响的,如果数组长度用m表示,插入个数用n表示,函数个数用k表示,则误算率可通过如下公式计算:

 \sum_{t} \Pr(q = t) (1 - t)^k \approx (1 - E[q])^k = \left(1-\left[1-\frac{1}{m}\right]^{kn}\right)^k \approx \left( 1-e^{-kn/m} \right)^k

具体公式推导过程可参考wiki上面

之前我们计算过本来数据的大小,通过上面的公式我们可以根据相应的准确率等信息推导出采用布隆过滤器形式的占用大小,通过计算我们会发现空间占用会比原先小的多。

下面说一下Bloom Filter 在hbase中的应用

在hbase中启用Bloom Filter 可以以消耗内存为代价减少磁盘IO,增加读的效率,布隆过滤器针对每个CF进行开启,对于设置布隆过滤器有三个设置,默认是NONE(基于0.94),还可以是ROW和ROWCOL,如果是ROW则每次将新添加的row进行hash后添加,如果是ROWCOL则格式为row+cf+column。查询效率是指get ,在get的时候会查找hfile中metablock,其中包含了布隆过滤器的结构,另外hbase默认的hash 是murmur ,关于bloom的大多设置以 io.storefile.bloom开头,可以通过io.storefile.bloom.error.rate设置容错率,如有错误 还请指正!





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值