springboot集成guava布隆过滤器

news2024/9/23 11:18:48

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万个数据的误判率
    @PostConstruct
    public 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.布隆过滤器的数据流向
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2090643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DexclassLoader读取dex在Android14上遇到问题

报错如下&#xff1a; 在Android 14&#xff08;API 级别 34&#xff09;及以后版本中&#xff0c;DexClassLoader 被进一步限制&#xff0c;只能用于加载只读文件中的代码。这意味着你不能再使用 DexClassLoader 来加载从应用的内部存储空间中读取的文件。 我想通过JNI来修改…

Elasticsearch 8.13.4 LocalDateTime类型转换问题

框架背景 springboot 3.3.1elasticseach8.13.4spring-data-elasticsearch5.3.1(其实只要用了springboot3.3.1 上下两个的版本都在里面绑死了) 问题描述 使用spring-data-elasticsearch操作es&#xff0c;当字段增加映射注解,其实如果是日期类型&#xff0c;你不加默认也给你…

计算机网络概述(协议层次与服务模型)

目录 1.协议层次 2.服务模型 1.协议层次 层次化方式实现复杂网络功能&#xff1a; 将网络复杂的功能分成明确的层次&#xff0c;每一层实现了其中一个或一组功能&#xff0c;功能中有其上层可以使用的功能&#xff1a;服务本层协议实体相互交互执行本层的协议动作&#xff0…

C++(Qt)-GIS开发-QGraphicsView显示在线瓦片地图

C(Qt)-GIS开发-QGraphicsView显示在线瓦片地图 文章目录 C(Qt)-GIS开发-QGraphicsView显示在线瓦片地图1、概述2、实现效果3、主要代码4、源码地址 更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;GIS开发 &#x1f448; 1、概述 支持加载显示在线瓦片…

TD学习笔记————中级教程总结(NEW)

目录 Instance功能讲解 问题&#xff1a; 报错All ops must generate the same number of instances (have the same length Replicator功能讲解 问题&#xff1a; 视频分辨率过大 Cannot find function named:onValueChange Instance功能讲解 数据通道的长度要一致 N…

redroid搭建云手机学习笔记(一)

参考链接 通过Redroid搭建自己的云手机 docker安装 docker官网目前打不开了&#xff0c;通过官网安装的方式无法实现&#xff0c;这里需要借助镜像网站来实现docker的安装 参考链接&#xff1a;https://developer.aliyun.com/mirror/docker-ce # step 1: 安装必要的一些系统…

Dockerfile 实例

删除不需要的镜像&#xff1a;示例&#xff1a;通配符可用 [rootdocker ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE <none> <none> 580260c93725 2 hours ago 4.27MB <none&…

基于python的足球比赛数据及可视化 python 足球预测

Python 足球可视化分析是使用 Python 编程语言来进行足球比赛数据分析&#xff0c;并将结果呈现为可视化图形的过程。Python 作为一种高效灵活的编程语言&#xff0c;可以用于数据处理和分析&#xff0c;同时也有丰富的可视化库。 足球比赛数据可以从各种数据来源获取&#xf…

使用 AI进行绘画初体验

大家好啊&#xff0c;我是董董灿。 AI 绘画的效果是真的不错&#xff0c;最近在查找AI相关技术文章时&#xff0c;总是会时不时的发现一些好玩的 AI 应用&#xff0c;而且大多数都是免费的。 今天就给大家介绍如何使用 MidJourney 来完成 AI 绘画的网站。 MidJourney 本身是…

解决 Linux 上的 SSH 登录缓慢问题

如果您必须等待很长时间才能看到 SSH 密码提示&#xff0c;则可能存在多种问题。要解决 SSH 登录缓慢的根本原因&#xff0c;您可以运行带有 -vvv 选项的 ssh 命令&#xff0c;该命令将向您显示 SSH 登录期间幕后发生的情况。 $ ssh -vvv user<ssh-server>以下是 SSH 登…

Windows bat脚本学习六(十六进制与十进制互转)

