bloom filter应用场景

bloom filter 应用场景
  1. bloom filter 是空间效率极高的概率型算法和数据结构。用于判断一个元素是否存在一个集合(hashset)。

  2. 对于一个元素检测是否存在的调用,BloomFilter会告诉调用者两个结果之一:可能存在或者一定不存在。

  3. 应用场景:

    1. Google著名的分布式数据库Bigtable以及Hbase使用了布隆过滤器来查找不存在的行或列,以及减少磁盘查找的IO次数
    2. 文档存储检查系统也采用布隆过滤器来检测先前存储的数据
    3. Goole Chrome浏览器使用了布隆过滤器加速安全浏览服务
    4. 垃圾邮件地址过滤
    5. 爬虫URL地址去重
    6. 解决缓存穿透问题 (filter—>redis—>db)
  4. 优势

    1. 全量存储单不存储数据本身(数据通过k个hash算法计算出来的),对于数据保密有优势
    2. 空间高效率
    3. 插入/查询 的时间是常数O(k)
  5. 缺点

    1. 存在误算率,数据越大,误算越高
    2. 一般情况下不能从bloomfilter中删除数据,因为不能判断是否真正存在
    3. 数组长度和hash 个数确认复杂
  6. 常规数据结构,hashmap,set,bit array也可用于检测一个元素是否存在,那使用boolmfilter 有什么优势呢?

    1. hash map, 本质是指针,一个指针的大小是sizeof(void*),64bit的系统上是64个bit。如果需要用开链法解决冲突的话,又需要额外的指针,但是boolmfilter 在允许1%的误判情况下,每个元素只需要10bit的存储空间。整体来讲,节约了15%的存储空间。(sizeof(void)的含义就是获取一个指针的大小。指针的本质就是内存地址,因此指针的大小和内存空间有关。32位的机器内存空间是2G(windows系统),换算出来,凑个整数那就是32bit。因此本质上说,sizeof(void*)和编译器目标平台的内存空间有关*)

    2. set, 如果采用hashmap实现,同上; 如果采用平衡树的方式,一个节点需要一个指针存储数据位置,两个指针指向其子节点,因此开销比hashmap更多

    3. bit array, 对于判断某个数据是否存在,先对元素做hash,取模定位到具体的bit,如果该bit为1,则返回元素存在,如果该bit为0,则返回此元素不存在。可以看出,在返回元素存在的时候,也是会有误判的,如果要获得和BloomFilter相同的误判率,则需要比BloomFilter更大的存储空间

  7. 对于常规数据结构,boolmfilter缺点:

    1. hashmap, set 不存在误判
    2. bit array 只需要对元素做一次hash 计算,但是存在误判,可以看作boolm filter 的特殊情况
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值