当前位置:   article > 正文

bloom filter应用场景

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 的特殊情况
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/859324
推荐阅读
相关标签
  

闽ICP备14008679号