布隆過濾器到底是什么東西?它有什么用

布隆過濾器:用概率換空間的奇妙數據結構

引言:當空間成為奢侈品

在互聯網每天產生2.5萬億字節數據的時代,Google每秒處理超過9萬次搜索請求,Redis緩存系統支撐著百萬級QPS的訪問。面對如此海量的數據處理需求,傳統的數據結構往往顯得力不從心。這時,一種名為布隆過濾器(Bloom Filter)的魔法數據結構應運而生,它用極小的空間代價實現了高效的成員存在性檢測,成為現代系統架構中不可或缺的利器。

一、布隆過濾器原理剖析

1.1 數據結構核心組成

布隆過濾器的核心是一個初始全為0的m位二進制向量(位數組),配合k個不同的哈希函數。當插入元素時,每個哈希函數將元素映射到位數組的不同位置,并將這些位置置1。查詢時,檢查所有哈希函數對應的位是否都為1。

class BloomFilter:def __init__(self, size, hash_count):self.size = size         # 位數組大小self.hash_count = hash_count  # 哈希函數數量self.bit_array = [0] * size

1.2 操作流程詳解

插入操作:

  1. 對元素x進行k次不同哈希計算

  2. 將得到的每個位置i (i ∈ [1,k])的bit_array[hi(x)]設為1

查詢操作:

  1. 對元素y進行同樣的k次哈希

  2. 檢查所有k個位置是否都為1

    • 全部為1 → 可能存在(可能假陽性)

    • 任一為0 → 絕對不存在

1.3 數學支撐

誤判率公式:

其中:

  • m:位數組大小

  • k:哈希函數數量

  • n:已插入元素數量

最優哈希函數數量:

二、獨特優勢與應用場景

2.1 性能優勢對比

?

2.2 典型應用場景

  1. 爬蟲系統去重:Google爬蟲使用布隆過濾器記錄已抓取URL,避免重復抓取

  2. 緩存穿透防護:Redis在緩存查詢前先檢查布隆過濾器,攔截不存在key的請求

  3. 分布式系統:Cassandra用布隆過濾器減少磁盤查找操作

  4. 網絡安全:惡意網址過濾系統初步篩查

  5. 區塊鏈應用:比特幣SPV節點驗證交易存在性

三、實現進階與優化

3.1 參數調優實踐

import mathdef optimal_params(n, p):"""計算最優參數:param n: 預期元素數量:param p: 期望誤判率:return: (m, k) 位數組大小,哈希函數數量"""m = - (n * math.log(p)) / (math.log(2)**2)k = (m / n) * math.log(2)return round(m), round(k)

3.2 改進型變種

  1. 計數布隆過濾器:每個位改用計數器,支持刪除操作

  2. 分層布隆過濾器:使用多個過濾器級聯,降低整體誤判率

  3. 壓縮布隆過濾器:應用壓縮算法進一步減少內存占用

四、生產環境最佳實踐

4.1 使用場景決策樹

?

是否需要存儲原始數據?
├── 是 → 使用傳統數據結構
└── 否 → 能否接受假陽性?├── 否 → 不可用└── 是 → 是否要求空間最優?├── 是 → 選擇布隆過濾器└── 否 → 考慮其他概率結構

4.2 性能優化技巧

  • 使用SIMD指令加速哈希計算

  • 采用雙緩沖機制實現無鎖更新

  • 組合多個小過濾器代替單一大型過濾器

  • 選擇硬件友好的哈希函數(如MurmurHash3)

五、典型應用案例解析

案例:Medium文章推薦系統
Medium使用布隆過濾器實現:

  1. 用戶閱讀歷史記錄(防止重復推薦)

  2. 已生成推薦列表去重

  3. 熱門文章緩存預熱過濾

實現效果:

  • 內存占用減少87%

  • 推薦響應時間降低45%

  • 系統吞吐量提升3.2倍

六、局限性與應對策略

核心限制:

  1. 假陽性概率不可避免

  2. 無法刪除元素(基礎版本)

  3. 哈希函數性能影響吞吐量

應對方案:

  1. 組合使用LRU緩存消除高頻誤判

  2. 定期重建過濾器(適用于動態數據集)

  3. 采用可刪除變種(Counting Bloom Filter)

結語:平衡的藝術

