范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

布隆过滤器与布谷鸟过滤器,我懵了

  大家都知道,在计算机中,IO一直是一个瓶颈,很多框架以及技术甚至硬件都是为了降低IO操作而生,今天聊一聊过滤器,先说一个场景:
  我们业务后端涉及数据库,当请求消息查询某些信息时,可能先检查缓存中是否有相关信息,有的话返回,如果没有的话可能就要去数据库里面查询,这时候有一个问题,如果很多请求是在请求数据库根本不存在的数据,那么数据库就要频繁响应这种不必要的IO查询,如果再多一些,数据库大多数IO都在响应这种毫无意义的请求操作,那么如何将这些请求阻挡在外呢?过滤器由此诞生: 布隆过滤器
  布隆过滤器( Bloom Filter )大概的思路就是,当你请求的信息来的时候,先检查一下你查询的数据我这有没有,有的话将请求压给数据库,没有的话直接返回,是如何做到的呢? 另外,如果你近期准备面试跳槽,建议在 Java面试库小程序在线刷题,涵盖 2000+ 道 Java 面试题,几乎覆盖了所有主流技术面试题。
  如图,一个bitmap用于记录,bitmap原始数值全都是0,当一个数据存进来的时候,用三个Hash函数分别计算三次Hash值,并且将bitmap对应的位置设置为1,上图中,bitmap 的1,3,6位置被标记为1,这时候如果一个数据请求过来,依然用之前的三个Hash函数计算Hash值,如果是同一个数据的话,势必依旧是映射到1,3,6位,那么就可以判断这个数据之前存储过,如果新的数据映射的三个位置,有一个匹配不上,假如映射到1,3,7位,由于7位是0,也就是这个数据之前并没有加入进数据库,所以直接返回。 布隆过滤器的问题
  上面这种方式,应该你已经发现了,布隆过滤器存在一些问题:
  第一方面,布隆过滤器可能误判:
  假如有这么一个情景,放入数据包1时,将bitmap的1,3,6位设置为了1,放入数据包2时将bitmap的3,6,7位设置为了1,此时一个并没有存过的数据包请求3,做三次哈希之后,对应的bitmap位点分别是1,6,7,这个数据之前并没有存进去过,但是由于数据包1和2存入时将对应的点设置为了1,所以请求3也会压倒数据库上,这种情况,会随着存入的数据增加而增加。
  第二方面,布隆过滤器没法删除数据,删除数据存在以下两种困境:
  一是,由于有误判的可能,并不确定数据是否存在数据库里,例如数据包3。
  二是,当你删除某一个数据包对应位图上的标志后,可能影响其他的数据包,例如上面例子中,如果删除数据包1,也就意味着会将bitmap1,3,6位设置为0,此时数据包2来请求时,会显示不存在,因为3,6两位已经被设置为0。 布隆过滤器增强版
  为了解决上面布隆过滤器的问题,出现了一个增强版的布隆过滤器(Counting Bloom Filter),这个过滤器的思路是将布隆过滤器的bitmap更换成数组,当数组某位置被映射一次时就+1,当删除时就-1,这样就避免了普通布隆过滤器删除数据后需要重新计算其余数据包Hash的问题,但是依旧没法避免误判。
  布谷鸟过滤器
  为了解决布隆过滤器不能删除元素的问题, 论文《Cuckoo Filter:Better Than Bloom》作者提出了布谷鸟过滤器。相比布谷鸟过滤器,布隆过滤器有以下不足:查询性能弱、空间利用效率低、不支持反向操作(删除)以及不支持计数。最新面试题整理好了,大家可以在Java面试库小程序在线刷题。
  查询性能弱 是因为布隆过滤器需要使用多个 hash 函数探测位图中多个不同的位点,这些位点在内存上跨度很大,会导致 CPU 缓存行命中率低。
  空间效率低 是因为在相同的误判率下,布谷鸟过滤器的空间利用率要明显高于布隆,空间上大概能节省 40% 多。不过布隆过滤器并没有要求位图的长度必须是 2 的指数,而布谷鸟过滤器必须有这个要求。从这一点出发,似乎布隆过滤器的空间伸缩性更强一些。
  不支持反向删除操作 这个问题着实是击中了布隆过滤器的软肋。在一个动态的系统里面元素总是不断的来也是不断的走。布隆过滤器就好比是印迹,来过来就会有痕迹,就算走了也无法清理干净。比如你的系统里本来只留下 1kw 个元素,但是整体上来过了上亿的流水元素,布隆过滤器很无奈,它会将这些流失的元素的印迹也会永远存放在那里。随着时间的流失,这个过滤器会越来越拥挤,直到有一天你发现它的误判率太高了,不得不进行重建。
  布谷鸟过滤器在论文里声称自己解决了这个问题,它可以有效支持反向删除操作。而且将它作为一个重要的卖点,诱惑你们放弃布隆过滤器改用布谷鸟过滤器。 为啥要取名布谷鸟呢?
  有个成语,「鸠占鹊巢」,布谷鸟也是,布谷鸟从来不自己筑巢。它将自己的蛋产在别人的巢里,让别人来帮忙孵化。待小布谷鸟破壳而出之后,因为布谷鸟的体型相对较大,它又将养母的其它孩子(还是蛋)从巢里挤走 —— 从高空摔下夭折了。  布谷鸟哈希
  最简单的布谷鸟哈希结构是一维数组结构,会有两个 hash 算法将新来的元素映射到数组的两个位置。如果两个位置中有一个位置为空,那么就可以将元素直接放进去。但是如果这两个位置都满了,它就不得不「鸠占鹊巢」,随机踢走一个,然后自己霸占了这个位置。 p1 = hash1(x) % l p2 = hash2(x) % l
  不同于布谷鸟的是,布谷鸟哈希算法会帮这些受害者(被挤走的蛋)寻找其它的窝。因为每一个元素都可以放在两个位置,只要任意一个有空位置,就可以塞进去。所以这个伤心的被挤走的蛋会看看自己的另一个位置有没有空,如果空了,自己挪过去也就皆大欢喜了。但是如果这个位置也被别人占了呢?好,那么它会再来一次「鸠占鹊巢」,将受害者的角色转嫁给别人。然后这个新的受害者还会重复这个过程直到所有的蛋都找到了自己的巢为止。 布谷鸟哈希的问题
  但是会遇到一个问题,那就是如果数组太拥挤了,连续踢来踢去几百次还没有停下来,这时候会严重影响插入效率。这时候布谷鸟哈希会设置一个阈值,当连续占巢行为超出了某个阈值,就认为这个数组已经几乎满了。这时候就需要对它进行扩容,重新放置所有元素。
  还会有另一个问题,那就是可能会存在挤兑循环。比如两个不同的元素,hash 之后的两个位置正好相同,这时候它们一人一个位置没有问题。但是这时候来了第三个元素,它 hash 之后的位置也和它们一样,很明显,这时候会出现挤兑的循环。不过让三个不同的元素经过两次 hash 后位置还一样,这样的概率并不是很高,除非你的 hash 算法太挫了。
  布谷鸟哈希算法对待这种挤兑循环的态度就是认为数组太拥挤了,需要扩容(实际上并不是这样)。最新面试题整理好了,大家可以在Java面试库小程序在线刷题。 优化
  上面的布谷鸟哈希算法的平均空间利用率并不高,大概只有 50%。到了这个百分比,就会很快出现连续挤兑次数超出阈值。这样的哈希算法价值并不明显,所以需要对它进行改良。
  改良的方案之一是增加 hash 函数,让每个元素不止有两个巢,而是三个巢、四个巢。这样可以大大降低碰撞的概率,将空间利用率提高到 95%左右。
  另一个改良方案是在数组的每个位置上挂上多个座位,这样即使两个元素被 hash 在了同一个位置,也不必立即「鸠占鹊巢」,因为这里有多个座位,你可以随意坐一个。除非这多个座位都被占了,才需要进行挤兑。很明显这也会显著降低挤兑次数。这种方案的空间利用率只有 85%左右,但是查询效率会很高,同一个位置上的多个座位在内存空间上是连续的,可以有效利用 CPU 高速缓存。
  所以更加高效的方案是将上面的两个改良方案融合起来,比如使用 4 个 hash 函数,每个位置上放 2 个座位。这样既可以得到时间效率,又可以得到空间效率。这样的组合甚至可以将空间利用率提到高 99%,这是非常了不起的空间效率。 布谷鸟过滤器
  布谷鸟过滤器和布谷鸟哈希结构一样,它也是一维数组,但是不同于布谷鸟哈希的是,布谷鸟哈希会存储整个元素,而布谷鸟过滤器中只会存储元素的指纹信息(几个bit,类似于布隆过滤器)。这里过滤器牺牲了数据的精确性换取了空间效率。正是因为存储的是元素的指纹信息,所以会存在误判率,这点和布隆过滤器如出一辙。
  首先布谷鸟过滤器还是只会选用两个 hash 函数,但是每个位置可以放置多个座位。这两个 hash 函数选择的比较特殊,因为过滤器中只能存储指纹信息。当这个位置上的指纹被挤兑之后,它需要计算出另一个对偶位置。而计算这个对偶位置是需要元素本身的,我们来回忆一下前面的哈希位置计算公式。 fp = fingerprint(x) p1 = hash1(x) % l p2 = hash2(x) % l
  我们知道了 p1 和 x 的指纹,是没办法直接计算出 p2 的。 特殊的 hash 函数
  布谷鸟过滤器巧妙的地方就在于设计了一个独特的 hash 函数,使得可以根据 p1 和 元素指纹 直接计算出 p2,而不需要完整的 x 元素。 fp = fingerprint(x) p1 = hash(x) p2 = p1 ^ hash(fp)  // 异或
  从上面的公式中可以看出,当我们知道 fp 和 p1,就可以直接算出 p2。同样如果我们知道 p2 和 fp,也可以直接算出 p1 —— 对偶性。 p1 = p2 ^ hash(fp)
  所以我们根本不需要知道当前的位置是 p1 还是 p2,只需要将当前的位置和 hash(fp) 进行异或计算就可以得到对偶位置。而且只需要确保 hash(fp) != 0 就可以确保 p1 != p2,如此就不会出现自己踢自己导致死循环的问题。
  也许你会问为什么这里的 hash 函数不需要对数组的长度取模呢?实际上是需要的,但是布谷鸟过滤器强制数组的长度必须是 2 的指数,所以对数组的长度取模等价于取 hash 值的最后 n 位。在进行异或运算时,忽略掉低 n 位 之外的其它位就行。将计算出来的位置 p 保留低 n 位就是最终的对偶位置。

