Bloom filter(布隆过滤器)概念与原理

Posted 永不言弃01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Bloom filter(布隆过滤器)概念与原理相关的知识,希望对你有一定的参考价值。

写在前面

在大数据与云计算发展的时代,我们经常会碰到这样的问题。我们是否能高效的判断一个用户是否访问过某网站的主页(每天访问量上亿)或者需要统计网站的pv、uv。最直接的想法是将所有的访问者存起来,然后每次用户访问的时候与之前集合进行比较。不管是将访问信息存在内存(或数据库)都会对服务器造成非常大的压力。那是否存在一种方式,容忍一定的错误率,高效(计算复杂度、空间复杂度)的实现访问量信息的跟踪、统计呢?接下来介绍的布隆过滤器(BloomFilter)就可以满足当前的使用场景(注释:基数计数法同样能满足pv、uv的统计)。

布隆过滤器简介

布隆过滤器(BloomFilter)是1970年由布隆提出的一种空间空间效率很高的随机数据结构,它利用位数组很简洁地表示一个集合,并判断一个元素是否属于这个集合。使用布隆过滤器,存在第一类出错(Falsepositive),但是不会存在第二类错误(Falsenegative),因此,布隆过滤器拥有100%的召回率。也就是说,布隆过滤器能够准确判断一个元素不在集合内,但只能判断一个元素可能在集合内。因此,BloomFilter不适合“零错误”的应用场合。在能够容忍低错误的应用场合下,BloomFilter通过极少的错误换取了存储空间的极大节省。我们可以向布隆过滤器里添加元素,但是不能从中移除元素(普通布隆过滤器,增强的布隆过滤器是可以移除元素的)。随着布隆过滤器中元素的增加,犯第一类错误的可能性也随之增大。

算法描述

一个空的布隆过滤器有长度为M比特的bit数组构成,且所有位都初始化0。一个元素通过K个不同的hash函数随机散列到bit数组的K个位置上,K必须远小于M。K和M的大小由错误率(falsepositiverate)决定。