布隆过滤器介绍

海量数据去重问题

1、现在使用word文档时,word如何判断某个单词是否拼写正确?
2、网络爬虫程序,怎么让它不去爬相同的URL页面?
3、垃圾邮件(短信)过滤算法如何设计?
4、公安办案时,如何判断某嫌疑人是否在网逃名单中?

布隆过滤器

定义:布隆过滤器是一种概率型数据结构,它的特点是高效的插入和查询,能明确告知某个字符一定不存在或者可能存在
组成:位图(bit数组)+ n个hash函数
在这里插入图片描述
原理:当一个元素加入位图时,通过k个hash函数将这个元素映射到位图的k个点,并把它们置为1;当检索时,在通过k个hash函数运算检测位图的k个点是否都为1;如果有不为1的点,那么认为不存在,如果全部为1,则可能存在(存在误差);

在这里插入图片描述

优点:比传统的查询结构(hash,set,map等)更加高效,占用空间更小
缺点:
1、其返回的结构是概率性的,也就是说结果存在误差,但这个误差是可控的;
2、同时不支持删除操作,在位图中每个槽位只有两种状态(0或者1),一个槽位被设置为1状态,但不明确它被设置了多少次,也就是不知道被多少个哈希函数映射以及被哪个哈希函数映射过。因此不能进行删除操作

实际应用:
布隆过滤器如何使用?
要选择多少个hash函数,要分配多少内存。
如何控制假阳率(及错误判断数据存在的概率)?
解决上面问题,用以下公式:
n:布隆过滤器中元素的个数(如上图的str1与str2就是两个元素);
p:假阳率(容错率),在0~1之间;
m:位图所占空间;
k:hash函数个数;
n=ceil(m/k(-k/(log(1-exp(logp)/k))))
p=pow(1-exp(-k/(m/n)),k)
m=ceil((n*log§)/log(1/pow(2,log(2))))
k=round((m/n)*log(2))
自己固定两个值(一般是n,p),然后算出另外两个值,可以通过以下网址来计算:
链接: https://hur.st/bloomfilter.

应用场景

缓存穿透问题解决
在这里插入图片描述
面试回答顺序:
1.首先解释缓存(redis):redis存在是为了减轻数据库(mysql)的压力,在服务器(server)与数据库之间缓存(redis)用来存储热点数据(经常访问的数据)。
2、介绍缓存穿透是什么:当server访问数据时,首先会从redis中找,如果没有再去数据库中找数据,找没找到都会返回。所以当数据不存在时,所有压力都会压在数据库中,缓存没有分担压力。(数据请求步骤如图中2所示)
3、存在问题:黑客故意利用漏洞,伪造数据攻击或者内部业务bug造成大量重复请求不存在的数据,导致数据库压力过大而崩溃。
4、解决方案如图中3所示

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值