ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-11-28 19:32:21  阅读:136  来源: 互联网

标签:缓存 hash 布谷鸟 布隆 数组 过滤器


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

一个元素占一个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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有