网站大量收购独家精品文档,联系QQ:2885784924

Bloom Filter 原理与应用.docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Bloom Filter 原理与应用

网址:/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,当命中时,则选择该通路访问。 l

文档评论(0)

yaobanwd + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档