06_布隆过滤器BloomFilter_副本

06——布隆过滤器BloomFilter

一、是什么

由一个初始值都为零的bit数组多个哈希函数构成,用来快速判断集合中是否存在某个元素

image-20230313220219220

设计思想:

1. 目的:减少内存占用
1. 方式:不保存数据信息,只是在内存中做一个是否存在的标记flag
1. 本质:判断具体数据是否在一个大的集合中

备注:布隆过滤器时一种类似set的数据结构,只是统计结果在巨量数据下有 小瑕疵,不够完美

image-20230313221000238

二、能干嘛

  1. 高效地插入和查询,占用空间少,返回的结果是不确定性+不够完美(哈希冲突)。
  2. 重点:一个元素如果判断结果:存在时,元素不一定存在,但是判断结果不存在时,则一定不存在。
  3. 布隆过滤器可以添加元素,但是不能删除元素,由于涉及hascode判断依据,删除元素会导致误判率增加。
  4. 总结:
    1. 有:可能有
    2. 无:一定无

三、原理

  1. 布隆过滤器实现原理和数据结构

    image-20230313221926014

    添加key与查询key

    image-20230313222003879

    hash冲突导致数据不准确

    image-20230313222316910

    查询某个变量的时候,只需要看看这些点是不是都是1,就可以大概率知道集合中是否存在了。

    如果这些点,有任何一个为零,则查询的key一定不存在。

    如果全部是1,则被查询的key很大概率存在。(因为使用的hash散列函数,会有碰撞冲突)

    正是基于布隆过滤器的快速检测特性,我们可以在把数据写入数据库时,使用布隆过滤器做个标记。当缓存缺失后,应用查询数据库时,可以通过查询布隆过滤器快速判断数据是否存在。如果不存在,就不用再去数据库中查询了。这样一来,即使发生缓存穿透了,大量请求只会查询Rdis和布隆过滤器,而不会积压到数据库,也就不会影响数据库的正常运行。布隆过滤器可以使用Rdis实现,本身就能承担较大的并发访问压边。

    hash函数冲突

    image-20230313222823506

    image-20230313222909547

  2. 使用步骤

    1. 初始化bitmap

    2. 添加元素占坑位

      image-20230313223405750

    3. 判断元素是否存在

      image-20230313223542751

  3. 布隆过滤器误判率,为什么不要删除

    布隆过滤器的误判是指多个输入经过哈希之后在相同的t位置1了,这样就无法判断究竞是哪个输入产生的,因此误判的根源在于相同的bt位被多次映射且置1。

    这种情况也造成了布隆过滤器的删除问题,因为布隆过滤器的每一个bt并不是独占的,很有可能多个元素共享了某一位。

    如果我们直接删除这一位的话,会影响其他的元素

    特性:布隆过滤器可以添加元素,但是不能删除元素。因为删掉元素会导致误判率增加。

  4. 总结

    1. 有:很可能有
    2. 无:一定无

    使用时最好不要让实际元素数量远大于初始化数量,一次给够,避免扩容

    当实际元素数量超过初始化数量时,应该对布隆过滤器进行重建,重新分配一个size更大的过滤器,再将所有的历史元素批量add。

四、使用场景

  1. 解决缓存穿透的问题,和redis结合bitmap使用

    image-20230313224636964

    image-20230313224736356

  2. 黑名单校验,识别垃圾邮件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-t4q2Ghs9-1692427437178)(/Users/coder/Library/Application Support/typora-user-images/image-20230313224905294.png)]

  3. 安全连接网址,全球数10亿的网址判断

五、尝试手写布隆过滤器

  1. 整体架构

    image-20230313225140967

  2. 步骤设计

    redis的setbit和getbit

    image-20230313225324193

    setBit的构建过程

    1. 初始化白名单
    2. 计算元素的hash值
    3. 通过hash值计算对应二进制数组的坑位
    4. 将对应坑位的值修改为1,表示存在

    getBit查询是否存在

    1. 计算元素的hash值
    2. 通过hash值计算对应二进制数组的坑位
    3. 查看数组中对应位置上的值
  3. 编码实现

  4. 案例

六、布隆过滤器优缺点

  1. 优点:高效地插入和查询,内存占用bit空间少
  2. 缺点:
    1. 不能删除元素,因为存在哈希冲突,删除元素可能把其他元素的标志删除
    2. 存在误判,不能精准过滤

七、布谷鸟过滤器

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

类之间的比较

作者简介: zoro-1,目前大一,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 类之间的比较 固定需求式比较器 固定需求式 通过…

css学习2(利用id与class修改元素)

1、id选择器可以为标有特定id的html元素指定特定的样式。 2、选择器以#开头,后跟某id的属性值。 3、class选择器用于描述一组元素的样式,class可以在多个元素使用。 4、类选择器用.选择。 5、指定特定的元素使用class。 6、元素的多个类用空格分开&…

若依项目的介绍(前后端分离版本)

目录 一、若依介绍 (一)简单介绍 (二)若依版本 (三)Git远程拉取步骤 二、项目的技术介绍 (一)后端技术 1.spring boot 2.Spring Security安全控制 3.MyBatis 4.MySQL和R…

npm install ffi各种失败,换命令npm i ffi-napi成功

网上各种帖子安装ffi,基本上到了windows build tools这里会卡住。 使用命令npm install --global --production windows-build-tools 安装报错信息如下: PS E:\codes\nodejsPath\tcpTest> npm install --global --production windows-build-tools …

超声波传感器(HC-SR04)按时序图手撕驱动

