布(隆/谷鸟)过滤器
创始人
2024-01-27 03:03:48
0

布隆过滤器

本质:一个空的2进制数组(初始全为0,只存0和1)

插入

一个key,经过k个hash函数运算后,得到k个值,将2进制数组对应下标的位置置为1。

查询

将key同样进行k个hash,去2进制数组比对对应下标位置的值,

  • 全为1则可能存在该key;
  • 不全为1,则一定不存在该key
删除

不能删

应用
  • 大集合中检查元素是否重复
  • Redis中防止缓存穿透

缓存穿透:key对应的数据在数据源并不存在,每次针对此key的请求从缓存获取不到,请求都会到数据源,从而可能压垮数据源。
解决办法:将数据源的key是否存在的信息存储到布隆过滤器中,如果布隆过滤器判定数据不存在,则不再请求数据源。

布谷鸟过滤器

基本的布谷鸟过滤器由两个并不独立的哈希函数构成。
基本单位为条目,每个条目存储一个指纹。
指纹指的是使用一个哈希函数生成的n位比特位,n的具体大小由所能接受的误判率来设置。一般n=8
布谷鸟哈希表由一个桶数组构成,每个桶可以有多个条目,即每个桶中有多个存放指纹的位置。

插入

先进行一次hash,得出应当插入位置和应当插入的值(指纹)。
如果这个桶(桶内的m个位置均被占用)插入失败,会重新计算(指纹哈希与第一个索引异或),查看第二个桶能否插入。

若第二个桶插入失败,则会随机在两个桶中挑选一个桶,将其中的一个值标记为旧值,用新值覆盖旧值,旧值会在重复上面的步骤进行插入。

扩容

如果数组过小,会发生循环挤兑的情况。
如果超过最大挤兑次数,进行扩容,重新计算每个指纹的位置。

删除
  • 通过两次hash找到索引位置,如果任何桶中的指纹匹配,则从该桶中删除匹配指纹的一份副本。
  • 如果俩数据的哈希值和指纹相同时,会出现误删除情况。
更新

删除后再添加新指纹。

优点
  • 支持删除
  • 在误判率小于3%时,空间性能优于布隆过滤器
  • 查询效率高
缺点
  • 插入性能差
  • 插入重复元素存在上限(哈希函数个数*桶容量)
  • 空间大小要求是2的指数
  • 删除有问题,存在误删的概率

表格一览

布隆过滤器布谷鸟过滤器
插入k个hash函数2个hash函数
删除不能删可以删
更新不能更新删除后再添加
查询有误判率有误判率
优点安全、节省空间查询效率高、支持删除、更节省空间
缺点有误判率、无法删除插入性能差、插入重复元素有上限、空间大小为2的指数、删除不完美

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...