【数据结构】Bloom Filter 布隆过滤器

news2024/11/29 0:37:55

背景

在分布式系统中,比如缓存Redis中,当出现缓存击穿问题,同时访问缓存和数据库都查询不到数据时,对缓存和数据库压力比较大,那么有没有好的数据结构可以快速查询一个数据是否在数据库中,而这个就是大名鼎鼎的布隆过滤器。核心就是通过判断一个数据是否存在。以及在面试的时候,如果面试官问怎么查询在50亿个电话号码中,现有的10万个电话号码,黑名单校验,安全连接网址的判断等,这个时候就需要使用布隆过滤器。

原理

这里我们考虑一下,如果使用链表 O(N)、二叉树O(logn)、哈希表 O(1) 判断一个元素是否存在是否可以,答案是可以,但是当数据量过大时,本身这些数据结构就需要随着数据量越来越大,存储空间也就越大,无法支持大数据量的快速检索。

核心原理

在这里插入图片描述
布隆过滤器由一个初始值为0的bit数组和N个哈希函数组成,可以用来快速判断某个数据是否存在。
在这里插入图片描述

标记数据存在

  • 1.将数据通过N个哈希函数,计算出对应的Hash值
  • 2.将对应的hash值对bit数组长度求余数
  • 3.找到对应的数组余数,将对应位置设置为1
    查询数据不存在
    除了上述的1.2过程。会查询到对应的数组位置 如果全部为1,则数据可能存在DB中,如果有一个不为0,那么数据一定不存在。

在这里插入图片描述
如上我们将X保存在bit数据中,计算出对应的1、3、7位置为1。当查询的时候如果1、3、7有一个不为1,那么数据一定不存在。

优点:空间效率和查询时间远远超过一般的算法。
缺点:在数据存在的情况下有一定的误识别率和删除困难。

这里重点说一下为什么不能删除数据,因为如果删除数据,可能会对已经存在的数据标记的1设置为0,那么如果请求过来这个数据判断数据是否存在数据不准确。

在这里插入图片描述

应用场景

1.Redis 缓存击穿
在这里插入图片描述
因为布隆过滤器高效的数据判断数据是否存在,所以可以在缓存或者数据库之前,先用布隆过滤器进行判断一下,如果数据存在,那么在请求,如果数据不存在的话,直接拦截请求。这样可以降低非法的数据访问,以及来降低缓存和数据库层的负载压力。

  • 网页爬虫对URL的去重,避免爬取相同的URL地址
  • 反垃圾邮件,从数十亿个垃圾邮件列表中判断某邮箱是否垃圾邮箱

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

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

相关文章

韦东山驱动大全:第四篇 基础-Makefile

1、mount -t nfs -o nolock,vers3 192.168.1.137:/home/book/nfs_rootfs(服务器目录) /mnt(板子目录) 2、gcc -o hello hello.c -v 3、 4、

golang 微服务中的断路器 hystrix

之前说到过微服务容错处理,可以使用 断路器 使用断路器的原因是: 当下游的服务因为过载或故障,无法提供服务,我们需要及时的让上游服务知悉,且暂时 熔断 调用方和提供方的调用链,这是为了避免服务雪崩现象…

二层交换机与三层交换机区别

这两种类型交换机的工作方式有所不同: 二层交换机可以识别数据包中的MAC地址,根据MAC地址进行转发,并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。二层交换机不遵循路由算法。三层交换机转发基于目标 IP 地址,数据包…

143. 重排链表

题目描述: 主要思路: 没有找到什么特殊的捷径,主要就是链表的一些基础操作。 实现了三个函数,一个是找到链表的中心结点,一个是将中心结点之后的链表进行翻转,另一个就是两段链表进行拼接。 class Soluti…

庄懂的TA笔记(十四十六)<特效:火焰 + 水流>

庄懂的TA笔记(十四&十六)<特效:火焰 水流> 目录 一、作业展示: 二、示范:火: 参考资料: 实现思路: 实践操作: 三、示范:水: 实现思路&am…

Mybatis Plus 使用@TableLogic实现逻辑删除

文章目录 步骤1:修改数据库表添加deleted列步骤2:实体类添加属性步骤3:运行删除方法知识点1:TableLogic 接下来要讲解是删除中比较重要的一个操作,逻辑删除,先来分析下问题: 这是一个员工和其所签的合同表,关系是一个员工可以签多…

如何用 ChatGPT 帮你10分钟读完数据库论文

