布隆过滤器

搞一搞布隆过滤器

1. 布隆过滤器

顾名思义,它是一个过滤器,发明它的人叫布隆,1970年提出的。

布隆过滤器实际上是一个数据结构,是一个很长的二进制向量和一系列随机映射函数,它是用来检索一个元素是否在这个集合中的。

在如今数据量巨大的情况下,布隆过滤器具有很好的空间效率和时间效率,一般布隆过滤器只有两个功能,insert和isExist。

2. 介绍

当插入数据时不会关心他的索引值,也就是不关心插入项和索引值的关系。但是我们想要判断数据在一个数据项存不存只能通过遍历的方法。那如果时数据量很大的时候呢?遍历就会显着捉襟见肘了,因此索引值才是判断对象是否存在的最好办法。

如同HashMap一般,利用Hash表来计算出索引值。这就意味着索引值是由插入项来决定,布隆过滤器就是通过函数来计算索引值,进而判断是否存在,这样速度非常快。

根据布隆过滤器可以知道,元素可能在集合中或者不在集合中。因为布隆过滤器是通过多个函数计算来判断对应bit为上是否为存在位,如果都是存在位,则可能存在,反则有一个没有落在存在位,则肯定不存在。

3. 为什么说可能存在

布隆过滤器的误差率和哈希的次数、已添加元素的数量、布隆过滤器的长度有关。

  • 下面是布隆过滤器的误差值计算公式

在这里插入图片描述

  • 布隆过滤器的长度m可以根据给定的误判率和期望添加的元素个数n计算出来

在这里插入图片描述

n -> 已添加元素数量

k -> hash次数

m -> 布隆过滤器的长度

4. 布隆过滤器优缺点

1. 优点

  • 它的优点是空间效率和查询时间都比一般的算法要好的多
  • 布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势

2. 缺点

  • 上面已经计算过,他有一定的误差率
  • 布隆过滤器仅支持insert和isExist操作,而没有delete操作

5. 布隆过滤器应用

  1. python爬虫爬网页时,确定哪些网页已经爬过,进行去重
  2. 黑名单业务处理,判断是否处于黑名单
  3. 使用布隆过滤器防止恶意URL
  4. 通过布隆过滤器减少不必要的查找
  5. 解决缓存穿透
  6. 查询加速
  7. 判断集合重复元素
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值