布隆過濾器向我們展示了計算機科學中永恒的權衡之道——在空間與準確性、性能與可靠性之間尋找最佳平衡點。當處理海量數據時,它就像一位聰明的守門人,雖然偶爾會誤放個別訪客(假陽性),但能確保不放行任何可疑分子(無假陰性),這種特性使其成為構建高性能系統的秘密武器。理解并善用這種數據結構,將幫助開發者在日益復雜的系統架構中做出更明智的設計決策。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/895425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/895425.shtml
英文地址,請注明出處:http://en.pswp.cn/news/895425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

任務1 將單表中的單個rfid增加為多個rfid

方案 使用連表查詢解決 單獨創建一個rfid的表 讓tool_id對應多個rfid 需要優化的表 1:tool_materials_stock 庫存管理 已完成 數據遷移完成 原庫rfid字段未刪除 2:tool_borrow_return 借出借還管理 已完成 3:too…

OutSystems Platform Tools Platform Services

概述(Overview) outsystems是一整套低代碼的企業級應用(WEB 和 移動端)的開發環境。 本文主要講解outsystems的Platform Tools與Platform Services 平臺工具(Platform Tools) 集成開發環境IDE&#xff0…

【深度解析】ETERM指令:離港系統的核心技術

在民航離港系統中,ETERM(中航信終端模擬系統)是廣泛使用的指令操作系統,主要用于航班控制、旅客值機、登機等操作。以下是一些核心的ETERM指令及其功能分類: 1. 航班信息查詢與操作 FLR:顯示航班列表&…

ES的java操作

ES的java操作 一、添加依賴 在pom文件中添加依賴包 <dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><version>7.8.0</version></dependency><!-- elastic…

DeepSeek 從入門到精通學習指南,2025清華大學《DeepSeek從入門到精通》正式發布104頁pdf版超全解析

DeepSeek 是一款強大的 AI 搜索引擎&#xff0c;廣泛應用于企業級數據檢索和分析。無論您是初學者還是有經驗的用戶&#xff0c;掌握 DeepSeek 的使用都能為您的工作帶來極大的便利。本文將從入門到精通&#xff0c;詳細介紹如何學習和使用 DeepSeek。 鏈接: https://pan.baid…

飛書專欄-TEE文檔

CSDN學院課程連接&#xff1a;https://edu.csdn.net/course/detail/39573

2025.2.11——一、[極客大挑戰 2019]PHP wakeup繞過|備份文件|代碼審計

題目來源&#xff1a;BUUCTF [極客大挑戰 2019]PHP 目錄 一、打開靶機&#xff0c;整理信息 二、解題思路 step 1&#xff1a;目錄掃描、爆破 step 2&#xff1a;代碼審計 1.index.php 2.class.php 3.flag.php step 3&#xff1a;繞過__wakeup重置 ?編輯 三、小結…

AI大模型(DeepSeek)科研應用、論文寫作、數據分析與AI繪圖學習

【介紹】 在人工智能浪潮中&#xff0c;2024年12月中國公司研發的 DeepSeek 橫空出世以驚艷全球的姿態&#xff0c;成為 AI領域不可忽視的力量!DeepSeek 完全開源&#xff0c;可本地部署&#xff0c;無使用限制&#xff0c;保護用戶隱私。其次&#xff0c;其性能強大&#xff…

考研操作系統----操作系統的概念定義功能和目標(僅僅作為王道嗶站課程講義作用)

目錄 操作系統的概念定義功能和目標 操作系統的四個特征 操作系統的分類 ?編輯 操作系統的運行機制 系統調用 操作系統體系結構 操作系統引導 虛擬機 操作系統的概念定義功能和目標 什么是操作系統&#xff1a; 操作系統是指控制和管理整個計算機系統的軟硬件資源&…

DeepSeek 突然來襲,AI 大模型變革的危機與轉機藏在哪?

隨著人工智能技術的飛速發展&#xff0c;大模型領域不斷涌現出具有創新性的成果。DeepSeek 的橫空出世&#xff0c;為 AI 大模型領域帶來了新的變革浪潮。本文將深入探討 DeepSeek 出現后 AI 大模型面臨的危機與轉機。 沖沖沖&#xff01;&#xff01;&#xff01; 目錄 一、…

JVM的類加載器