一、十六进制转十进制 十六进制数转十进制数相对比较简单&#xff0c;可以直接通过0x来实现。 见如下代码&#xff1a; echo off chcp 65001set taaset /a hex0x%t% echo data%hex%pause 结果&#xff1a; 二、十进制转十六进制 这个转化比较麻烦&#xff0c;没有简便的方式转…

前端面试题每日一练,测测你对JavaScript对象继承和 Object.entries() 的理解

今天的挑战题目涉及到JavaScript中的原型链 (prototype chain) 和 Object.entries() 方法的使用。我们将通过一个对象继承的例子来探索如何使用 Object.entries() 获取对象的自身可枚举属性&#xff0c;并进行处理。让我们一起分析这段代码&#xff0c;看看它会输出什么以及为什…

微服务CI/CD实践(四)Jenkins部署及环境配置

微服务CI/CD实践系列&#xff1a; 微服务CI/CD实践&#xff08;一&#xff09;环境准备及虚拟机创建 微服务CI/CD实践&#xff08;二&#xff09;服务器先决准备 微服务CI/CD实践&#xff08;三&#xff09;gitlab部署及nexus3部署 微服务CI/CD实践&#xff08;四&#xff09…

ClickHouse的安装教程

ClickHouse的安装教程 文章目录 ClickHouse的安装教程写在前面准备工作关闭防火墙CentOS 取消打开文件数限制安装依赖CentOS 取消 SELINUX 单机安装在 **node01** 的/opt/software 下创建 clickhouse 目录将下载的文件上传到 node01 的 /opt/software/clickhouse 目录下将安装文…

MFC工控项目实例之九选择下拉菜单主界面文本框显示菜单名

承接专栏《MFC工控项目实例之八选择下拉菜单添加打钩图标》 1、在主界面添加一个组合框和一个静态文本框。 2、在SEAL_PRESSUREDlg.cpp文件中添加代码 BOOL CSEAL_PRESSUREDlg::OnInitDialog() {CDialog::OnInitDialog(); ... GetDlgItem(IDC_STATIC_TYPNAME)->SetFont(&a…

通用大模型应用研究重点六:AgentOS

智能体&#xff1a;一个能够自主感知环境、做出决策并执行行动的系统。具备规划思考能力、记忆能力以及使用工具函数的能力&#xff0c;能自主完成给定任务的计算机程序。 智能体的关键组成部分包括&#xff1a; 规划&#xff08;Planning&#xff09;&#xff1a;智能体能够将…

(二)、软硬件全开源智能手表,可全面高精度采集生命体征数据,进行健康检测。(HealthyPi Move)

HealthyPi Move是一款开放式硬件设备&#xff0c;可让您高精度地跟踪所有生命体征。它不仅仅是另一款带有心率监测器的智能手表&#xff0c;它还是手腕上的完整生命体征监测和记录设备&#xff0c;可以测量心电图(ECG)、光电容积脉搏波 (PPG)、SpO₂、血压(基于手指)、EDA/GSR、…

Clobotics 计算机视觉场景存储实践:多云架构、 POSIX 全兼容、低运维的统一存储

Clobotics 是一家将计算机视觉和机器学习技术应用于风电以及零售行业的企业。在风电行业&#xff0c;Clobotics 利用无人机对风力发电机叶片进行检查&#xff0c;显著降低了对人工作业的依赖。在零售领域&#xff0c;公司通过分析捕获的包装商品图像来提供基于实时数据的洞察&a…

Java-数据结构-ArrayLis与线性表 (๑╹◡╹)ノ“““

目录&#xff1a; 一、List的简单的介绍&#xff1a; 二、线性表&#xff1a; 三、顺序表&#xff1a; 1、基本代码&#xff1a; 2、操作代码&#xff1a; display()方法&#xff1a; add(int data)方法&#xff1a; add(int pos,int data)方法&#xff1a; contains(i…

大模型企业应用落地系列》基于大模型的对话式推荐系统》对话推荐系统技术架构

注&#xff1a;此文章内容均节选自充电了么创始人&#xff0c;CEO兼CTO陈敬雷老师的新书《自然语言处理原理与实战》&#xff08;人工智能科学与技术丛书&#xff09;【陈敬雷编著】【清华大学出版社】 文章目录 大模型企业应用落地系列全貌基于大模型的对话式推荐系统》技术架…