布隆过滤器Bloom -> Redisson系列-3

news2024/11/13 16:05:44

接上文:RBucket对象桶 -> Redisson系列-1(让redis操作更优雅)_子书少卿的博客-CSDN博客       

 本质上布隆过滤器是一种数据结构,是一种比较巧妙的概率性数据结构,特点是可以高效的插入和查询,可以用来判断:“某个值一定不存在或可能存在”。

        优点:相比于传统的list、set、map等数据结构,更高效、占用空间更小(不需要存储数据本身,只需要存储数据对应hash比特位);

        缺点:返回的结果是概率性的,而不是确切的;不支持删除元素

             

HashMap 的问题
        讲述布隆过滤器的原理之前,我们先思考一下,通常你判断某个元素是否存在用的是什么? 应该蛮多人回答 HashMap 吧,确实可以将值映射到 HashMap 的 Key,然后可以在 0(1)的时间复杂度内返回结果,效率奇高。但是 HashMap 的实现也有缺点,例如存储容量占比高,考虑到负载因子的存在,通常空间是不能被用满的,而一旦你的值很多例如上亿的时候,那 HashMap 占据的内存大小就变得很可观了。
        还比如说你的数据集存储在远程服务器上,本地服务接受输入,而数据集非常大不可能一次性读进内存构建 HashMap 的时候,也会存在问题。

布隆过滤器数据结构
布隆过滤器是一个 bit 向量或者说 bit 数组

详解布隆过滤器的原理、使用场景和注意事项
如果我们要映射一个值到布隆过滤器中,我们需要使用多个不同的哈希函数生成多个哈希值,并对每个生成的哈希值指向的 bit 位置 1,例如针对值和三个不同的哈希函数分别生成了哈"baidu"希值 14、7,则上图转变为:

 测试代码:

@Service
public class BloomService {

    private static final String BLOOM_KEY = "bloom:key:";

    @Resource
    private RedissonClient redisson;

    /**
     * 测试布隆过滤器
     * @param id
     * @return
     */
    public Integer test(Integer id){

        RBloomFilter<Integer> bloomFilter = redisson.getBloomFilter(BLOOM_KEY);
        // 初始化布隆过滤器,第一个参数:预计存放的数据量(实际存放过程中如果不够,会自动扩充,最好初始化够);第二个参:误差
        bloomFilter.tryInit(1000000L,0.01);
        if(bloomFilter.contains(id)){
            System.out.println(id+"存在");
        }else {
            System.out.println(id+"bu存在");
            // 入布隆过滤器
            bloomFilter.add(id);
        }
        return 1;
    }

}

问题:在大数据集合场景下,如果使用该场景,怎样保证返回数据的准确性呢,如果该数据类型不能保证数据的准确定,用在哪种实际的场景下比较合适呢?

        由于可能出现哈希碰撞,不同元素计算的哈希值有可能一样,导致一个不存在的元素有可能对应的比特位为1,这就是所谓“假阳性”(false positive)。相对地,“假阴性”(false negative)在BF中是绝不会出现的。因此,Bloom Filter不适合那些“零错误”的应用场合。而在能容忍低错误率的应用场合下,Bloom Filter通过极少的错误换取了存储空间的极大节省。
 

 参考自:

https://edu.csdn.net/learn/27749/375603?spm=3001.4143        

布隆过滤器Bloom Filter简介_多啦@不懂a梦的博客-CSDN博客

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

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

相关文章

浅谈一下虚拟机栈

虚拟机栈 概述 由于跨平台性的设计&#xff0c;Java的指令都是根据栈来设计的。不同平台CPU架构不同&#xff0c;所以不能设计为基于寄存器的。 优点是跨平台&#xff0c;指令集小&#xff0c;编译器容易实现&#xff0c;缺点是性能下降&#xff0c;实现同样的功能需要更多的…

SpringBoot学习笔记(二)配置文件

1、配置文件SpringBoot使用一个全局的配置文件&#xff0c;配置文件名是固定的&#xff1b;application.propertiesapplication.yml配置文件的作用&#xff1a;修改SpringBoot自动配置的默认值&#xff1b;SpringBoot在底层都给我们自动配置好&#xff1b;YAML&#xff1a;以数…

MySQL常用函数整理

MySQL常用函数整理sql函数分类一、流程控制1、判断值为null或空字符串2、IF函数3、IFNULL函数4、CASE函数(1) 相当于switch case的作用(2) 相当于if elseif的作用5、COALESCE函数二、字符串类&#xff08;GBT答案&#xff09;1、用于select、insert等子句中2、用于where子句中其…

来吧!接受Kotlin 协程--线程池的7个灵魂拷问

前言 之前有分析过协程里的线程池的原理&#xff1a;Kotlin 协程之线程池探索之旅(与Java线程池PK)&#xff0c;当时偏重于整体原理&#xff0c;对于细节之处并没有过多的着墨&#xff0c;后来在实际的使用过程中遇到了些问题&#xff0c;也引发了一些思考&#xff0c;故记录之…

从零开始学习c语言|21、动态内存管理

一、malloc函数 1、什么是malloc函数 malloc是memery(内存)和allocate(分配)的缩写&#xff0c;顾名思义&#xff0c;malloc函数为动态分配内存的意思 2、malloc函数语句 int *p(int *)malloc(sizeof(int))malloc函数的形参为申请的内存空间大小&#xff0c;上述申请了一个i…

“巨亏成名”的魔鬼交易员,你知道几个?

谁说在期货市场上只有赚大钱才能出名&#xff1f;殊不知还有这样一群特殊的交易员靠着巨额亏损而“一战成名”&#xff0c;亏得是老东家元气大伤&#xff0c;外号“魔鬼交易员”——“不亏不成魔”&#xff01;接下来火象就给大家盘点几位代表性魔鬼交易员&#xff0c;看看他们…