目录 1、简介 2、传感器介绍 2.1 引脚介绍 2.2 时序图介绍 3、 需求与接线 3.1 任务需求 3.2 接线 4、Cubemax配置 4.1 SYS配置 4.2 RCC配置 4.3 时钟树配置 4.4 GPIO初始化 4.5 定时器配置 4.6 生成代码 5、 keil端代码编写 5.1 微妙函数封装 5.2 超声波驱动封装…

html | 基于iframe的简易富文本编辑器

效果图 支持: 选中后 ctrlI 斜体 代码 思路就是在iframe种嵌套html和css。 <pre> - 支持: 选中后 ctrlI 斜体 - todo: 鼠标实现单击斜体 </pre> <iframe name"richedit" style"height:30%; width:100%;"></iframe><script…

【论文解读】Hybrid-SORT: Weak Cues Matter for Online Multi-Object Tracking

因为Hybrid-SORT的baseline是基于OCSORT进行改进的&#xff0c;在这之前建议先了解byteTrack和【】的相关知识 1.介绍 1.1 基本框架 多目标跟踪(MOT)将问题分为两个子任务。第一个任务是检测每个帧中的对象。第二个任务是将它们在不同的框架中联系起来。关联任务主要通过显式…

回归预测 | MATLAB实现CSO-SVM布谷鸟优化算法优化支持向量机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现CSO-SVM布谷鸟优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现CSO-SVM布谷鸟优化算法优化支持向量机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一…

matlab 点云精配准(1)——point to point ICP(点到点的ICP)

目录 一、算法原理参考文献二、代码实现三、结果展示四、参考链接本文由CSDN点云侠原创,爬虫自重。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 一、算法原理 参考文献 [1] BESL P J,MCKAY N D.A method for registration of 3-Dshapes[J].IEEE Tran…

2.创建小程序

创建 在开发工具中,选择小程序,点击加号 填写小程序信息,模板使用的是TS+Sass 编辑器的工作区 目录结构 项目使用的是ts的模板,目录结构和js的有一点差异,目录结构如下: miniprogram:小程序根目录 —pages:小程序页面目录 ——xxx:页面目录,一个页面对应一个目…

JVM的前世今生之类加载过程

1. 什么是JVM VM是JavaVirtualMachine&#xff08;Java虚拟机&#xff09;的缩写&#xff0c;JVM是一种用于计算设备的规范&#xff0c;它是一个虚构出来的计算机&#xff0c;是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它可以实现跨操作系统运行&#xff0c;即一…

Java进阶篇--迭代器模式

目录 同步迭代器&#xff08;Synchronous Iterator&#xff09;&#xff1a; Iterator 接口 常用方法&#xff1a; 注意&#xff1a; 扩展小知识: 异步迭代器&#xff08;Asynchronous Iterator&#xff09;&#xff1a; 常用的方法 注意&#xff1a; 总结&#xff1a…

Android Alarm闹钟API使用心得

前言 有什么办法可以在不打开App的时候&#xff0c;也能够触发一些操作呢&#xff1f;比如说发送通知&#xff0c;解决这个需求的办法有很多种选择&#xff0c;比如说官方推荐的WorkManager API&#xff0c;可以在后台执行一次性、耗时、定时的任务&#xff0c;但WorkManager是…

如何创建和查看软链接和硬链接?这二者的区别是什么?

索引节点&#xff08;inode&#xff09;硬链接创建硬链接查看硬链接 软链接创建软链接查看软链接 inode编号妙用总结软链接和硬链接的区别感谢 &#x1f496; hello大家好&#x1f60a; 在linux中&#xff0c;文件链接可以使多个文件名引用同一个文件。有两种方式可以创建指向同…

我能“C”——数据的存储

目录 1. 数据类型介绍 1.1 类型的基本归类&#xff1a; 2. 整形在内存中的存储 2.1 原码、反码、补码 2.2 大小端介绍 2.3 练习 3. 浮点型在内存中的存储 3.1 一个例子 3.2 浮点数存储规则 1. 数据类型介绍 char // 字符数据类型 short // 短整…

Jmeter 分布式性能测试避坑指南

在做后端服务器性能测试中&#xff0c;我们会经常听到分布式。那你&#xff0c;是否了解分布式呢&#xff1f;今天&#xff0c;我们就来给大家讲讲&#xff0c;在企业实战中&#xff0c;如何使用分布式进行性能测试&#xff0c;实战过程中&#xff0c;又有哪些地方要特别注意&a…

Log4net在.Net Winform项目中的使用

引言&#xff1a; Log4net是一个流行的日志记录工具&#xff0c;可以帮助开发人员在应用程序中实现高效的日志记录。本文将提供一个详细的分步骤示例&#xff0c;来帮助您在.Net Winform项目中使用Log4net。 目录 一、安装Log4net二、配置Log4net三、在项目中使用Log4net四、初…

【Kubernetes】Kubernetes的Pod控制器

Pod控制器 一、Pod 控制器的概念1. Pod 控制器及其功用2. Pod 控制器有多种类型2.1 ReplicaSet2.2 Deployment2.3 DaemonSet2.4 StatefulSet2.5 Job2.6 Cronjob 3. Pod 与控制器之间的关系 二、Pod 控制器的使用1. Deployment2. SatefulSet2.1 为什么要有headless&#xff1f;2…

最新AI系统ChatGPT程序源码/支持GPT4/自定义训练知识库/GPT联网/支持ai绘画(Midjourney)+Dall-E2绘画/支持MJ以图生图

一、前言 SparkAi系统是基于国外很火的ChatGPT进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。 那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01…

Python编程——列表解析与常用操作

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 本文专栏&#xff1a;Python专栏 专栏介绍&#xff1a;本专栏为免费专栏&#xff0c;并且会持续更新python基础知识&#xff0c;欢迎各位订阅关注。 目录 一、列表是什么&#xff1f; 二、列表的特点 1、元素…
最新文章