布隆过滤器及其用法

1 定义

  布隆过滤器(Bloom Filter, BF)是由Howrad Bloom在1970年提出的一种具有高效时间和空间效率的二进制向量数据结构,用来检测一个元素是不是属于这个集合。注意,布隆过滤器只判断是否出现在集合中,无法给出元素在集合中的具体位置。

1.1 构造布隆过滤器

  关于如何构造布隆过滤器,下面以集合 S = { S 1 , S 2 , S 3 } S=\{S_{1},S_{2},S_{3}\} S={S1,S2,S3}为例进行说明。首先要说明一点,虽然布隆过滤器也需要利用哈希查询算法,但与传统的哈希查询算法不同,布隆过滤器并不存储集合中的具体元素,而是通过多次哈希函数将集合中的元素映射到二进制位串中。一旦集合元素被映射到对应的二进制位,则将对应位置改为1。
在这里插入图片描述
  上述布隆过滤器中,每个位置占1个比特位。如果每个位置改为多个比特位,这样就能表达出的信息。比如如下图所示的计数布隆过滤器。
在这里插入图片描述
注意:一般不对布隆过滤器执行删除元素的操作。

1.2 布隆过滤器查询过程

  在查询过程中,需要计算出相关元素 S i S_{i} Si对应的多个哈希地址,然后检查布隆过滤器中对应的位置上是否全部为1,若全都为1,则 S i S_{i} Si可能在布隆过滤器上(被称为假阳性问题);若不全为1,那么元素 S i S_{i} Si一定不在布隆过滤器上。

1.3 优点

  布隆过滤器的优点主要有以下几点:

  • 时间复杂低。无论是插入还是查询操作,布隆过滤器的时间复杂度均为 O ( k ) O(k) O(k),其中, k k k为哈希函数的数量。
  • 保密性好。布隆过滤器中并不保存元素的具体数值。
  • 占用空间小。

  而布隆过滤器的缺点主要为:存在误判率。当两个不同的值却能产生相同的哈希值时,布隆过滤器无法确定查询元素是否真的存在集合中。为了尽量降低误判率,布隆过滤器中一般都设置多个哈希函数。

2 python中使用布隆过滤器

2.1 安装包

  python中实现布隆过滤器的第三方包很多,这里使用的是pybloom-live (pybloomfiltermmap等包在Windows上安装遇到报错,无法解决)。

pip install pybloom_live
2.2 简单使用案例
from pybloom_live import BloomFilterbf=BloomFilter(capacity=100000,error_rate=0.001)
#构建布隆过滤器
for i in range(100000):bf.add(i)#查询元素
for i in [1,200,345,100323,3233232,'hello']:print(i in bf)

其结果如下:

True
True
True
False
False
False

补充

  • 什么是缓存穿透?
    缓存穿透是指在高并发场景下,缓存中(包括本地缓存和Redis缓存)的某一个Key被高并发的访问没有命中,此时会回数据库中访问数据,导致数据库并发的执行大量查询操作,对其造成巨大的压力。
    使用布隆过滤器可以解决缓存穿透的问题。比如在redis数据库中,先将所有的key都存到布隆过滤器中,当请求进来时,先去过滤器中校验key是否存在,如果不存在直接返回null。

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

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

相关文章

HubSpot成功全靠它?集客营销大揭秘

在当今数字化的商业世界中,吸引、转化和维护客户已经变得更具挑战性和复杂性。然而,有一家公司已经成功地帮助数千家企业实现了集客营销的成功。这家公司就是HubSpot。那么,HubSpot的成功到底全靠了什么?让我们揭开集客营销的大秘…

openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制

