天天看点

布隆过滤器在爬虫的几种使用场景以及布谷鸟过滤器的优点

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

布隆过滤器原理?

把一个 key 进行好几个 hash 运算后,得到的 hash 值,对一个 bit 数组取模放进去,用 1 表示, 比如下面示例:

布隆过滤器在爬虫的几种使用场景以及布谷鸟过滤器的优点
布隆过滤器在爬虫的几种使用场景以及布谷鸟过滤器的优点

这个 再有其他 key 到来,再用同样的 方法计算 hash 值,判断bit数组的该位置是否为 1,都为 1 表示已存在(可能误判),不为 1,表示一定不存在.

应用场景:

1. 判断一个数据是否在数据库存在, 不存在再插入.(爬虫场景的幂等性入库操作)(对已经爬取过的 URL 去重)

2. 统计一个系统的当天的登录用户数(同一个人登录多次算一次)

3. 应对缓存穿透. (为了避免恶意用户频繁请求缓存中不存在DB也不存在的值,会导致缓存失效、DB负载过大,可以使用BloomFilter把所有数据放到bit数组中,当布隆过滤器报告不存在时直接返回,当布隆过滤器报告存在时再去查缓存,缓存不存在再去查数据库。)

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