分享好友 最新动态首页 最新动态分类 切换频道
移动网站建设的前景/珠海网站建设优化
2024-12-28 12:18

作者:CodeBear的园子 www.cnblogs.com/CodeBear/p/10911177.html

移动网站建设的前景/珠海网站建设优化

本文是站在小白的角度去讨论布隆过滤器,如果你是科班出身,或者比较聪明,又或者真正想完全搞懂布隆过滤器的可以移步。

不知道从什么时候开始,本来默默无闻的布隆过滤器一下子名声大燥,仿佛身在互联网,做着开发的,无人不知,无人不晓,哪怕对技术不是很关心的小伙伴也听过它的名号。

我也花了不少时间去研究布隆过滤器,看了不少博客,无奈不是科班出身,又没有那么聪明的头脑,又比较懒...经过“放弃,拿起,放弃,拿起”的无限轮回,应该算是了解了布隆过滤器的核心思想,所以想给大家分享下。

布隆过滤器的应用

我们先来看下布隆过滤器的应用场景,让大家知道神奇的布隆过滤器到底能做什么。

缓存穿透

我们经常会把一部分数据放在Redis等缓存,比如产品详情。这样有查询请求进来,我们可以根据产品Id直接去缓存中取数据,而不用读取数据库,这是提升性能最简单,最普遍,也是最有效的做法。面试常问,缓存三大问题及解决方案

一般的查询请求流程是这样的:先查缓存,有缓存的话直接返回,如果缓存中没有,再去数据库查询,然后再把数据库取出来的数据放入缓存,一切看起来很美好。

但是如果现在有大量请求进来,而且都在请求一个不存在的产品Id,会发生什么?既然产品Id都不存在,那么肯定没有缓存,没有缓存,那么大量的请求都怼到数据库,数据库的压力一下子就上来了,还有可能把数据库打死。

虽然有很多办法都可以解决这问题,但是我们的主角是“布隆过滤器”,没错,“布隆过滤器”就可以解决(缓解)缓存穿透问题。至于为什么说是“缓解”,看下去你就明白了。

大量数据,判断给定的是否在其中

现在有大量的数据,而这些数据的大小已经远远超出了服务器的内存,现在再给你一个数据,如何判断给你的数据在不在其中。

如果服务器的内存足够大,那么用HashMap是一个不错的解决方案,理论上的时间复杂度可以达到O(1),但是现在数据的大小已经远远超出了服务器的内存,所以无法使用HashMap,这个时候就可以使用“布隆过滤器”来解决这个问题。但是还是同样的,会有一定的“误判率”。

什么是布隆过滤器

布隆过滤器是一个叫“布隆”的人提出的,它本身是一个很长的二进制向量,既然是二进制的向量,那么显而易见的,存放的不是0,就是1。

现在需要添加一个数据

我们通过某种计算方式,比如Hash1,计算出了Hash1(数据)=5,我们就把下标为5的格子改成1,就像下面这样

这样,刚才添加的数据就占据了布隆过滤器“5”,“9”,“2”三个格子。

可以看出,仅仅从布隆过滤器本身而言,根本没有存放完整的数据,只是运用一系列随机映射函数计算出位置,然后填充二进制向量。

这有什么用呢?比如现在再给你一个数据,你要判断这个数据是否重复,你怎么做

你只需利用上面的三种固定的计算方式,计算出这个数据占据哪些格子,然后看看这些格子里面放置的是否都是1,如果有一个格子不为1,那么就代表这个数字不在其中。

这很好理解吧,比如现在又给你了刚才你添加进去的数据,你通过三种固定的计算方式,算出的结果肯定和上面的是一模一样的,也是占据了布隆过滤器“5”,“9”,“2”三个格子。

但是有一个问题需要注意,如果这些格子里面放置的都是1,不一定代表给定的数据一定重复,也许其他数据经过三种固定的计算方式算出来的结果也是相同的。这也很好理解吧,比如我们需要判断对象是否相等,是不可以仅仅判断他们的哈希值是否相等的。

也就是说布隆过滤器只能判断数据是否一定不存在,而无法判断数据是否一定存在。

按理来说,介绍完了新增、查询的流程,就要介绍删除的流程了,但是很遗憾的是布隆过滤器是很难做到删除数据的,为什么?你想想,比如你要删除刚才给你的数据,你把“5”,“9”,“2”三个格子都改成了0,但是可能其他的数据也映射到了“5”,“9”,“2”三个格子啊,这不就乱套了吗

相信经过我这么一介绍,大家对布隆过滤器应该有一个浅显的认识了,至少你应该清楚布隆过滤器的优缺点了

  • 优点:由于存放的不是完整的数据,所以占用的内存很少,而且新增,查询速度够快

  • 缺点:随着数据的增加,误判率随之增加;无法做到删除数据;只能判断数据是否一定不存在,而无法判断数据是否一定存在。

可以看到,布隆过滤器的优点和缺点一样明显。

在上文中,我举的例子二进制向量长度为16,由三个随机映射函数计算位置,在实际开发中,如果你要添加大量的数据,仅仅16位是远远不够的,为了让误判率降低,我们还可以用更多的随机映射函数、更长的二进制向量去计算位置。

guava实现布隆过滤器

现在相信你对布隆过滤器应该有一个比较感性的认识了,布隆过滤器核心思想其实并不难,难的在于如何设计随机映射函数,到底映射几次,二进制向量的长度设置为多少比较好,这可能就不是一般的开发可以驾驭的了。