论文阅读 | 轻量级网络 MobileNets/Xception/ShuffleNet

前言&#xff1a;重温经典&#xff0c;整理了一些几年前做轻量级网络的论文&#xff0c;其中的深度可分离卷积和通道shuffle的思想至今也在沿用 &#xff08;这几天都没看论文然而实验还是没跑出来&#xff0c;不卷会议了&#xff0c;开始摆烂…&#xff09; 论文地址&#xff…

JavaScript Math 算数对象

文章目录JavaScript Math 算数对象Math 对象Math 对象属性Math 对象方法算数值算数方法JavaScript Math 算数对象 Math&#xff08;算数&#xff09;对象的作用是&#xff1a;执行常见的算数任务。 Math 对象 Math&#xff08;算数&#xff09;对象的作用是&#xff1a;执行普…

规划数据指标体系方法(上)——OSM 模型

之前我已经有写过文章讲了数据指标体系的搭建思路&#xff0c;但有同学还是不太清楚要从何入手&#xff0c;今天我就来跟大家讲一讲搭建数据指标体系之前第一步要先做的事情——规划数据指标体系。 规划数据指标体系&#xff0c;在业内有三种比较常见的方法&#xff0c;分别是&…

MySql索引失效的情况

文章目录1、对索引字段进行了运算或者使用了函数2、查询的数据类型与字段类型不一致3、违反了索引的最左匹配原则4、全表扫描更快5、where语句中索引列使用了负向查询&#xff0c;可能会导致索引失效6、索引字段可以为null&#xff0c;使用is null或is not null时&#xff0c;可…

2022年MathorCup数学建模C题自动泊车问题解题全过程文档加程序

2022年第十二届MathorCup高校数学建模 C题 自动泊车问题 原题再现 自动泊车是自动驾驶技术中落地最多的场景之一&#xff0c;自动泊车指在停车场内实现汽车的自动泊车入位过程&#xff0c;在停车空间有限的大城市&#xff0c;是一个比较实用的功能&#xff0c;减少了驾驶员将…

又一新闻,Meta研发了超越chatGPT的新平台LLAMA

一、Meta 全新大语言模型 LLaMA 正通过种子公开发放2 月 24 日&#xff0c;Meta 公司发布了新的大模型系列 —— LLaMA&#xff08;Large Language Model Meta AI&#xff09;。Meta 宣称&#xff0c;LLaMA 规模仅为竞争对手 ChatGPT 的“十分之一”&#xff0c;但性能却优于 O…

Win10安装MySQL5.7.22 解压缩版(手动配置)方法

1.下载地址&#xff1a;https://dev.mysql.com/downloads/mysql/5.7.html#downloads 直接点击下载项 下载后&#xff1a; 2.可以把解压的内容随便放到一个目录&#xff0c;我的是如下目录&#xff08;放到C盘的话&#xff0c;可能在修改ini文件时涉及权限问 题&#xff0c;之后…

第13章 二叉树模型及其扩展

这学期会时不时更新一下伊曼纽尔德曼&#xff08;Emanuel Derman&#xff09; 教授与迈克尔B.米勒&#xff08;Michael B. Miller&#xff09;的《The Volatility Smile》这本书&#xff0c;本意是协助导师课程需要&#xff0c;发在这里有意的朋友们可以学习一下&#xff0c;思…

lattice

Chinese NER Using Lattice LSTM 阅读笔记_Ono_online的博客-CSDN博客 【NER-1】-2018 ACL Lattice-LSTM_latticelstm代码_应有光的博客-CSDN博客 lattice model(结合上面两个博客来看) 18分钟彻底搞懂LSTM网络原理,NLP,深度学习,自然语言处理_哔哩哔哩_bilibili 如何从RNN起…

无代码时代洪流,高灵活,所见即所得

发布的《2022年中国低代码/零代码行业研究报告》表明&#xff0c;在最近的一项调查中&#xff0c;超过90&#xff05;的企业用户都希望能够使自己的产品开发更加灵活和有效&#xff0c;并且希望能够通过减少开发费用来优化其投入产出比。从众多研究机构的正面评价来看&#xff…

react-swipeable-views轮播图实现下方的切换点控制组件

本文是react通过react-swipeable-views创建公共轮播图组件的续文 上一文 我们创建了这样的一个轮播图组件 但我们已经看到的轮播图 下面都会有小点 展示当前所在的位置 但react-swipeable-views 并没有直接提供 我们需要自己去编写这个组件 我们在components下的 rotationCh…

如何用R语言在生物群落生态学中的数据统计分析?

R 语言作的开源、自由、免费等特点使其广泛应用于生物群落数据统计分析。生物群落数据多样而复杂&#xff0c;涉及众多统计分析方法。本课程以生物群落数据分析中的最常用的统计方法回归和混合效应模型、多元统计分析技术及结构方程等数量分析方法为主线&#xff0c;通过多个来…

文件变成chk如何恢复正常

许多人不知道chk文件是什么&#xff1f;其实它是用户在使用“磁盘碎片整理程序”整理硬盘后所产生的“丢失簇的恢复文件”&#xff0c;而在u盘、内存卡等移动设备读取数据过程中&#xff0c;由于断电或强制拔出也容易产生大量的chk文件。那么文件变成chk如何恢复正常呢&#xf…

A/B测试实践全总结

一:基本概念网站设计中,我们经常会面临多个设计方案的选择,比如某个按钮是用红色还是用蓝色,是放左边还是放右边。传统的解决方法通常是集体讨论表决,或者由某位专家或领导来拍板。虽然传统解决办法多数情况下也是有效的,但A/B 测试(A/B Testing)可能是解决这类问题的一个更好的…