当前位置: 首页 > article >正文

系统设计:布隆过滤器

原文towardsdatascience.com/system-design-bloom-filter-a2e19dcd4810https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/350b777cef6f9090c441e88a64b5066c.png简介哈希表是最广为人知和使用的几种数据结构之一。通过明智地选择哈希函数哈希表可以在常数时间内产生插入、搜索和删除查询的最佳性能。哈希表的主要缺点是潜在的冲突。为了避免冲突一种标准方法包括增加哈希表的大小。虽然这种方法在大多数情况下效果良好但有时我们仍然在使用大量内存空间方面受到限制。必须记住哈希表始终对任何查询提供正确响应。它可能会遇到冲突并且有时会变慢但它始终****保证 100%的正确响应。结果发现在某些系统中我们并不总是需要从查询中收到正确信息。这种准确性的降低可以用来关注改进系统的其他方面。在这篇文章中我们将发现一种名为布隆过滤器的创新数据结构。简单来说它是一种标准哈希表的修改版本它以牺牲少量准确性为代价来换取内存空间的增加。布隆过滤器布隆过滤器以大小为 m 的布尔数组的形式组织。最初其所有元素都被标记为 0假。除此之外还需要选择 k 个哈希函数这些函数以对象为输入并将它们映射到范围[0, m – 1]。每个输出值将后来对应于该索引处的数组元素。为了获得更好的结果建议哈希函数输出值其分布接近均匀。…/Images/7dba5ee0846bd115fe72bc134613d834.png在我们的例子中我们将使用大小为 m 13 且 k 3 个哈希函数的布隆过滤器。这些函数中的每一个都将输入对象映射到范围[0, 12]。插入每当需要添加一个新的对象时它将通过 k 个预定义的哈希函数。对于每个输出的哈希值该索引处的相应元素变为 1真。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/3e5eabb3a50f512d1340ec5bff493439.png“香蕉”对象被添加到布隆过滤器中。哈希函数输出的值是 6、2 和 9。那些索引处的数组元素变为 1。如果从哈希函数输出的数组元素的索引已经被设置为 1那么它就简单地保持为 1。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/89944f4964055253a1fef694708c4226.png“苹果”对象被添加到布隆过滤器中。数组索引为 10、9 和 4 的元素被分配为 1。即使数组的第 9 个元素已经被分配为 1其值在这里也不会改变。事实上任何数组元素上 1 的存在都充当了一个部分证据表明实际哈希到相应数组索引的元素确实存在于布隆过滤器中。搜索要检查一个对象是否存在需要计算其 k 个哈希值。可能有两种情况如果至少有一个哈希值对应的数组元素等于 0这意味着对象不存在。在插入过程中一个对象会与多个标记为 1 的数组元素相关联。如果一个对象确实存在于过滤器中那么所有的哈希函数都会确定性地输出指向 1 的相同序列的索引。然而指向值为 0 的数组元素显然表明当前对象不存在于数据结构中。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/29ed491a69dc07f6ddbf6370d2b3e067.png检查“橙子”对象是否存在于布隆过滤器中。由于至少有一个哈希函数在我们的情况下恰好是两个输出数组索引7 和 12该数组的元素等于 0这意味着“橙子”不存在于过滤器中。如果对于所有哈希值相应的数组元素都等于 1这意味着对象****可能存在不是 100%。正是这一陈述使得布隆过滤器成为一个概率数据结构。如果一个对象之前被添加过那么在搜索过程中布隆过滤器保证该对象的哈希值将与之前相同因此可以找到该对象。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4080375783a28508c39ed9dc034f8e34.png检查“香蕉”对象是否存在于布隆过滤器中。由于哈希函数是确定的它们输出与之前在插入“香蕉”时使用的完全相同的数组位置。因此“香蕉”存在于过滤器中。尽管如此当对象实际上不存在但 Bloom 过滤器声称存在时Bloom 过滤器可以产生误报响应。这种情况发生在所有针对该对象的哈希函数返回的哈希值都对应于过滤器中已插入的其他对象的数组元素值 1 时。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8ec2cf705980c8e6857abe68c7180a90.png误报响应的示例。尽管“cherry”之前没有被添加但过滤器认为它存在因为“cherry”的所有输出哈希值都指向值为 1 的数组元素。当插入的对象数量相对于 Bloom 过滤器数组的尺寸较高时容易出现误报答案。误报错误估计在给定 Bloom 过滤器的结构的情况下可以估计得到误报错误概率。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c58f6a7eae7bf5057bc61638a5f80f3b.png作者采用的图像。来源Bloom 过滤器 | 维基百科该公式的完整证明可以在维基百科上找到。基于该表达式我们可以做出一些有趣的观察随着哈希函数数量 k 的增加、数组大小 m 的增加和插入对象数量 n 的减少FP 概率降低。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5c945c50a37332233f18bb50f2c57f91.pngk 值增加、m 值增加或 n 值减少导致 FP 率降低在将对象插入 Bloom 过滤器之前如果我们知道数组大小 m并且可以估计未来将插入的对象数量 n我们可以找到将最小化 FP 概率所需的最佳哈希函数数量 k。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/19fa842627470e7b68db235309b004ac.png最小化 FP 概率的最佳哈希函数数量 k降低 FP 概率的另一种方法是几个独立 Bloom 过滤器AND 连接的组合。只有当一个元素存在于所有 Bloom 过滤器中时才最终认为该元素存在于数据结构中。约束条件与哈希表不同Bloom 过滤器的标准实现不支持删除。在开始时选择的哈希函数数量 k 和数组大小 m 之后不能更改。如果有这样的需求唯一的方法是通过插入所有先前存储的对象来构建具有新设置的另一个 Bloom 过滤器。应用根据维基百科页面Bloom 过滤器在大型系统中被广泛使用类似于Apache HBase、Apache Cassandra和PostgreSQL的数据库使用布隆过滤器来检查不存在的行或列。这种方法比使用磁盘查找要快得多。Medium使用布隆过滤器来过滤掉已经向用户推荐过的页面。Google Chrome以前使用布隆过滤器来识别恶意网址。如果一个网址在布隆过滤器中返回负响应则认为它是安全的。否则将执行完整的检查。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c3414d2a7c8ab83f2ac9084e02abe344.pngGoogle 用于检查恶意网址的算法。使用布隆过滤器可以显著减少对大量安全链接所需进行的更多计算量大的完整检查。结论在本文中我们介绍了一种构建哈希表的替代方法。当可以牺牲少量准确性以换取更有效的内存使用时布隆过滤器在许多分布式系统中成为了一种稳健的解决方案。通过调整布隆过滤器大小的哈希函数数量我们可以找到准确性和性能要求之间最合适的平衡。资源布隆过滤器 | 维基百科布隆过滤器计算器所有图像除非另有说明均为作者所有。

