当前位置: 首页 > news >正文

springboot集成guava布隆过滤器

1.创建springboot项目,引入maven依赖

		<dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>23.0</version></dependency>

2.创建guava布隆过滤器

@Component
public class GuavaFilter {//初始化一个常量public static final int _1W = 10000;//初始化guava过滤器的容器容量public static final int SIZE = 100 * _1W;//误报率public static double  fpp = 0.03;  //误报率//创建一个guava过滤器public static BloomFilter bloomFilter = BloomFilter.create(Funnels.integerFunnel(),SIZE,fpp);//向guava过滤器中添加100万个数据//验证不在这100万数据之外的10万个数据的误判率@PostConstructpublic void guavaFilter(){for(int i=1;i<=SIZE;i++){bloomFilter.put(i);}List<Integer> list = new ArrayList<>();for(int i = SIZE+1;i<SIZE+10*_1W;i++){if(bloomFilter.mightContain(i)){System.out.println(i + "被误识别了");list.add(i);}}System.out.println("误识别个数为:" + list.size());}
}

3.启动程序,观察结果

误识别的个数为3033个,误识别率3033/1000000≈0.03
在这里插入图片描述

4.对于误判率的思考

代码里配置的误判率为0.03,这里就会有小伙伴问,误判率(hash冲突概率)不应该越低越好吗,那我配置成0.01或者0.00000000001可以吗?
我们debug一下guava布隆过滤器的源码,点进去这个creat方法,断点打到如下图所示的位置
在这里插入图片描述
在这里插入图片描述
我们先看误报率配置0.03的情况
想要误报率控制在0.03,比特数组的位数需要达到7298440并且使用5种hash算法在这里插入图片描述
再看误报率配置0.01的情况
想要误报率控制在0.01,比特数组的位数需要达到9585058并且使用7种hash算法在这里插入图片描述

再看误报率配置0.00000000001的情况
想要误报率控制在0.00000000001,比特数组的位数需要达到52717821并且使用37种hash算法
在这里插入图片描述
当我们把误报率配置成0.00000000001,重新启动下程序
在这里插入图片描述

5.布隆过滤器的数据流向
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 『功能项目』坐骑UI搭建及脚本控制显/隐【19】
  • 【MeterSphere】vnc连接不上selenium-chrome容器
  • zdppy 自定义跨域配置
  • 两个月冲刺软考——判断是否为阻塞节点,是否可化简,化简顺序是什么?存储器的分层结构;可屏蔽中断与不可屏蔽中断
  • github源码指引:共享内存、数据结构与算法:平衡二叉树set
  • PHP与Nginx配置优化:深入探讨Socket通信
  • ffmpeg音视频开发从入门到精通——ffmpeg实现音频抽取
  • 【HuggingFace Transformers】OpenAIGPTModel的核心——Block源码解析
  • Unity数据持久化 之 向文件流读写(详细Plus版)
  • stdin getc() getchar()
  • js逆向--绕过debugger(一)
  • 欢迎大家评论讨论set_input_transition对path delay的影响
  • HarmonyOS开发实战( Beta5版)Stack组件实现滚动吸顶效果实现案例
  • 前端登录鉴权——以若依Ruoyi前后端分离项目为例解读
  • 单点登录SSO
  • C++类的相互关联
  • JavaScript新鲜事·第5期
  • Mocha测试初探
  • Vue.js源码(2):初探List Rendering
  • vue-cli在webpack的配置文件探究
  • vue-loader 源码解析系列之 selector
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 大型网站性能监测、分析与优化常见问题QA
  • 后端_MYSQL
  • 两列自适应布局方案整理
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何编写一个可升级的智能合约
  • 删除表内多余的重复数据
  • 怎么把视频里的音乐提取出来
  • 追踪解析 FutureTask 源码
  • 阿里云ACE认证之理解CDN技术
  • 通过调用文摘列表API获取文摘
  • 正则表达式-基础知识Review
  • ​补​充​经​纬​恒​润​一​面​
  • #AngularJS#$sce.trustAsResourceUrl
  • #Datawhale AI夏令营第4期#AIGC方向 文生图 Task2
  • #include到底该写在哪
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (补)B+树一些思想
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (计算机网络)物理层
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (三十五)大数据实战——Superset可视化平台搭建
  • (十八)SpringBoot之发送QQ邮件
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (一)使用Mybatis实现在student数据库中插入一个学生信息
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (转)h264中avc和flv数据的解析
  • (转)http协议
  • ****Linux下Mysql的安装和配置
  • .Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置