美联储宣布加息美国联邦储备委员会14日结束为期两天的货币政策会议,宣布上调联邦基金利率目标区间50个基点到4。25至4。50之间。今年以来,美联储已累计加息425个基点。位于美国华盛顿的美联储大富力创始人被捕背后房企出海,黄粱梦醒作者丨吴抒颖编辑丨林虹图源丨图虫伦敦,一座高层建筑公寓的43层富力创始人联席董事长张力正在这里,度过他被24小时监视居住的日子。张力此时的处境,是由于他在中国宴请美国旧金山前公共事骁龙8Gen2卷王明日登场,165Hz自适应高刷IP68125W快充!加量不加价的小米13系列上市后,市场反应不错,各大渠道都已经卖断货。起售价更低的iQOO11系列,凭借着全系标配2KLTPOE6屏,也取得了首销15秒破亿的好成绩。这两款骁龙8Ge华为MateX3爆料汇总!或春节前发布你准备好了吗?手机中国新闻在如今的手机市场上,折叠屏产品受到越来越多消费者的青睐。基于此,厂商们也致力于研发更多的折叠屏新品。而在中国折叠屏手机市场上,华为旗下的产品大受欢迎。最新数据显示,20中国春运机票预订量猛增据新加坡联合早报网站12月13日报道,中国优化疫情防控推动国内航空旅行市场快速复苏,2023年春运机票预订量呈大幅增长趋势,部分航线机票价格接近全价。据中国媒体报道,携程平台12月踩雷血泪史,别再乱买儿童电动牙刷了!孩子的口腔健康是家长非常关心的问题之一,很多家长纠结要不要给孩子用电动牙刷,用什么样的合适想当初给我女儿选儿童电动牙刷,真的是费了我的九牛二虎之力!前前后后换了好几把,辛酸曲折一大如何提高文化自信?华裔科学家的帽子该摘掉了!在经历了超过半个世纪的研究之后,科学家们终于取得了惯性约束核聚变从0到1的突破。12月13日,美国正式宣布,由LLNL建造的国家点火装置NIF成功实现了核聚变净能量增益。媒体人关注冬季高血压的联合用药在冬季,因气温气候的变化,心血管疾病也进入了高发期,这点在医院的门诊反映得尤为明显。今天王医生以高血压为例,来浅谈冬季的联合用药。秋冬季节,天气得变冷会使高血压病情更加容易出现反复离婚后的赵丽颖,野心藏不住了作者Quasimodo最近,赵丽颖新剧风吹半夏着实火了。有人看剧魔怔了,见到回收废铁都在想,如果给许老板能赚多少钱。作为一部时代剧,它以上世纪90年代钢铁行业兴衰为背景,讲述了一群外贸企业包机出海旧单失而复得新单惊喜不断央视网消息最近,一场场由政府牵头,组织外贸企业包机出海抢订单拓市场的行动陆续展开。包机出海给外贸企业带来了哪些收获呢?一起去看看记者的探访。近日,一些包机出海拓展市场的外贸人已经率经开区企业快讯丨西开有限两项科技成果通过2022年度重大科技成果鉴定日前,中国电气装备召开2022年度重大科技成果鉴定会议,共有22项科技成果顺利通过鉴定。经专家组审查与讨论,17项成果综合技术性能或指标达到国际领先水平,5项产品技术达到国际先进水
俄国数学天才称平行线可以相交,遭质疑郁郁而终,12年后被证实在阅读此文前,麻烦您点击一下关注,既方便您进行讨论与分享,又给您带来不一样的参与感,深度长文,希望您能够认真看完,感谢您的支持!在人类科技发展的道路上,有很多伟大的科学家,这些科学美国当面一套背后一套,美日荷签署芯片规则,高通宣布对华为供货头条创作挑战赛在过去几年华为在被美国制裁的日子里损失惨重,很多人认为华为,错过的只是一些手机出货量和市场份额,但实际上华为错过的是,两个非常难得的机会一是中国本土品牌已经全面超越三中国计算机学者走进南美高校来源人民网在厄瓜多尔高校活动现场。中国计算机学会供图人民网里约热内卢3月10日电(记者吴杰)中国的人工智能大数据可视化跨模态区块链数字经济一系列前沿话题近日在厄瓜多尔国家理工学院等楼市上新中港江来项目营销中心开放红网时刻新闻3月12日讯(记者戴丹)阳春三月,春意盎然,恰逢此时,中港地产迎来长沙首秀。3月12日上午,中港江来项目营销中心人流如织,来自政府媒体行业的上百位嘉宾齐聚一堂,共同见证2月乘用车细分市场车型走势2月有20个工作日,同比多4天,有利于产销增量。由于今年春节偏早,形成节后完整产销安排的强大增量因素。燃油车是民生需求车型,用户的消费服务需求大。今年春节返乡人员规模大,节后复工的委托他人代炒股稳赚不赔?亏损后女子起诉赔偿6万损失款,法院判了郭某委托彭某代为炒股,约定本金200000元。彭某承诺盈利后双方平分,本金风险由自己承担。期间,股市先涨后跌,郭某总投入195000元,盈利20000元,总亏损59128元。郭某因电池成本将砍半,特斯拉又迎来了春天美国于2022年8月16日签署降低通货膨胀法,此项条文能提供在北美组装的电动车优惠,近期则传出关于电池厂补助的细节规范,其中补助时间来到10年,而补助的费用为每度电35美元,换算下2023年四川省重点工业和技术改造项目05T06(德阳和绵阳,71项)序号。企业名称所在市州所在区县项目名称合计500德阳市34项绵阳市37项(五)德阳市34(一)计划竣工61。四川鸿晟药玻新材料科技有限公司德阳市罗江区四川省德阳市中性硼硅药用玻璃管四川平安人寿召开新职业愿景发布会顺应行业和市场发展趋势,推动保险代理人队伍高质量转型,3月11日,平安人寿四川分公司召开2023年新职业愿景发布会,启动2023年四川优保险代理人招募活动。美国UCLA大学金融学博实控人拟转让套现3。61亿元天目湖将回归国资控股每经记者范芊芊每经编辑文,多经历了2021年2022年两次股权转让后,这一次,天目湖(SH603136,股价30。43元,市值56。69亿元)控股股东孟广才可能将彻底交出上市公司控51岁毛长青辞去隆平高科董事长等职务,在任期间公司大力布局生物育种毛长青微信公众号北大光华MBA金融俱乐部视频截图近日,中国种业龙头袁隆平农业高科技股份有限公司(下称隆平高科,000998)公告披露,公司董事长毛长青因个人原因申请辞去公司法定代表