相关文章:

系统设计:布隆过滤器

原文:towardsdatascience.com/system-design-bloom-filter-a2e19dcd4810 https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/350b777cef6f9090c441e88a64b5066c.png 简介 哈希表是最广为人知和使用的几种数据结构之一。通过明智…...

Ro_一键获取E盾验证后台

链接:https://pan.quark.cn/s/a876e818b593软件来源网络,安全性自测。需要自己查找辅助IP...

Flutter 路由导航完全指南

Flutter 路由导航完全指南 引言 路由导航是任何移动应用的核心功能之一。Flutter 提供了强大而灵活的路由系统,支持多种导航方式。本文将深入探讨 Flutter 路由导航的各种技巧和最佳实践。 基础导航 Navigator.push Navigator.push(context,MaterialPageRoute(…...

Flutter 性能优化完全指南

Flutter 性能优化完全指南 引言 性能优化是移动应用开发中至关重要的一环。Flutter 虽然天生具有较好的性能表现,但在复杂应用中仍需要开发者进行针对性优化。本文将深入探讨 Flutter 性能优化的各种技巧和最佳实践。 性能问题定位 使用 DevTools // 在 pubspec.yam…...

CSS 渐变高级技巧完全指南

CSS 渐变高级技巧完全指南 引言 CSS 渐变是现代 Web 设计中不可或缺的视觉效果,它可以创建平滑的颜色过渡,为网页增添丰富的视觉层次。本文将深入探讨 CSS 渐变的各种类型和高级技巧。 基础语法回顾 线性渐变 .linear-gradient {background: linear-grad…...

Flutter 状态管理架构设计完全指南

Flutter 状态管理架构设计完全指南 引言 状态管理是 Flutter 应用开发的核心问题之一。一个好的状态管理架构能够使代码更加清晰、可维护和可测试。本文将深入探讨 Flutter 状态管理的各种架构模式和最佳实践。 状态管理概述 Flutter 中的状态可以分为以下几类: 局部…...

从《飞机大战》项目倒推环境搭建:手把手教你为Python 3.8+配置Pygame开发环境(Windows版)

从《飞机大战》项目倒推环境搭建:手把手教你为Python 3.8配置Pygame开发环境(Windows版) 当你决定用Python开发一个《飞机大战》游戏时,第一步不是急着写代码,而是搭建一个能跑起来的环境。这就像盖房子前要先打地基—…...

如何永久保存微信聊天记录:一个开源工具的全方位解决方案

如何永久保存微信聊天记录:一个开源工具的全方位解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/We…...

B样条曲线入门:从‘节点向量’这个硬骨头啃起,理解平滑背后的数学

B样条曲线入门:从‘节点向量’这个硬骨头啃起,理解平滑背后的数学 当你第一次看到B样条曲线时,可能会被那些复杂的数学公式和术语吓到。但别担心,我们今天要聊的"节点向量"(Knot Vector)概念&…...

别再只用XGBoost了!LightGBM实战:用直方图算法和Leaf-wise策略,5分钟搞定海量数据建模

LightGBM实战:5个关键技巧让海量数据建模效率提升10倍 当你的数据集从GB级别跃升到TB级别时,XGBoost的训练时间可能从几小时延长到几天。上周我们团队处理一个包含3亿条用户行为记录的数据集时,原本需要8小时的XGBoost训练,切换到…...

手把手教你用GD32F407和LWIP实现一个简易网络调试助手(UDP/TCP双模)

基于GD32F407与LWIP的智能网络调试工具开发实战 在嵌入式设备网络化需求日益增长的今天,如何快速构建一个稳定可靠的网络通信调试工具成为许多工程师面临的挑战。GD32F407作为国产MCU的优秀代表,搭配轻量级TCP/IP协议栈LWIP,能够为各类工业控…...

终极兼容方案:让老旧游戏手柄在现代游戏中重获新生

终极兼容方案:让老旧游戏手柄在现代游戏中重获新生 【免费下载链接】XOutput DirectInput to XInput wrapper 项目地址: https://gitcode.com/gh_mirrors/xo/XOutput 还在为那些功能完好却被现代游戏抛弃的经典游戏手柄感到惋惜吗?我们深知那种无…...

如何快速部署Windows系统:MediaCreationTool.bat终极实战指南

如何快速部署Windows系统:MediaCreationTool.bat终极实战指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

告别乱码困扰:GBKtoUTF-8编码转换工具全方位指南

告别乱码困扰:GBKtoUTF-8编码转换工具全方位指南 【免费下载链接】GBKtoUTF-8 To transcode text files from GBK to UTF-8 项目地址: https://gitcode.com/gh_mirrors/gb/GBKtoUTF-8 你是否曾遇到过这样的场景?从旧系统导出的文档在Mac上打开变成…...

OpenHarmony.Avalonia 归档事件对中国自主软件生态的影响--信任的坍塌与生态的异化

026年5月8日,中国开源技术社区发生了一起具有里程碑意义的争议性事件:由开发者“布布”(Bubu)主导的 OpenHarmony-NET/OpenHarmony.Avalonia 项目正式宣告停止更新并进入归档状态。这一决定不仅标志着一个由民间力量驱动的底层基础…...

超实用!电机、仪表盘、流动条…一个专为工控量身打造的 WinForm 控件库

前言在.NET 开发中,WinForm 虽然早已不是"新潮"的代名词,却依然活跃在大量工业控制、设备配套和企业内部系统中。原因很简单:稳定、轻量、部署简单,尤其适合对图形性能要求不高但对兼容性和可靠性要求极高的场景。然而&…...

【仅限大会注册用户获取】大模型版本血缘图谱自动生成工具链(含开源PoC),奇点智能大会现场演示后即刻下线

更多请点击: https://intelliparadigm.com 第一章:大模型版本管理策略:奇点智能大会 在2024年奇点智能大会上,大模型版本管理被确立为AI工程化落地的核心基础设施。与传统软件版本控制不同,大模型版本需同时追踪代码、…...

Windows平台Android开发环境自动化部署:ADB与Fastboot驱动智能安装工具技术解析

Windows平台Android开发环境自动化部署:ADB与Fastboot驱动智能安装工具技术解析 【免费下载链接】Latest-adb-fastboot-installer-for-windows A Simple Android Driver installer tool for windows (Always installs the latest version) 项目地址: https://gitc…...

罗技PUBG压枪宏技术深度解析:硬件级输入控制的演进与挑战

罗技PUBG压枪宏技术深度解析:硬件级输入控制的演进与挑战 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在FPS游戏竞技生态中&#…...

如何用nmrpflash拯救你的Netgear路由器:终极免费救援指南

如何用nmrpflash拯救你的Netgear路由器:终极免费救援指南 【免费下载链接】nmrpflash Netgear Unbrick Utility 项目地址: https://gitcode.com/gh_mirrors/nmr/nmrpflash 你的Netgear路由器突然变成"砖头"了吗?固件升级失败、系统崩溃…...

PIDtoolbox完全指南:3步掌握无人机黑盒日志分析的终极免费工具

PIDtoolbox完全指南:3步掌握无人机黑盒日志分析的终极免费工具 【免费下载链接】PIDtoolbox PIDtoolbox is a set of graphical tools for analyzing blackbox log data 项目地址: https://gitcode.com/gh_mirrors/pi/PIDtoolbox 你是否曾面对无人机的飞行日…...

魔珐星云:打造企业BI数据讲解智能体,让数据自己会说话

目录 摘要 1. 引言:当BI数据遇上具身智能 1.1 传统BI的痛点 1.2 具身智能的破局之道 1.3 项目价值 2. 魔珐星云:具身智能的表达层基础设施 2.1 产品定位与技术架构 2.2 核心能力对比 2.3 应用场景 3. DeepSeek-V3.2:数据洞察的AI大…...

纯电商用车再生制动能量回收模糊控制策略【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)基于自适应扩展卡尔曼滤波的SOC精确估计与能量管理…...

如何用MAA助手彻底解放双手:明日方舟智能自动化工具终极指南

如何用MAA助手彻底解放双手:明日方舟智能自动化工具终极指南 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https…...

为什么向量空间必须是“无限”的?

为什么向量空间必须是“无限”的? 为什么说运算结果总是在 V 中? 向量空间的定义本质上就是划定了一个“无论你怎么加、怎么乘,都逃不出这个圈子”的集合。那么为什么还分V,U 子集呢,这样讲来,不就是一个向量空间包括一切的意思吗? 当数学家说“地板是一个向量空间(子…...

基于储能系统参与电网一次调频的下垂控制仿真示例

目录 手把手教你学Simulink——基于储能系统参与电网一次调频的下垂控制仿真示例 一、 引言:当“新能源浪潮”遇见“频率崩塌”——储能如何化身电网的“速效救心丸”? 二、 问题本质:一次调频的“核心挑战”与“协同逻辑” 1. 核心挑战 …...

AI浪潮下光纤需求爆发,康宁如何从玻璃厂变身光纤之王?

AI光纤需求爆发,英伟达加速布局根据CRU,AI数据中心的光纤需求一年增长75.9%,供需缺口从6%撕开到15%,光纤价格更是在数月间涨超3倍。产能跟不上了,这就是为什么英伟达要投资康宁并加速光纤产能扩张。两个月前&#xff0…...

GetQzonehistory:3分钟免费备份QQ空间所有历史说说

GetQzonehistory:3分钟免费备份QQ空间所有历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心QQ空间里那些承载青春记忆的说说会随着时间流逝而消失吗&#xf…...

深度相机绿篱三维重建与修剪轨迹控制方法【附程序】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅如需沟通交流,点击《获取方式》 (1)紧耦合视觉-惯性-深度里程计与法线引导的稠密重建&am…...

2025届必备的降AI率助手实测分析

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 要降低那 AI 生成文本所呈现出的机械痕迹,就得从事先规划好的词汇、句法以及逻辑…...