布隆过滤器

布隆过滤器(Bloom Filter)

定义: 一种比较巧妙的概率型数据结构,由一个很长的二进制向量(bit数组)一系列哈希映射函数组成;
根据查询结果可以用来告诉你,某样东西一定不存在或者可能存在,这句话是该算法的核心;
作用: 布隆过滤器可以用于检索一个元素是否在一个集合中;
优点: 占用空间更少,高效地插入和查询;
缺点: 其返回的结果是概率性的,存在一定的误差,数据只能插入不能删除。

应用场景:

  1. hbase中用于快速查找?????
  2. 网页URL的去重;
  3. 垃圾邮件的判别;
  4. 集合重复元素的判别;
  5. 。。。。。。。。。

布隆过滤器数据结构

以hadoop中的bloom过滤器为例:
  • 以下实例表示:字节向量的长度是200000000,3个哈希映射函数,采用类型为1的哈希算法;
 //参数一(vector):字节向量的长度; 参数二(nbHash):哈希算法的长度;  参数三(hashType):哈希算法的类型
    val bloomFilter = new BloomFilter(200000000, 3, 1)
  1. 布隆过滤器在还没有任何元素映射的时候,字节向量(字节数组)中的每一个位置都为0;
  2. 若有一个元素在映射到该布隆过滤器中时,会使用3个不同的哈希函数生成3个hash值;字节向量(字节数组)中这三个hash值对应的位置将会被标记为1;
  3. 若一个元素 “小黑” 经过3种哈希函数生成3个hash值所对应字节向量的位置,只要有一个位置上为0,则可以确定该元素不存在
  4. 若一个 “小黄” 经过3种哈希函数生成3个hash值所对应字节向量的位置全为1,则只能说明该元素可能存在。
  • 随着增加的元素越来越多,被置为 1 的 bit 位也会越来越多,这样某个元素 “小蓝” 即使没有被存储过,但是万一哈希函数返回的三个 bit 位都被其他元素置为了 1 ,那么程序还是会判断 “小蓝” 这个元素存在,这就产生了误差。

应用实战:
利用布隆过滤器减少磁盘 IO 或者网络请求,因为一旦一个值必定不存在的话,我们可以不用进行后续昂贵的查询请求。(hbase中的应用)

布隆过滤器误判率计算公式

在这里插入图片描述

  • 式中:m:字节向量的长度; n: 预期映射的元素的长度; k:哈希函数的个数;

降低误判率的方法:

  1. 哈希函数的过多使布隆过滤器 bit 位置位 1 的速度越快,且布隆过滤器的效率越低;
  2. 哈希函数太少的话,误报率会变高。一般为3~5 为宜;
  3. 布隆过滤器的长度会直接影响误判率,布隆过滤器越长其误判率越低;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值