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.rhkb.cn/news/98252.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Labview选项卡之实现被选择选项卡工作

文章目录 前言一、使用选项卡二、实现被选择选项卡工作1、需求2、分析3、实现①、前面板②、程序框图 三、效果展示四、源码自取 前言 有些时候,我们做界面,需要好多个界面切换。如果是同一个 VI 里界面切换,一般都是选项卡了。切换不同选项…

linkis 1.1.1 报错 No plugin found spark-2.4.8, please check your configuration

按照官方教程设置,但是仍然报错 Caused by: java.util.concurrent.ExecutionException: LinkisException{errCode70063, descNo plugin found spark-2.4.8, please check your configuration, iphadoop0004, port9103, serviceKindlinkis-cg-engineplugin} 这个时候,我们首先检…

探索高级UI、源码解析与性能优化,了解开源框架及Flutter,助力Java和Kotlin筑基,揭秘NDK的魅力!

课程链接: 链接: https://pan.baidu.com/s/13cR0Ip6lzgFoz0rcmgYGZA?pwdy7hp 提取码: y7hp 复制这段内容后打开百度网盘手机App,操作更方便哦 --来自百度网盘超级会员v4的分享 课程介绍: 📚【01】Java筑基:全方位指…

Maven之tomcat7-maven-plugin 版本低的问题

tomcat7-maven-plugin 版本『低』的问题 相较于当前最新版的 tomcat 10 而言,tomcat7-maven-plugin 确实看起来很显老旧。但是,这个问题并不是问题,至少不是大问题。 原因 1:tomcat7-maven-plugin 仅用于我们(程序员&…

关于docker-compose up -d在文件下无法运行的原因以及解决方法

一、确认文件下有docker-compose.yml文件 二、解决方法 检查 Docker 服务是否运行: 使用以下命令检查 Docker 服务是否正在运行: systemctl status docker 如果 Docker 未运行,可以使用以下命令启动它: systemctl start docker …

Debian查询硬件状态

很早以前写过一个查询树霉派硬件状态的文章,用是Python写的一个小程序。里面用到了vcgencmd这个测温度的内部命令,但这个命令在debian里面没有,debian里只有lm_sensors的外部命令,需要安装:apt-get install lm_sensors…

LeetCode_动态规划_困难_1388.3n 块披萨

目录 1.题目2.思路3.代码实现(Java) 1.题目 给你一个披萨,它由 3n 块不同大小的部分组成,现在你和你的朋友们需要按照如下规则来分披萨: 你挑选任意一块披萨。Alice 将会挑选你所选择的披萨逆时针方向的下一块披萨。…

JVM面试题-2

1、有哪几种垃圾回收器,各自的优缺点是什么? 垃圾回收器主要分为以下几种:Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1; Serial:单线程的收集器,收集垃圾时,必须stop the worl…

STM32——RTC实时时钟

文章目录 Unix时间戳UTC/GMT 时间戳转换BKP简介BKP基本结构读写BKP备份寄存器电路设计关键代码 RTC简介RTC框图RTC基本结构硬件电路RTC操作注意事项读写实时时钟电路设计关键代码 Unix时间戳 Unix 时间戳(Unix Timestamp)定义为从UTC/GMT的1970年1月1日…

git 回滚相关问题

原本用as自带的git执行回滚任务, 但是提交之后发现并没有成功, 后面通过命令行的方式重新回滚并且提交上去,就可以了 说明as的git还是有点小瑕疵,还是命令行最稳妥 相关博文: git代码回滚操作_imkaifan的博客-CSDN博…

05_bitmaphyperloglogGEO

Bitmap&hyperloglog&GEO 面试问 记录对集合中的数据进行统计在移动应用中,需要统计每天的新增用户数和第2天的留存用户数;在电商网站的商品评论中,需要统计评论列表中的最新评论:在签到打卡中,需要统计一个月内…

SpringBoot、Java 使用 Jsoup 解析 HTML 页面

使用 Jsoup 解析 HTML 页面 什么是 Jsoup? Jsoup 是一个用于处理 HTML 页面的 Java 库,它提供了简单的 API,使得从 HTML 中提取数据变得非常容易。无论是获取特定标签的内容还是遍历整个页面的元素,Jsoup 都能轻松胜任。 如何使…

思维进化算法(MEA)优化BP神经网络

随着计算机科学的发展,人们借助适者生存这一进化规则,将计算机科学和生物进化结合起来,逐渐发展形成一类启发式随机搜索算法,这类算法被称为进化算法(Evolutionary Com-putation, EC)。最著名的进化算法有:遗传算法、进化策略、进化规划。与传统算法相比,进化算法的特点是群体搜…

react之路由的安装与使用

一、路由安装 路由官网2021.11月初,react-router 更新到 v6 版本。使用最广泛的 v5 版本的使用 npm i react-router-dom5.3.0二、路由使用 2.1 路由的简单使用 第一步 在根目录下 创建 views 文件夹 ,用于放置路由页面 films.js示例代码 export default functio…

基于深度学习的指针式仪表倾斜校正方法——论文解读

中文论文题目:基于深度学习的指针式仪表倾斜校正方法 英文论文题目:Tilt Correction Method of Pointer Meter Based on Deep Learning 周登科、杨颖、朱杰、王库.基于深度学习的指针式仪表倾斜校正方法[J].计算机辅助设计与图形学学报, 2020, 32(12):9.DOI:10.3724…

使用zoom预览出图和系统相机预览出图,画质不一样的问题分析

1、问题背景 最近在基于 Android 的平台调试一款摄像头,客户有反馈一个问题,系统自带的 Camera2 app 预览出图是正常的,但用 Zoom app 打开摄像头,出图画面存在畸变、锯齿、过曝的问题,现象如下图所示。 2、问题分析 …

kafka--kafka基础概念-ISR详解

kafka基础概念-ISR详解 主要是讲 主 往 从同步中的问题 当绿色P1接收到写入的数据,要同步到紫色的P1S1和P1S2 如何保证一致性呢? 使用In Sync Replicas 也就是ISR概念 为什么不一致的? 因为P1S1同步数据 可能花费 50ms P1S2可能花费60ms…

java Spring Boot properties多环境配置拆分文件管理

上文 java Spring Boot yml多环境拆分文件管理优化 我们用yml 做了一个多环境配置文件的拆分管理 我们将 application.yml 改为 application.properties 参考代码如下 spring.profiles.activedev我们知道 yml 是用 : 来区分高低基本 而 properties是直接通过 . 来表达 其他基本…

重新认识小米

被镁光灯聚焦的企业,总是会被贴上各种标签。 8月14日,小米科技创始人雷军以“成长”为主题的年度演讲,刷遍社交网络。提到小米,你首先想到什么?手机发烧友、极致性价比,还是最年轻的500强? 这…

OLED透明屏采购指南:如何选择高质量产品?

着科技的不断进步,OLED透明屏作为一种创新的显示技术,在各个行业中得到了广泛应用。 在进行OLED透明屏采购时,选择高质量的产品至关重要。在这篇文章中,尼伽将为您提供一个全面的OLED透明屏采购指南,帮助您了解关键步…