本周,OpenAI 向所有 ChatGPT Plus 用户开放了两个重要功能: Web Browsing 和 Plugins 它俩都需要用户自己开启,才能使用,如下: 作为对数据库论文的爱好者,我第一款挑选的 Plugin 便是 ChatWithPDF,毕竟真的…

基于脉冲神经网络的物体检测

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 研究的意义在于探索脉冲神经网络在目标检测上的应用,目前主流的脉冲神经网络训练算法有直接BP训练、STDP无监督训练和训练好的ANN的转化,虽然训练算法众多,但是SNN仍然没有一套成熟的训练算…

games101作业3

作业要求 修改函数 rasterize_triangle(const Triangle& t) in rasterizer.cpp: 在此 处实现与作业 2 类似的插值算法,实现法向量、颜色、纹理颜色的插值。 修改函数 get_projection_matrix() in main.cpp: 将你自己在之前的实验中 实现的投影矩阵填到此处&am…

【JUC基础】08. 三大工具类

1、前言 JUC包中包含了三个非常实用的工具类:CountDownLatch(倒计数器),CyclicBarrier(循环栅栏),Semaphore(信号量)。 2、倒计数器:CountDownLatch 2.1、…

基于Java+SpringBoot+Vue前后端分离机票预定/订购系统设计与实现(视频讲解)

博主介绍:✌全网粉丝3W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

章节2 Matplotlib 绘图基础

目录 课时 2 Matplotlib简介及绘制简单线型图 课时 3 图例和标题 课时 4 自定义图形样式 课时 4 绘制条形图 课时 2 Matplotlib简介及绘制简单线型图 线的画法 plt.plot,同时提供x轴坐标和y轴坐标 课时 3 图例和标题 x 轴数据默认即可,如下所示 x轴代…

SimpleDateFormat非线程安全问题

文章目录 1. SimpleDateFormat介绍2. 测试SimpleDateFormat的非线程安全性3. 解决方案一4. 解决方案二 1. SimpleDateFormat介绍 SimpleDateFormat是Java中的一个类,用于将日期对象格式化为特定的字符串表示形式,或者将特定格式的字符串解析为日期对象。…

netstat 连接通信的信息和状态、以及ss

netstat 常用参数 t 只显示tcpu只显示udpnnum 数字形式显示地址和端口号l listen 显示监听端口 pprogram 显示进程aall 所有连接和监听r显示路由表 netstat -lnp 显示服务监听端口tcpudpsocket ,socket 文件也用来同一台服务器的进程之间通信的…

Spring中的MergedBeanDefinitionPostProcessor有什么作用 ?

Spring中的MergedBeanDefinitionPostProcessor有什么作用 ? 引言调用时机加载bean定义的几种方式postProcessMergedBeanDefinition接口作用小结 引言 MergedBeanDefinitionPostProcessor这个Bean后置处理器大家可能关注的比较少,其本身也只提供了一个bean生命周期回调接口: …

iptable 防火墙一

目录 iptables概述netfilter/iptables 关系四表五链四表:五链: 规则链之间的匹配顺序主机型防火墙:规则链内的匹配顺序: iptables 安装iptables防火墙的配置方法:iptables 命令行配置方法:常用的控制类型&a…

一文读懂大语言模型

以ChatGPT为代表的大语言模型被很多人认为是新一轮科技革命的起点,本文旨在通过概念性介绍,让普通人能够尽可能理解人工智能以及大语言模型的基本概念,从而了解这些技术能做以及不能做什么。原文: A Very Gentle Introduction to Large Langu…

v4l2数据结构分析

v4l2数据结构分析 文章目录 v4l2数据结构分析Video4Linux2设备v4l2_device媒体设备media_deviceVideo4Linux2子设备v4l2_subdevVideo4Linux2子设备的操作集v4l2_subdev_opsVideo4Linux2子设备的内部操作集v4l2_subdev_internal_opsVideo4Linux2控制处理器v4l2_ctrl_handlerVide…

微信自动聊天机器狗,配置chatGPT,比Siri还智能!

大家好,我是TheWeiJun;最近看见微信里各个群聊都在聊chatGPT,甚至有的大佬们都把chatGPT接入了微信群聊,于是就有粉丝来找小编,希望能出一期chatGPT的文章;故今天这篇文章我将手把手教大家如何实现并自定义…

学习《信息系统项目管理师教程》第4版应关注的PMBOK的巨大变化

学习《信息系统项目管理师教程》第4版应关注的PMBOK的巨大变化 《信息系统项目管理师教程》的第4版比起第3版来有不少变化。但是,这种变化完全没有体现出PMBOK第7版带来的巨大变化。 因为,在从《信息系统项目管理师教程》第3版出版的2017年到现在&…