布隆过滤器

布隆过滤器(Bloom Filter)是 1970 年由布隆提出的,它实质上是一个很长的二进制向量和一系列随机映射函数 (Hash 函数)。

作用:它是一个空间效率高的概率型数据结构,用来告诉你:一个元素一定不存在或者可能存在

优点

  • 相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数(即 hash 函数的个数)。
  • Hash 函数相互之间没有关系,方便由硬件并行实现。
  • 布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势。
  • 布隆过滤器可以表示全集,其它任何数据结构都不能。

缺点

  • 有误判率存在。
  • 不支持删除。

适用场景

  • 预防缓存穿透:布隆过滤器快速判断数据是否存在,避免通过查询数据库来判断数据是否存在。
  • 网络爬虫:布隆过滤器可以用来去重已经爬取过的 URL。
  • 邮箱的垃圾邮件过滤。
  • 黑白名单。

原理

参考资料