布隆过滤器(概率型数据结构): 某样东西一定不存在或可能存在

布隆过滤器原理?
把一个 key 进行好几个 hash 运算后,得到的 hash 值,对一个 bit 数组取模放进去,用 1 表示, 比如下面示例:
布隆过滤器在爬虫的几种使用场景以及布谷鸟过滤器的优点
布隆过滤器在爬虫的几种使用场景以及布谷鸟过滤器的优点
这个 再有其他 key 到来,再用同样的 方法计算 hash 值,判断bit数组的该位置是否为 1,都为 1 表示已存在(可能误判),不为 1,表示一定不存在.

应用场景:
1. 判断一个数据是否在数据库存在, 不存在再插入.(爬虫场景的幂等性入库操作)(对已经爬取过的 URL 去重)
2. 统计一个系统的当天的登录用户数(同一个人登录多次算一次)
3. 应对缓存穿透. (为了避免恶意用户频繁请求缓存中不存在DB也不存在的值,会导致缓存失效、DB负载过大,可以使用BloomFilter把所有数据放到bit数组中,当布隆过滤器报告不存在时直接返回,当布隆过滤器报告存在时再去查缓存,缓存不存在再去查数据库。)

布隆过滤器存在的问题: 不支持反向删除,不支持计数

布隆过滤器的升级版: 布谷鸟过滤器

参考链接:
https://zhuanlan.zhihu.com/p/43263751 - 详解布隆过滤器的原理,使用场景和注意事项
https://zhuanlan.zhihu.com/p/68418134 - 布隆过滤器过时了,未来属于布谷鸟过滤器?

相关文章:

  • 2021-11-25
  • 2022-01-14
  • 2021-07-11
  • 2021-09-09
  • 2022-01-09
  • 2021-08-22
  • 2021-12-31
猜你喜欢
  • 2021-05-17
  • 2022-12-23
  • 2021-09-28
  • 2022-12-23
  • 2021-10-16
  • 2022-01-04
  • 2021-12-15
相关资源
相似解决方案