`
bofang
  • 浏览: 126701 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

BloomFilter的原理与应用

阅读更多

 

原理

 

Bloom filter是一种hash算法,可以认为该算法的目的是高效地判断某个元素是否在一个特定集合中。

 

该算法涉及到三种数据类型:

 

    -- 数据集合S

    -- 一个数组,该数组的元素类型是bit,记为A

    -- k个hash函数,每个Hash函数记为Hk

 

初始情况下,bit数组所有元素为0。

 

插入一个元素时,将每个hash函数Hk应用到到该元素,产生k个值。可以用取模的方法将这k个值映射到数组A的k个位置,并将这k个位置上的值置为1。

 

例如,我们有三个hash函数,数组的长度是10。插入一个元素时,数组的状态可能是这样的:

 

                 X

                 |

                 V

      H1(X)   H2(X)   H3(X)

                 |

                 v

+---------------------------------------+

| 0 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 |    bit array

+---------------------------------------+

 

下面,我们的问题是判断另外一个元素Y是否在集合中。将所有的hash函数应用到Y,产生k个位置,我们检查数组A上的这k个位置上的值。如果有至少一个位置的值是0,那么Y肯定不在集合中。

 

问题是,如果所有的位置上的值都为1,我们能得到什么结论?我们不能确定Y是否一定在集合中,Y可能在,也可能不在。所以,通过Bloom filter我们得到一个元素不在集合的结论是正确的。

 

应用

 

-- bloom filter在Cassandra的应用

 

BigTable和Cassandra使用Bloom filter快速判断某个key不在文件中。Cassandra论文中这样描述:

 

When a disk lookup occurs we could be looking up a key in multiple files on

disk. In order to prevent lookups into files that do not contain the key, a

bloom filter, summarizing the keys in the file, is also stored in each data

file and also kept in memory. This bloom filter is first consulted to check if

the key being looked up does indeed exist in the given file.

 

当查找一个key时,会发生磁盘扫描。为了提高效率,我们不会扫描不存在某个key的文件。为了做到这一点,一个bloom filter维护了某个数据文件的所有key信息,并且这个bloom filter也持久化在数据文件。可以优先利用这个bloom filter判断这个key是否在该数据文件中,这样,不保存这个key的数据文件就不会被查找。

 

-- bloom filter在chrome的应用

 

chrome拥有一个能检测用户访问的url是否安全的功能。url的数量巨大,但是,不安全的url的数量相对比较少。一个最简单的方法是在用户每次访问某个url时,都调用安全检查服务来判断这个url是否安全。这个最简单的方法有两个缺陷:1)严重影响用户体验,毕竟多了一次网络的访问。2)急剧增加安全检查服务的压力。chrome利用bloom filter优雅地解决了这个问题。大致的原理是:将那些不安全的url进行hash,存储到一个bloom filter中,当需要检查某个url是否安全时,首先检查这个url是否会落到这个bloom filter中,如果不在bloom filter,可以很肯定地判断这个url是安全的。如果落在bloom filter,因为bloom filter的特点,我们还无法知道这个url是否一定是不安全的,这个时候可以访问安全检查服务进行检查。这个方法可以用很小的bloom filter检测数亿计的url。

 

 

 

分享到:
评论

相关推荐

    Bloom Filter概念和原理

    Bloom Filter是一种空间效率很高的随机数据结构,它利用位数组很简洁地...因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。

    介绍Bloom Filter(布隆过滤器)原理、实现及具体应用

    介绍Bloom Filter(布隆过滤器)原理、实现及具体应用,包含9个不同PPT及PDF文档资料,对Bloom Filter感兴趣、想学习的同学可以下载查看下

    javabitset源码-redis-bloomfilter:基于Redis的BloomfilterforJava

    redis-bloomFilter是基于redis的bitset实现的bloomfilter.具体原理和实现思路可以参考 使用 redis-bloomFilter发布在JitPack,可以选择下载源码编译,或者通过jitpack源添加依赖。 使用Maven添加依赖 添加jitpack源 ...

    Url消重算法(BloomFilter)

    本程序主要是BloomFilter算法的简化实现 因为C#非安全代码无法直接分配内存块,使用了int型数组代替,暂时为了简单没有使用位运算,比位运算消耗内存多16倍。 算法原理: 其首先申请一块大内存,并把内存中...

    利用Java手写一个布隆过滤器Bloom Filter

    它的原理是使用多个哈希函数对元素进行哈希,然后将哈希值映射到一个位数组中的多个位置上。当查询一个元素时,它会通过哈希函数得到多个哈希值,并检查这些哈希值对应的位数组上的值是否都为1。如果都为1,则认为...

    《Redis深度历险 核心原理与应用实践》_钱文品.pdf

    本书作者在掌阅维护着上千个 Redis 实例的集群; 他在 Redis 持久化,缓存,消息队列的各类实战...bloomfilter用于过滤老数据;geohash用于计算地理位置信息; 我能列举的只是九牛一毛,其内容全面而且详细,强推。

    U201914974_杨超淇_课程报告1

    1. 课程报告选题为基于 Bloom Filter 设计的大数据存储查询系统 2. 了解 bloom filter 的应用背景,掌握其基本原理 3. 尝试基于

    双结构网络中URL去重机制研究

    针对双结构网络的特点及其URL去重面临的挑战,根据Bloom Filter的工作原理,提出一种基于可扩展的动态可分裂Bloom Filter的URL去重机制,并在原型系统中进行实现和部署。实验结果表明,该机制能够有效适用于大规模、高...

    filters:社区创建的PixiJS自定义显示过滤器的集合

    筛选预习调整滤镜@ pixi / filter-adjustment AdvancedBloomFilter @ pixi / filter-advanced-bloom AsciiFilter @ pixi / filter-ascii 斜角过滤器@ pixi / filter-bevel BloomFilter @ pixi / filter-bloom ...

    python实现布隆过滤器及原理解析

    本质上布隆过滤器( BloomFilter )是一种数据结构,比较巧妙的概率型数据结构(probabilistic data structure),特点是高效地插入和查询,可以用来告诉你 “某样东西一定不存在或者可能存在”。 相比于传统的 Set、...

    Redis实现布隆过滤器的方法及原理

    布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都比一般的算法要好的多,...

    布隆过滤器+CBF scala实现+代码详解

    文章目录简介BloomFilterBloomFilter的简单优化改进BloomFilterspark 的布隆过滤器scala实现BF、CBF 简介 ...BloomFilter 使用范围:可以用来实现数据字典,进行数据的判重,或者集合求交 原理:位数

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    技术点56 通过MapReduce 对Bloom filter 进行semi-join 7.3 本章小结 8 结合R 和Hadoop 进行数据统计 8.1 比较R 和MapReduce 集成的几种方法 8.2 R 基础知识 8.3 R 和Streaming 8.3.1 Streaming 和...

    Hadoop实战(第2版)

    数据科学.7 数据结构和算法的运用7.1 使用图进行数据建模和解决问题7.1.1 模拟图7.1.2 最短路径算法技术点52 找出两个用户间的最短距离7.1.3 friends-of-friends(FoF) 技术点53 计算FoF 7.1.4 ...

    C++网络爬虫项目

    2.2.2. 布隆过滤器(BloomFilter) 基于布隆算法,对欲加入队列的原始统一资源定位符进行过滤,以防止已被抓 取过的URL再次入队,降低冗余开销同时避免无限循环。 2.2.3. 原始统一资源定位符(RawUrl) 提供原始形态的...

    lyq-algorithms-lib:lyq算法库,涉及到相关数据挖掘,解压缩,模式匹配,图算法等多领域算法

    lyq-algorithms-liblyq算法库,涉及到相关数据挖掘,解压缩,模式匹配,图算法等多领域算法BloomFilter布隆过滤器算法。可以用来判读一个集合是否存在的问题原理是运用哈希算法将值进行映射,不需要暴力的遍历数据...

    海量数据处理系列之:用C++实现Bitmap算法

    适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码扩展:bloom filter可以看做是对bit-map的扩展问题实例:1)...

    一种新型的容错匿名链接代码-研究论文

    我们建议使用Bloom过滤器以保护隐私的方式计算字符串相似度。 在这里,我们声称该原理也可以用于新颖的容错但仍不可逆的加密密钥。 我们将建议的代码称为“密码长期密钥”。 它由一个单个Bloom过滤器组成,随后将...

    分布式爬虫框架Cola.zip

    JobWorker上都存在消息队列节点,同时会有一个去重模块(bloom filter实现)。Cola还不够稳定,目前会处于持续改进的状态。且Cola还没有在较大规模的集群上测试,但是接下来我会把Cola应用到新项目中,并逐步完善。...

Global site tag (gtag.js) - Google Analytics