布隆过滤器、布谷过滤器

布隆过滤器(Bloom Filter)

布隆过滤器说某个元素存在,小概率会误判。布隆过滤器说某个元素不在,那么这个元素一定不在。

优点

占用空间更少并且效率更高(位数组中的每个元素都只占用 1 bit ,并且每个元素只能是 0 或者 1,100w 个元素约122kb )

缺点

1.其返回的结果不是精确的,理论情况下添加到集合中的元素越多,误报的可能性就越大。
2.并且存放在布隆过滤器的数据不容易删除。

增强

bitmap更换成数组,当数组某位置被映射一次时就+1,当删除时就-1,这样就避免了普通布隆过滤器删除数据后需要重新计算其余数据包Hash的问题,但是依旧没法避免误判。

布隆过滤器使用场景

  • 海量数据处理,判断一个数字是否存在于包含大量数字的数字集中(数字集很大,5 亿以上!)
  • 防止缓存穿透(判断请求的数据是否有效避免直接绕过缓存请求数据库)
  • 邮箱的垃圾邮件过滤
  • 黑名单功能
  • 去重(比如爬给定网址的时候对已经爬取过的 URL 去重)
  • 【Redis 中的布隆过滤器、Google 开源的 Guava 中自带的布隆过滤器】

布谷过滤器(Cuckoo Filter)

因为布隆顾虑器无法删除,导致后续精确性不断的降低,为了解决布隆过滤器不能删除元素的问题,布谷鸟过滤器横空出世。

布谷鸟过滤器和布谷鸟哈希结构一样,它也是一维数组,但是不同于布谷鸟哈希的是,布谷鸟哈希会存储整个元素,而布谷鸟过滤器中只会存储元素的指纹信息(几个bit,类似于布隆过滤器)。这里过滤器牺牲了数据的精确性换取了空间效率。正是因为存储的是元素的指纹信息,所以会存在误判率,这点和布隆过滤器如出一辙。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值