其他分享
首页 > 其他分享> > 初学布隆过滤器,布谷鸟过滤器

初学布隆过滤器,布谷鸟过滤器

作者:互联网

用于判断一个元素是否在一个集合中

一个元素占一个bit,初始化为0或1
如何计算
拥有k个hash函数,一个元素加入,进行k次计算得到k个hash值,根据hash值,在维数组中把对应下标位置标为1

如何判断
将元素进行k次哈希运算,得k个值,在数组中判断每个数组是否都为1

False positives概率 ——误差率

由于hash 冲突本来不在布隆过滤器的数据,查询时显示在里面

容量越大,误差下降,插入元素个数增加,误差率上升

如何降低误差率
计算公式在这里插入图片描述

过程
在这里插入图片描述

在这里插入图片描述
教程根据
随机字符串
模拟app账号
视频素材主键
选择MurMurHash2

使用场景

1.黑名单校验
2.快速去重
3.爬虫URL校验
4.leveldb/rocksdb 快速判断数据是否已经在block中,避免频繁访问磁盘
5.缓存穿透

补充:缓存穿透

概念:查询你一个数据库中不一定存在的数据,
正常流程:有一个缓存数据库,根据key 去查询value,先查缓存,如果key 不存在或已经过期,在去查db(数据库),将查到的数据库中查到的对象,放入缓存,
异常流程:大量数据进入时,没查到缓存,每次都要访问数据库,db压力
使用布隆过滤器解决
在这里插入图片描述

布隆过滤器总结

优点:
1.节省内存空间
2.插入和查询时间复杂度都为1
缺点
1.不支持删除
2.hash冲突,可能会出现假阳性
3.查询性能相对较弱

思考
布隆过滤器适用于数据更新较少的场景
海量数据模式下,数据量频繁变化,如何高效构建布隆过滤器??
使用mapreduce来并行执行
如何删除布隆过滤器
计数布隆过滤器
布谷鸟过滤器(鸡肋删除

布谷鸟过滤器

布谷鸟hash

解决空闲位置少,易发生hash冲突,循环占位
1.增加hash函数,增加数组上的对应位置,重复,可选其他位置,不占其他位置–>空间利用率95%
2.使得一个hash 函数的计算结果有多个位置,大数组套小数组(内存空间连续–>查询效果好,空间利用率–>85%

计算过程

布谷鸟过滤器算法

通过fingerprint 计算出参数x 的指纹
通过x的指纹fp直接计算出x 的第二个位置

fp = fingerprint(x)
p1 = hash(x)
p2 = p1^hash(fp)//异或

原因:
布谷鸟过滤器只存储了x 的指纹,不存元素,指纹就可算出其他位置

布谷鸟hash结构算法
p1 = hash1(x)%1
p2 = hash2(x)%2
布谷鸟过滤器查找算法

在hash桶查找有没有自己的指纹
缺点:误查询
牺牲数据精度换取空间大小
在这里插入图片描述

布谷鸟过滤器删除算法

抹去指纹(或
缺点:误删除
牺牲数据精度换取空间大小

在这里插入图片描述

缺陷

如果连续存储相同的位置,将大数组中的小数组位置也占满呢在存储相同元素呢??
结果:存不进去

标签:缓存,hash,布谷鸟,布隆,数组,过滤器
来源: https://blog.csdn.net/m0_51478065/article/details/121456208