文章目录 openGauss学习笔记-92 openGauss 数据库管理-内存优化表MOT管理-内存表特性-使用MOT-MOT使用MOT SQL覆盖和限制92.1 不支持的特性92.2 MOT限制92.3 不支持的DDL操作92.4 不支持的数据类型92.5 不支持的索引DDL和索引92.6 不支持的DML92.7 不支持的JIT功能(…

3D孪生场景搭建:3D漫游

上一篇 文章介绍了如何使用 NSDT 编辑器 制作模拟仿真应用场景,今天这篇文章将介绍如何使用NSDT 编辑器 设置3D漫游。 1、什么是3D漫游 3D漫游是指基于3D技术,将用户带入一个虚拟的三维环境中,通过交互式的手段,让用户可以自由地…

前端作业(17)

之后的20个作业&#xff0c;学自【20个JavaScript经典案例-哔哩哔哩】 https://b23.tv/kVj1P5f 支付倒计时 1. 支付10s倒计时 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compat…

跨境必备!WhatsApp营销——注册、养号、防封号!

前面的文章&#xff0c;我们给大家介绍了WhatsApp营销的定义以及重要性&#xff0c;相信许多跨境小伙伴已经摩拳擦掌&#xff0c;迫不及待讲WhatsApp纳入您的全渠道营销策略。当然&#xff0c;工欲善其事&#xff0c;必先利其器&#xff0c;拥有安全的WhatsApp号与登录环境会让…

【网络安全 --- kali2022安装】kali2022 超详细的安装教程(提供镜像)

如果你还没有安装vmware 虚拟机&#xff0c;请参考下面博客安装 【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;-CSDN博客【网络安全 --- 工具安装】VMware 16.0 详细安装过程&#xff08;提供资源&#xff09;https://blog.csdn.net/m0…

Cocos Creator3.8 项目实战(四)巧用九宫格图像拉伸

一、为什么要使用九宫格图像拉伸 相信做过前端的同学都知道&#xff0c;ui &#xff08;图片&#xff09;资源对包体大小和内存都有非常直接的影响。 通常ui 资源都是图片&#xff0c;也是最占资源量的资源类型&#xff0c;游戏中的ui 资源还是人机交互的最重要的部分&#xff…

解决 Jenkins 性能缓慢的问题~转

解决 Jenkins 性能缓慢的问题 Docker中文社区 ​​ 计算机技术与软件专业技术资格持证人 2 人赞同了该文章 没有什么比缓慢的持续集成系统更令人沮丧的了。它减慢了反馈循环并阻止代码快速投入生产。虽然像使用性能更好的服务器可以为您争取时间&#xff0c;但您最终必须投资…

UG\NX CAM二次开发 获取当前加工导航器选中的对象数量和tag UF_UI_ONT_ask_selected_nodes

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 获取当前加工导航器选中的对象数量和tag UF_UI_ONT_ask_selected_nodes 效果: 代码: void MyClass::do_it() {//获取当前加工导航器选中的对象数量和TAGint count = 0;tag_t* objects = NULL…

stm32 - 中断

stm32 - 中断 概念中断向量表NVIC 嵌套中断向量控制器优先级 中断EXTI概念基本结构例子- 对射式红外传感器计次例子 - 旋转编码器 概念 stm32 支持的中断资源&#xff08;都属于外设&#xff09; EXTITIMADCUSARtSPII2C stm32支持的中断 内核中断 外设中断 中断通道与优先级 一…

物联网AI MicroPython传感器学习 之 噪音测量传感器

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; 一、产品简介 麦克风噪音测量传感器&#xff0c;通过单片机对信号的简单处理&#xff0c;可实环境音检测、声控开关这样的有趣实验。传感器模块仅占用一个IO口&#xff0c;通过电压强度&#xff08;mV&#…

IIS部署Flask

启用 CGI 安装wfastcgi pip install wfastcgi 启用 wfastcgi 首先以管理员身份运行wfastcgi-enable来在IIS上启用wfastcgi&#xff0c;这个命令位于c:\python_dir\scripts&#xff0c;也就是你需要确保此目录在系统的PATH里&#xff0c;或者你需要cd到这个目录后再执行。 #…

Node-RED系列教程-25node-red获取天气

安装节点:node-red-contrib-weather 节点图标如下: 使用说明:node-red-contrib-weather (node) - Node-RED 流程图中填写经度和纬度即可。 演示: json内容: {

Linux服务器报错“No space left on device”如何解决

一、错误的含义&#xff0c;说明在服务器设备上的存储空间已经满了&#xff0c;不能再上传或者新建文件夹或者文件等。 二、确认查看服务器系统的磁盘使用情况是否是真的已经没有剩余空间&#xff0c;复制下面命令在服务器上运行&#xff0c;然后发现如果如下图所示那么表明sda…

代码随想录算法训练营第23期day14|二叉树层序遍历、226.翻转二叉树、101. 对称二叉树

目录 一、二叉树层序遍历 非递归法 递归法 相关题目&#xff08;10题&#xff09; 二、&#xff08;leetcode 226&#xff09;翻转二叉树 递归法 层序遍历 深度优先遍历 1&#xff09;非统一写法——前序遍历 2&#xff09; 统一写法——前序遍历 三、&#xff08;le…

软件测试/测试开发丨App自动化测试-弹窗异常处理

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27692 黑名单处理 运行过程中不定时弹框&#xff08;广告弹窗&#xff0c;升级提示框&#xff0c;新消息提示框等等&#xff09; 弹框不是 BUG&#xff0…

docker数据管理和网络通信

docker数据管理 管理 Docker 容器中数据主要有两种方式&#xff1a; 数据卷&#xff08;Data Volumes&#xff09;和数据卷容器&#xff08;DataVolumes Containers&#xff09;。 1&#xff0e;数据卷 数据卷是一个供容器使用的特殊目录&#xff0c;位于容器中。可将宿主机…

测试工程师思维学习

一、测试工程师应具备什么思维&#xff1f; 透过现象看本质&#xff0c;拒绝“一叶障目” 01、质疑和系统思维 02、创新思维 03、全局思维 04、风险驱动和组合思维 05、用户为中心和比较思维 06、BT思维和架构扩展性思维 二、测试工程师应避免的思维 01、同化现象 02、定位效…

数据结构-----二叉排序树

目录 前言 1.什么是二叉排序树 2.如何构建二叉排序树 3.二叉排序树的操作 3.1定义节点储存方式 3.2插入节点操作 3.2创建二叉排序树 3.4遍历输出&#xff08;中序遍历&#xff09; 3.5数据查找操作 3.6获取最大值和最小值 3.7删除节点操作 3.8销毁二叉排序树 4.完…

AdaBoost(上):数据分析 | 数据挖掘 | 十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…