好在Google大佬给我们提供了开箱即用的组件,来帮助我们实现布隆过滤器,现在就让我们看看怎么Google大佬送给我们的“礼物”吧。

首先在pom引入“礼物”


然后就可以测试啦


代码简单分析

我们定义了一个布隆过滤器,有两个重要的参数,分别是 我们预计要插入多少数据,我们所期望的误判率,误判率不能为0。

我向布隆过滤器插入了0-1000000,然后用1000000-2000000来测试误判率。

运行结果


现在总共有100万数据是不存在的,误判了10314次,我们计算下误判率

和我们定义的期望误判率0.01相差无几。

redis实现布隆过滤器

上面使用guava实现布隆过滤器是把数据放在本地内存中,无法实现布隆过滤器的共享,我们还可以把数据放在redis中,用 redis来实现布隆过滤器,我们要使用的数据结构是bitmap,你可能会有疑问,redis支持五种数据结构:String,List,Hash,Set,ZSet,没有bitmap呀。没错,实际上bitmap的本质还是String。

可能有小伙伴会说,纳尼,布隆过滤器还没介绍完,怎么又出来一个bitmap,没事,你可以把bitmap就理解为一个二进制向量。

要用redis来实现布隆过滤器,我们需要自己设计映射函数,自己度量二进制向量的长度,这对我来说,无疑是一个不可能完成的任务,只能借助搜索引擎,下面直接放出代码把。


运行结果


本篇博客到这里就结束了,谢谢大家。写作不易,坚持更难,如大家喜欢就帮忙推送给其他人

关注公众号Java技术栈回复"面试"获取我整理的2020最全面试题及答案。

推荐去我的博客

1.Java JVM、集合、多线程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架构、阿里巴巴等大厂最新面试题

觉得不错,别忘了点赞+转发哦

最新文章
实时翻译技术的语言奇迹,展望2024年话筒前的未来
随着科技的飞速发展,语言不再是沟通的障碍,站在2023年的门槛上,我们不禁遐想,到了2024年,当话语从话筒中传出时,实时翻译技术能否实现语言的即时转化,为我们打开全新的沟通世界?本文将回顾相关背景、重要事件、影响及其在现代社会中
适合外贸建站的wordpress模板
一个好的模板是一个wordpress企业网站的核心和灵魂,强大的wordpress内核足够任何一个中小企业的建站需求。程序方面完全不需要考虑,wordpress外贸建站需要考虑的就是选择一款适合自己的wordpress外贸网站模板。 下面整理了一些非常不错的w
武汉排名靠前的抖音电商运营培训机构倾情推荐一览2024-12-10 13:22:32 访问:32次
产品优势:1.美迪电商教育办学10年来,一直肩负“让电商更简单”的企业使命,深入研究电商从业者的需求,在课程产品和教学方式上适时革新,以达成让“电商人少走弯路”及为“中小企业培养实战型电商人才”的目的。2.美迪电商教育产品涵盖国
旧手机内置存储不足?root后用link2SD强制搬家
追加修改(2020-07-08 12:46:31):充电时用了一次支付宝里的余利宝转账,收了一条通知短信后旧的emmc芯片就烧掉了。无法启动,开机只能显示Logo,要关掉必须拆电池。无法进入fastloader状态所以也不能刷机修复了。真是太匪夷所思了。可能和一
哈尔滨医科大学排名怎么样?,哈尔滨医科大学全国大学排名
摘要:哈尔滨医科大学在中国医学教育界享有一定声誉,其综合排名和专业排名在国内处于较高水平。本文将探讨哈尔滨医科大学的综合排名、学科专业排名以及影响排名的因素。哈尔滨医科大学在国内综合排名中常年稳定在前列,具有较高的学术声誉
谷歌推广开户费用详解
在数字化营销的大潮中,谷歌推广作为全球知名的网络广告平台,为众多企业提供了触及广泛受众的机会。然而,对于初次尝试谷歌推广的广告主来说,了解开户模式与费用是开展有效广告活动的第一步。小五讲广告今天为你详细介绍下谷歌推广的开户
SEM推广优化,精准策略解锁广告效果提升之道
SEM推广优化,需聚焦精准策略。明确目标受众,进行关键词优化;优化广告创意,提高点击率;分析数据,调整投放策略。持续优化,提升广告效果,实现高效。随着互联网的快速发展,搜索引擎营销(SEM)已经成为企业推广产品和服务的重要手段,
默默漫画台
默默漫画台是款好用的漫画阅读器,快来选择不同的漫画内容进行观看体验吧,多种分类满足用户的不同需求,一键搜索你喜爱的资源来进行观看吧,免费的内容千万不要错过,快来加入我们吧!默默漫画台是一款可以自由观看各种漫画的软件,其中的
如何创建云主机,一步步流程解析
1. 登录云平台用户需要首先登录到云平台的管理界面或使用命令行工具进行身份验证,这一步通常涉及到输入用户名和密码,以及可能的多因素认证。 2. 选择项目在云平台上,用户需要选择一个已经存在的项目,或者创建一个新的项目来容纳即将创
小红书开通珠宝类目步骤有哪些?怎么申请操作?新技术、超好用
随着社交媒体的不断发展,小红书已经成为了一个备受欢迎的购物分享平台。2023年,小红书在珠宝类目的开通上也迎来了新的机会。如果你是一家珠宝品牌或商家,想要在这个新渠道中获取更多的曝光与销售,这篇文章将为你详细介绍小红书开通珠宝
相关文章
推荐文章
发表评论
0评