专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

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

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

不要辣眼,要护眼!目前优质的LCD手机,这3款名列前茅不要辣眼,要护眼!目前优质的LCD手机,这3款名列前茅!iPhone11iPhone11作为两年前的苹果旗舰,放在现在依然吃香,同时这也是苹果最后一款LCD旗舰。iPhone11搭互联网早报抖音TikTok9月吸金超3。15亿美元今日看点抖音及海外版TikTok9月吸金超3。15亿美元,蝉联全球移动应用(非游戏)收入榜冠军贵州茅台前三季度实现营收871。6亿元,归母净利润444亿元快手正式上线知识产权保护平基于EQXX概念车奔驰EQC轿跑车渲染图曝光日前,车质网从海外媒体获悉了一组奔驰EQC轿跑车渲染图。新车基于奔驰EQXX概念车打造,定位为中型纯电动轿跑车,竞争对手将锁定特斯拉Model3。据悉,该车或将于2025年发布。从中国人的故事二十大代表武钢他是追风人,让中国风机走向全球编者按在以习近平同志为核心的党中央坚强领导下,按照党章规定和党中央统一部署,全国38个选举单位选举产生了2296名党的二十大代表。党的二十大代表是共产党员中的优秀分子,具有先进性和台商热议中共二十大报告进一步坚定在大陆扎根发展的信心(中共二十大声音)台商热议中共二十大报告进一步坚定在大陆扎根发展的信心中新社北京10月17日电(李雪峰刘玥晴)中共二十大16日在北京开幕。多位在大陆发展的台商接受中新社记者采访表示追梦路上丨肖海珠用一个个世界之最实现中国桥梁梦想编者按他们,脚踏实地,勇敢担当他们,心怀梦想,赢得荣光他们,砥砺前行,奔向远方党的十八大以来,全国各地不同行业无数的奋斗者在实现中国梦的道路上砥砺前行,不断奋进。2022年10月1江西野人进山凿出三室一厅,因失恋隐居22年,今68岁仍单身狭窄的山洞里空气异常潮湿,洞口处的青苔像是装饰的一点绿,山洞的入口很低,普通人要进去需要低着头才行。洞里面积不大,最初只有一间屋子大小,经过了余水芳这些年的日复一日地开凿,逐渐形成天津市台办深入东丽西青武清区台资企业进行专项调研督导调研现场(图片来源天津市台办)中国台湾网10月18日讯日前,天津市台办副主任王文忠带队,分别深入东丽西青武清等区的十余家重点台资企业走访,就防范化解企业安全生产风险进行专项调研督导在平凡岗位上奋斗奉献消防员马俊守护生命是我最大的职责与使命编者按新时代中国青年坚守永久奋斗光荣传统,把平凡的岗位作为成就人生的舞台,他们在各行各业把平凡做成了不起把不可能变成可能,将奋斗精神印刻在一个个普通岗位中,用艰辛努力推动社会发展民中国新征程世界新机遇丨匈牙利前总理中国的发展为推动世界经济发展作出贡献匈牙利前总理迈杰希彼得自1987年起多次访华,长期关注中国发展。近日,他在接受中央广播电视总台记者专访时表示,中国如期打赢脱贫攻坚战,人民生活水平显著提高,给世界留下了深刻印象。他女生的脚究竟有多臭?一组漫画揭秘男生开眼界了脚臭总是让人烦恼的,就像夏天,穿着一双凉鞋,那是最舒服的,可那股味道,却让人沉迷,让人欲罢不能。脚怎么会发臭?简单的说就是脚上出汗,导致脚底的细菌和真菌大量繁殖,分解蛋白质,同时还
我研究100个牛人,揭秘12个特征你的认知,决定你的命运!1。hr其实你的身体和大脑这两个机器,是具备超强创造性的,可惜你这个驾驶员一直在睡觉,你也不看说明书,于是这两个超强机器,就变成了废铜烂铁。2。hr普通人就娶了有这几种特征的女子,恭喜你,捡到宝了文wm会飞的鱼(原创)图网络女人嫁错人,毁一生,嫁对人,幸福一生,说的是女人择偶,一步错,步步错。找个不思进取,有性格缺陷的老公,就会生活在水深火热之中,苦不堪言。娘家人会一直为你不下心把叔叔叫成了老公啊啊现在去火星来得及吗?嘴瓢不是病犯起来要人命嘴瓢简直就是社死高发区这辈子谁还没有大脑突然抽筋说过几句胡话的时候呢病从口入祸从口出毕竟人生何处不尴尬就怕嘴瓢说错话铁汁们跟着我感受下那些讲错话而社死的尴尬抠闷声发大财的人,往往都有这三个特征,别小看他们文荔子言图来源于网络,侵权联系删除平日里我们同人聊天时,总会听到一些人抱怨自己的命运不好,觉得上天没有眷顾自己,没有让自己交到好运,没有赚到大钱。却从不去想一个人的命运,从来都不是巨贪雷志强落马记与子敛财4亿,8200万不知来源,古董搜出2卡车巨贪雷志强落马记与子敛财4亿,8200万不知来源,古董搜出2卡车正所谓三年清知府,十年雪花银。身居高位未必是一件好事,总有一些上位者会忘记自己的初衷,想方设法得到一些不属于自己的东天问一号火星能量粒子分析仪科学成果发布8月7日,记者从中科院近代物理研究所了解到,近期,由澳门科技大学中国地质大学(北京)中科院近代物理研究所兰州空间技术物理研究所中国科学技术大学美国阿拉巴马大学亨茨维尔分校和中科院国普京大脑杜金差点被刺杀,凶手是谁?杜金为何提议肢解中国?达莉亚杜金娜俄罗斯当地时间8月20日21时45分左右,发生了一起车祸,遇难者是一名约30岁的女性,名为达莉亚杜金娜。达莉亚是亚历山大杜金的女儿,亚历山大杜金是俄罗斯的一名极右翼俄罗李幼斌与黄景瑜二搭,罚罪直接官宣定档,真是太令人期待2021年孙红雷张艺兴的扫黑风暴成为爆款作,成为当之无愧的黑马。而这种犯罪题材的作品之所以这么受欢迎,还是眼下作品稀少导致的。而今年推出的犯罪片对决,也收获了不少好评,王景春欧豪等侠客岛问题只是刘翔峰吗?医学界有句话北协和南湘雅,说的是一南一北两家代表业界最高水平的医院。最近,湘雅二院上了热搜,但可不是啥好事儿有网友举报,湘雅二院医生刘翔峰存在医疗作风问题。不管是不是肿瘤,一律按肿9月1日起,2023年居民医保缴费开始,部分人能免缴9月份即将到来,这是一个关键的月份,因为对于广大的城乡居民来说,9月份就会进入到城乡居民医保的集中缴费期了,一年一度的缴费时间又到了。欢迎点击上方蓝色音频按钮,收听全文。什么是城乡陕西发布地质灾害气象预报预警与山洪灾害气象预警陕西省自然资源厅与陕西省气象局联合发布地质灾害气象预报预警预计2022年8月25日12时至2022年8月26日12时,渭南临渭,西安蓝田,宝鸡凤县,汉中留坝宁强,商洛山阳商南发生滑
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网