布隆过滤器
布隆过滤器(Bloom Filter)是 1970 年由布隆提出的,它实质上是一个很长的二进制向量和一系列随机映射函数 (Hash 函数)。
作用:它是一个空间效率高的概率型数据结构,用来告诉你:一个元素一定不存在或者可能存在。
优点
- 相比于其它的数据结构,布隆过滤器在空间和时间方面都有巨大的优势。布隆过滤器存储空间和插入/查询时间都是常数(即 hash 函数的个数)。
- Hash 函数相互之间没有关系,方便由硬件并行实现。
- 布隆过滤器不需要存储元素本身,在某些对保密要求非常严格的场合有优势。
- 布隆过滤器可以表示全集,其它任何数据结构都不能。
缺点
- 有误判率存在。
- 不支持删除。
适用场景
- 预防缓存穿透:布隆过滤器快速判断数据是否存在,避免通过查询数据库来判断数据是否存在。
- 网络爬虫:布隆过滤器可以用来去重已经爬取过的 URL。
- 邮箱的垃圾邮件过滤。
- 黑白名单。