何为布隆过滤器

news/2024/11/22 18:53:39/

问题的提出

我们有一个不安全网页的黑名单,包含了100亿个黑名单网页的URL,每个网页URL最多占用64B.。

现在我们要设计一个网页过滤系统,这个系统要判断该网页是否在黑名单里,但是我们的空间有限,只有30GB.

允许有万分之一的判断失误

布隆过滤器

我们可以把所有的URL保存起来,比如放到hashmap里,但是64B*100亿=640GB,不符合要求。

布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。 

如果遇到网页黑名单系统、垃圾邮件过滤、爬虫网址判重等问题,如果可以容忍一定程度的失误率,那么我们就可以用布隆过滤器来解决。

哈希函数

我们先来认识一下哈希函数(或者说是复习)

1)

哈希函数的输入可以认为是无穷大或者是非常大的范围,比如任意一个整数(字符串),而输出域是有范围的

(这就意味着不同的输入可能是相同的输出)

2

当输入相同的值时,返回值也相同(确定性)

3)

所有不同的输入值得到的输出,均匀地分布在输出域内,并且与输入值出现的规律无关。(这也是评价一个哈希函数是否优秀的两个重要标准)比如:1和2相差很近,但是经过优秀的哈希函数计算后,他们应该差距较大。

4)

速度快:可以认为哈希函数的计算时间是O(1)的。

布隆过滤器输入

下面就开始介绍布隆过滤器啦。

1)

我们准备k个哈希函数,并且他们之间没有什么关系,彼此独立。

那么对于同一个输入对象(你想的没错就是一个URL),经过计算出来的结果也是完全独立的没有规律的。

2)

我们准备一个数组,长度为m,只有两种状态,所以我们选用bit数组名为bitmap。

3)

我们输入一个黑名单里的URL时:把URL用每一个哈希函数计算出来,结果%数组长度(目的是能存下呀。。。。。),把对应位置的bit变为1,记录下来。

处理完所有URL,我们的布隆过滤器就准备好啦。

布隆过滤器检查

我们如何用布隆过滤器检查某个URL是否是黑名单中的呢?
同样的方法,把这个值用k个哈希函数算出结果,每一个结果都去bitmap里找有没有存在过,只要有一个结果不存在,那这个URL就肯定不是黑名单了。(因为之前用同样的方法,bitmap变为1的那些位置和现在应该是一样的)

接下来就是比较佛性的事了,既然有一个答案不存在,这个URL就不是黑名单里的,那。。。所有答案都存在,就能确定它在黑名单里吗?

不是的。

因为可能是其它URL算出的答案恰好把本URL的答案全都算出来过。

想到这就不禁要问了:那这个数据结构有啥用?不是坑爹呢?

其实是有用的,他的失误率是很低很低的。

他的原则就是:“宁可错杀三千,不可放过一个”

如何设计空间和哈希函数

 

首先我们应该想到:数组太小的话肯定是不准确的,比如:

就这么小个数组,存了几个URL,十个地方全算出来过,全成1了。

那后面判断的时候就比较坑了,随便来什么URL,随便什么哈希函数,算出的答案全都出现过,这显然不是我们想要的。

所以,我们应该知道,数组过小会影响准确性。

那么我们如何根据数据量来设计数组大小和哈希函数个数呢?

以本题为例:

样本数:100亿

失误率:不超过0.01%,记为p

每个样本大小:64B(这个其实不影响布隆过滤器大小,因为这是和哈希函数有关的,一般的哈希函数都能接受64B的数据,并且输出,bitmap只需记录答案是否出现过即可)

布隆过滤器大小m由以下公式决定:

根据公式算出m=19.19n,向上取整20,所以需要2000亿bit=25GB

哈希函数的个数由以下公式决定:

k=14

布隆过滤器的失误率为:

计算出为0.006%,符合要求,此题可解。

公式分析

 

白名单

过滤器会用错误,对已经发现的错误样本可以建立白名单防止错误。

其他使用场景

  • 网页爬虫对URL的去重,避免爬去相同的URL地址
  • 垃圾邮件过滤,从数十亿个垃圾邮件列表中判断某邮箱是否是杀垃圾邮箱
  • 解决数据库缓存击穿,黑客攻击服务器时,会构建大量不存在于缓存中的key向服务器发起请求,在数据量足够大的时候,频繁的数据库查询会导致挂机。

http://www.ppmy.cn/news/529344.html

相关文章

神奇的利克瑞尔数:196 【大数加法】【回文数】

微信搜索:编程笔记本 微信搜索:编程笔记本 微信搜索:编程笔记本 点击上方蓝字关注我,我们一起学编程 欢迎小伙伴们分享、转载、私信、赞赏 今天要跟小伙伴们分享神奇的数字:196。 在介绍这个神奇的数字之前&#xff0c…

allure简介

allure介绍 allure是一个轻量级,灵活的,支持多语言的测试报告工具 多平台的,奢华的report框架 可以为dev/qa提供详尽的测试报告、测试步骤、log 也可以为管理层提供high level统计报告 java语言开发的,支持pytest,javaScript,PHP等…

布隆过滤器说明

本文参考:布隆过滤器详解__瞳孔的博客-CSDN博客_布隆过滤器 布隆过滤器以及python实现_追光的鲲的博客-CSDN博客_python布隆过滤器 目录 一、概述 二、布隆过滤器原理 2.1 原理 2.2 误判率 2.3 特性 2.4 添加元素步骤 2.5 查询元素步骤 2.6 布隆过滤器的使…

瑞尔齿科×UB Store | RPA破解医疗业务痛点

如今,医疗行业正经历剧变,无论是政策环境还是病患需求,都在快速变化。随着智能自动化技术的深入发展,医疗行业也掀起了应用RPA技术的热潮。 瑞尔齿科 瑞尔齿科,中国高端齿科服务行业领先品牌,成立于1999年&…

瑞尔集团再度冲刺港股:半年亏4.6亿 淡马锡与高瓴是股东

雷递网 雷建平 7月5日报道 口腔诊所——瑞尔集团有限公司日前再次向港交所递交招股书,准备在香港上市。 半年期内亏损4.64亿 瑞尔集团是一家提供高端口腔医疗服务的企业。自1999年成立以来,在过往十年当中,瑞尔集团号称已服务患者超过630万人…

瑞尔集团冲刺港交所上市:2021财年亏损约6亿元,负债规模飙升

日前,口腔企业瑞尔集团有限公司(下称“瑞尔集团”)公开向港交所递交招股书,准备在港交所主板上市,摩根士丹利和瑞银为其联席保荐人。 据了解,瑞尔集团旗下运营两大品牌,分别为瑞尔齿科和瑞泰口…

LTD案例|数字化经营方法论在卫浴行业A股上市公司(瑞尔特)的应用

数字化洪流之下,传统企业纷纷按下“转型”加速键,差异化的商业模式给企业带来新的生机。研究发现,企业数字化转型程度的提高能够显著提升企业经营效率;同时数字化转型对商业模式创新有促进作用,且数字化转型能够通过促…

最小的利克瑞尔数196

最小的利克瑞尔数196 利克瑞尔数:指的是将该数与将该数各数位逆序翻转后形成的新数相加、并将此过程反复迭代后,结果永远无法是一个回文数的自然数。 回文数:一个数正读反读都一样,我们就把它叫做“回文数”。随便选一个数&#x…