认识布隆过滤器

2019-04-16  本文已影响0人  chengcongyue

为了准备后天的阿里二面,现在开始学习海量数据的处理
第一个要学的就是布隆过滤器,我们先看一下布隆过滤器的应用场景
**不安全的黑名单包括100亿个黑名单网页,每个网页的URL最多占用64B.现在要实现一个网页的过滤系统,根据给出的URL,看是否在黑名单上(黑名单问题)
允许有失误率的存在,空间使用不能超过30GB.

分析

如果把所有的URL通过数据库或者哈希函数保存起来,一个是64B,100亿个就是640GB,就不能满足额外空间不超过30GB这个条件了.
对于网页黑名单系统,垃圾邮件过滤系统,爬虫的网址判重系统,又容忍一定的失误率.这个时候我们就需要用到布隆过滤器.
布隆过滤器精准的代表了一个集合,又可以精确的判断一个元素是否在集合之中.完全正确是不可能的,布隆过滤器的特点就是通过很少的空间就找到准确度很高的程度.在使用布隆过滤器之前,我们要先了解哈希函数(散列函数).它的输入域可以是很大的范围,但他的输出域就是固定的范围

如果通过布隆过滤器检查URL

假设现在有一个a对象,想要检查它是否是之前的输入对象.
1.把a通过k个哈希函数算出k个值,然后把这k个值都去余,使得0----m-1上有这个k个值,然后重头戏来了
2.这个时候看看每个值对应在bit array是否是涂黑的,即是否为1,如果全部为1,说明就在这个名单之中,如果有一个是白的,则说明不在其中
说的在具体一点,a如果是输入对象,那么它对应的k个值在bit array中一定会涂黑,a一定不会漏盘
a如果是之前输入的,那么它一定可以被找到
3.然后就是漏判的情况,如果它不是之前的输入对象,但它经过k个哈希函数,对应的位置都有可能是黑的
所以,就有下面这句话

图片.png
所以当处理的URL过多时,同时bit array的长度过小时,这样的或就会是失误率变的比较大(这个很好理解,如果bit array的长度是1,那么怎么样都是涂黑的),以上就是布隆过滤器大概的分析了,然后我们就来分析一下布隆过滤器的失误率吧.
在上面的过程中,涉及到了几个变量.
一个是输入对象的个数n(100亿个),然后就是失误率p,然后就是布隆过滤器的大小k和哈希函数的个数k.(n,m,k,p)
然后就是失误率分析,一下内容都是来自于书籍<<程序员代码面试指南>>这本书
我们以本题来进行分析.黑名单样本的个数为100个,失误率不能超过0.01%,每个样本的大小为64B,单个样本的大小不会影响到布隆过滤器的大小,这个只和哈希函数有关.这儿我们就可以知道布隆过滤器的好处之一就是不用顾忌单个样本的大小
图片.png
然后就知道数组大小为25亿,哈希函数为14个,即100亿个数每一个都要经过14个哈希函数的变化,然后在25亿长度的数组中涂黑.
图片.png
步骤不再去推,因为推也看不懂.
然后就是对误判的处理,我们来看看书.
图片.png
上一篇下一篇

猜你喜欢

热点阅读