- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网址:/huangwei1024/archive/2010/11/17/133869.html
Bloom Filter 原理与应用
Http://Blog.Huang-Wei.Com/2010/11/02/Bloom-Filter/
Bloom Filter 原理与应用
介绍
Bloom Filter是一种简单的节省空间的随机化的数据结构,支持用户查询的集合。一般我们使用STL的std::set, stdext::hash_set,std::set是用红黑树实现的,stdext::hash_set是用桶式哈希表。上述两种数据结构,都会需要保存原始数据信息,当数据量较大时,内存就会是个问题。如果应用场景中允许出现一定几率的误判,且不需要逆向遍历集合中的数据时,Bloom Filter是很好的结构。
优点
查询操作十分高效。
节省空间。
易于扩展成并行。
集合计算方便。
代码实现方便。
有误判的概率,即存在False Position。
无法获取集合中的元素数据。
不支持删除操作。
缺点
有误判的概率,即存在False Position。
无法获取集合中的元素数据。
不支持删除操作。
定义
Bloom Filter是一个有m位的位数组,初始全为0,并有k个各自独立的哈希函数。
图1
添加操作
每个元素,用k个哈希函数计算出大小为k的哈希向量?,将向量里的每个哈希值对应的位设置为1。时间复杂度为??,一般字符串哈希函数的时间复杂度也就是?。
查询操作
和添加类似,先计算出哈希向量,如果每个哈希值对应的位都为1,则该元素存在。时间复杂度与添加操作相同。
示例
图2表示m=16,k=2的Bloom Filter, 和 的哈希值分别为(3, 6)和(10, 3)。
图2
False Position
如果某元素不在Bloom Filter中,但是它所有哈希值的位置均被设为1。这种情况就是False Position,也就是误判。
借用示例,如下:
图3
这个问题其实和哈希表中的冲突是相同的道理,哈希表中可以使用开散列和闭散列的方法,而Bloom Filter则允许这样的情况发生,它更关心于误判的发生概率。
概率
宏观上,我们能得出以下结论:
参数表 变量 减少 增加 哈希函数总数 K l? 更少的哈希值计算
l? 增加False Position的概率 l? 更多的计算
l? 位值0减少 Bloom Filter?大小 M l? 更少的内存
l? 增加False Position的概率 l? 更多的内存
l? 降低概率 元素总数 N l? 降低False Position的概率 l? 增加概率 False Position的概率为?。
假设m和n已知,为了最小化False Position,则?。
数据
图4
扩展
Counter Bloom Filter
Bloom Filter有个缺点,就是不支持删除操作,因为它不知道某一个位从属于哪些向量。那我们可以给Bloom Filter加上计数器,添加时增加计数器,删除时减少计数器。
但这样的Filter需要考虑附加的计数器大小,假如同个元素多次插入的话,计数器位数较少的情况下,就会出现溢出问题。如果对计数器设置上限值的话,会导致Cache Miss,但对某些应用来说,这并不是什么问题,如Web Sharing。
Compressed Bloom Filter
为了能在服务器之间更快地通过网络传输Bloom Filter,我们有方法能在已完成Bloom Filter之后,得到一些实际参数的情况下进行压缩。
将元素全部添加入Bloom Filter后,我们能得到真实的空间使用率,用这个值代入公式计算出一个比m小的值,重新构造Bloom Filter,对原先的哈希值进行求余处理,在误判率不变的情况下,使得其内存大小更合适。
应用
加速查询
适用于一些key-value存储系统,当values存在硬盘时,查询就是件费时的事。
将Storage的数据都插入Filter,在Filter中查询都不存在时,那就不需要去Storage查询了。
当False Position出现时,只是会导致一次多余的Storage查询。
图5
l? Google的BigTable也使用了Bloom Filter,以减少不存在的行或列在磁盘上的查询,大大提高了数据库的查询操作的性能。
l? 在Internet Cache Protocol中的Proxy-Cache很多都是使用Bloom Filter存储URLs,除了高效的查询外,还能很方便得传输交换Cache信息。
网络应用
l? P2P网络中查找资源操作,可以对每条网络通路保存Bloom Filter,当命中时
您可能关注的文档
最近下载
- 2025年【全国】汉字听写大会竞赛考试题(含答案).docx VIP
- 新高三第一次班主任会议,校长讲话:凝心聚力战高三,担当使命育栋梁.docx
- 《化学抛光和电解抛光》.ppt VIP
- 校园内施工安全教育课件.pptx VIP
- 某某村党群服务中心项目可行性研究报告.doc VIP
- 2023年电动自行车换电站相关项目可行性研究报告.docx VIP
- Q-CR 517.2-2023铁路工程喷膜防水材料 第2部分:喷涂橡胶沥青(OCR).pdf
- (王红)《遣戍伊犁日记》《叶柝纪程》录文.doc VIP
- 一种用硅藻土助滤剂废弃物制备纳米白炭黑的方法.pdf VIP
- 数字化转型之数据治理解决方案.pdf VIP
文档评论(0)