什么是類加載器&#xff1f; 類加載器&#xff1a;JVM只會運行二進制文件&#xff0c;類加載器的作用就是將字節碼文件加載到JVM中&#xff0c;從而Java 程序能夠啟動起來。 類加載器有哪些&#xff1f; 啟動類加載器(BootStrap ClassLoader):加載JAVA HOME/jre/lib目錄下的庫…

web前端開發中vscode常用的快捷鍵

1.快速復制一行 快捷鍵&#xff1a; shiftalt 下箭頭(上箭頭) 或者 ctrlc 然后 ctrlv 2.選定多個相同的單詞 快捷鍵&#xff1a; ctrl d 先雙擊選定一個單詞&#xff0c;然后按下 ctrl d 可以往下依次選擇相同的單詞。 這樣同時修改相同的單詞 3.全局替換某單詞 當我們一個…

C與C++的區別,類型轉換,引用

1.從C到C 語言的區別 C語言 編譯性語言 面向過程語言靈活 移植性好 效率高shell 解釋性語言 面向過程語言Linux運維C 編譯性語言 面向對象面向對象語言效率最高的 應用領域&#xff1a;系統開發(APP開發&#xff0c;服務器開發)&#xff0c;引擎開發&#xff0c;游戲開發&…

SQL-leetcode—1581. 進店卻未進行過交易的顧客

1581. 進店卻未進行過交易的顧客 表&#xff1a;Visits -------------------- | Column Name | Type | -------------------- | visit_id | int | | customer_id | int | -------------------- visit_id 是該表中具有唯一值的列。 該表包含有關光臨過購物中心的顧客的信息。 …

Jenkins 部署 之 Mac 一

Jenkins 部署 之 Mac 一 一.Jenkins 部署依賴 JDK 環境 查看 Mac JDK 環境&#xff0c;如果沒有安裝&#xff0c;先安裝 打開終端輸入命令:java -version Mac安裝配置 JDK 二. 檢查 HomeBrew 安裝 檢查 HomeBrew 是否安裝&#xff0c;終端輸入命令:brew -v Mac安裝HomeB…

鴻蒙HarmonyOS NEXT開發:優化用戶界面性能——組件復用(@Reusable裝飾器)

文章目錄 一、概述二、原理介紹三、使用規則四、復用類型詳解1、標準型2、有限變化型2.1、類型1和類型2布局不同&#xff0c;業務邏輯不同2.2、類型1和類型2布局不同&#xff0c;但是很多業務邏輯公用 3、組合型4、全局型5、嵌套型 一、概述 組件復用是優化用戶界面性能&#…

【AI大模型】Ollama部署本地大模型DeepSeek-R1,交互界面Open-WebUI,RagFlow構建私有知識庫

文章目錄 DeepSeek介紹公司背景核心技術產品與服務應用場景優勢與特點訪問與體驗各個DeepSeek-R系列模型的硬件需求和適用場景 Ollama主要特點優勢應用場景安裝和使用配置環境變量總結 安裝open-webui下載和安裝docker desktop配置鏡像源安裝open-webui運行和使用 RagFlow介紹主…

更加通用的Hexo多端部署原理及實現,適用于各種系統之間

本文推薦在作者的個人博客網站閱讀&#xff1a;shenying.online 一、故事背景 故事發生在大學上學期間&#xff08;而不是寒假&#xff09;。上學期間&#xff0c;宿舍條件極其惡劣&#xff0c;半夜斷電、空間狹小。我們大學垃圾條件使用游戲本的種種弊端被無限放大&#xff1…

開源、免費項目管理工具比較:2025最新整理30款

好用的開源、免費版項目管理系統有&#xff1a;1.Redmine&#xff1b;2. Taiga&#xff1b;3. OpenProject&#xff1b; 4.ProjectLibre&#xff1b; 5.GanttProject&#xff1b; 6.Tuleap&#xff1b; 7.Trac&#xff1b;8. Phabricator&#xff1b; 9.Notion&#xff1b; 10.…

組織結構改革:激活企業活力的 “源頭活水”

難以適應市場變化、內部溝通與協作不暢、決策效率低下、運營成本增加、人才流失嚴重、員工士氣下降、戰略目標難以實現……企業如何根據市場環境變化和自身發展需求&#xff0c;靈活調整組織框架&#xff0c;賦能企業的持續健康發展&#xff1f; 某國有投資建設集團旗下的二級…