色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

聊聊布隆過濾器

馬哥Linux運維 ? 來源:頂尖架構(gòu)師棧 ? 2023-06-30 10:03 ? 次閱讀

前言

布隆過濾器作為一個精巧且實用的數(shù)據(jù)結(jié)構(gòu),對于后端程序員來講,學(xué)習(xí)和理解布隆過濾器有很大的必要性。希望通過這篇文章讓更多人了解布隆過濾器的原理,并且會實際去使用它!

什么是布隆過濾器?

布隆過濾器 (Bloom Filter)是由 Burton Howard Bloom 于 1970 年提出,我們可以把它看作由二進制向量(或者說位數(shù)組)和一系列隨機映射函數(shù)(哈希函數(shù))兩部分組成的數(shù)據(jù)結(jié)構(gòu)。相比于我們平時常用的的 List、Map、Set 等數(shù)據(jù)結(jié)構(gòu),它占用空間更少并且效率更高,但是缺點是其返回的結(jié)果是概率性的,而不是非常準(zhǔn)確的。理論情況下添加到集合中的元素越多,誤報的可能性就越大。而且,存放在布隆過濾器的數(shù)據(jù)不容易刪除。

Bloom Filter 會使用一個較大的 bit 數(shù)組來保存所有的數(shù)據(jù),數(shù)組中的每個元素都只占用 1 bit ,并且每個元素只能是 0 或者 1(代表 false 或者 true),這也是 Bloom Filter 節(jié)省內(nèi)存的核心所在。這樣來算的話,申請一個 100w 個元素的位數(shù)組只占用 1000000Bit / 8 = 125000 Byte = 125000/1024 kb ≈ 122kb 的空間。

97017dae-168f-11ee-962d-dac502259ad0.png

位數(shù)組

總結(jié):一個名叫 Bloom 的人提出了一種來檢索元素是否在給定大集合中的數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)是高效且性能很好的,但缺點是具有一定的錯誤識別率和刪除難度。并且,理論情況下,添加到集合中的元素越多,誤報的可能性就越大。

布隆過濾器使用場景

判斷給定數(shù)據(jù)是否存在:比如判斷一個數(shù)字是否存在于包含大量數(shù)字的數(shù)字集中(數(shù)字集很大,上億)、 防止緩存穿透(判斷請求的數(shù)據(jù)是否有效避免直接繞過緩存請求數(shù)據(jù)庫)等等、郵箱的垃圾郵件過濾(判斷一個郵件地址是否在垃圾郵件列表中)、黑名單功能(判斷一個IP地址或手機號碼是否在黑名單中)等等。

網(wǎng)頁爬蟲對URL去重,避免爬取相同的 URL 地址。

比如用戶日常刷新聞,每次推薦給該用戶的內(nèi)容不能重復(fù),過濾已經(jīng)看過的內(nèi)容。

以上場景都需要判斷給定數(shù)據(jù)是否存在,因此布隆過濾器主要是為了解決海量數(shù)據(jù)的存在性問題。

布隆過濾器的原理介紹

當(dāng)一個元素加入布隆過濾器中的時候,會進行如下操作:

使用布隆過濾器中的哈希函數(shù)對元素值進行計算,得到哈希值(有幾個哈希函數(shù)得到幾個哈希值)。

根據(jù)得到的哈希值,在位數(shù)組中把對應(yīng)下標(biāo)的值置為 1。

當(dāng)我們需要判斷一個元素是否存在于布隆過濾器的時候,會進行如下操作:

對給定元素再次進行相同的哈希計算;

得到值之后判斷位數(shù)組中的每個元素是否都為 1,如果值都為 1,那么說明這個值在布隆過濾器中,如果存在一個值不為 1,說明該元素不在布隆過濾器中。

Bloom Filter 的簡單原理圖如下:

971174de-168f-11ee-962d-dac502259ad0.png

Bloom Filter 的簡單原理示意圖

如圖所示,當(dāng)字符串存儲要加入到布隆過濾器中時,該字符串首先由多個哈希函數(shù)生成不同的哈希值,然后將對應(yīng)的位數(shù)組的下標(biāo)設(shè)置為 1(當(dāng)位數(shù)組初始化時,所有位置均為 0)。當(dāng)?shù)诙未鎯ο嗤址畷r,因為先前的對應(yīng)位置已設(shè)置為 1,所以很容易知道此值已經(jīng)存在(去重非常方便)。

如果我們需要判斷某個字符串是否在布隆過濾器中時,只需要對給定字符串再次進行相同的哈希計算,得到值之后判斷位數(shù)組中的每個元素是否都為 1,如果值都為 1,那么說明這個值在布隆過濾器中,如果存在一個值不為 1,說明該元素不在布隆過濾器中。

不同的字符串可能哈希出來的位置相同,這種情況我們可以適當(dāng)增加位數(shù)組大小或者調(diào)整我們的哈希函數(shù)。

綜上,我們可以得出:布隆過濾器說某個元素存在,小概率會誤判。布隆過濾器說某個元素不在,那么這個元素一定不在。

如何實現(xiàn)布隆過濾器

Guava 實現(xiàn)

Guava 中布隆過濾器的實現(xiàn)算是比較權(quán)威的,所以實際項目中我們不需要自己去實現(xiàn)一個布隆過濾器。

首先我們需要在項目中引入 Guava 的依賴:


com.google.guava
guava
28.0-jre

實際使用如下:

我們創(chuàng)建了一個最多存放 最多 1500 個整數(shù)的布隆過濾器,并且我們可以容忍誤判的概率為百分之(0.01)

//創(chuàng)建布隆過濾器對象
BloomFilterfilter=BloomFilter.create(
Funnels.integerFunnel(),
1500,
0.01);
//判斷指定元素是否存在
System.out.println(filter.mightContain(1));
System.out.println(filter.mightContain(2));
//將元素添加進布隆過濾器
filter.put(1);
filter.put(2);
System.out.println(filter.mightContain(1));
System.out.println(filter.mightContain(2));

在我們的示例中,當(dāng)mightContain()方法返回true時,我們可以 99%確定該元素在過濾器中,當(dāng)過濾器返回false時,我們可以 100%確定該元素不存在于過濾器中。

Guava 提供的布隆過濾器的實現(xiàn)還是很不錯的(想要詳細(xì)了解的可以看一下它的源碼實現(xiàn)),但是它有一個重大的缺陷就是只能單機使用(另外,容量擴展也不容易),而現(xiàn)在互聯(lián)網(wǎng)一般都是分布式的場景。為了解決這個問題,我們就需要用到 Redis 中的布隆過濾器了。

Redis 中的布隆過濾器

Redis v4.0 之后有了 Module(模塊/插件)功能,Redis Modules 讓 Redis 可以使用外部模塊擴展其功能 ,使用戶可以根據(jù)需要額外集成一些實用功能。






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • URL
    URL
    +關(guān)注

    關(guān)注

    0

    文章

    139

    瀏覽量

    15348
  • JAVA語言
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    20095
  • 過濾器
    +關(guān)注

    關(guān)注

    1

    文章

    429

    瀏覽量

    19614

原文標(biāo)題:聊聊布隆過濾器

文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    一文理解過濾器和布谷鳥過濾器

    作者:京東保險 王奕龍 最近在大促中使用到了過濾器,所以本次借著機會整理下相關(guān)內(nèi)容,并了解了布谷鳥過濾器,希望對后續(xù)學(xué)習(xí)的同學(xué)有啟發(fā)~
    的頭像 發(fā)表于 11-07 10:10 ?703次閱讀
    一文理解<b class='flag-5'>布</b><b class='flag-5'>隆</b><b class='flag-5'>過濾器</b>和布谷鳥<b class='flag-5'>過濾器</b>

    CN過濾器原理

    CN過濾器原理 CN過濾器采用整體玻璃鋼,耐酸耐堿,一般耐溫65℃。內(nèi)部裝有約半米高的懸浮介質(zhì)層。懸浮過濾介質(zhì)為1-2mm小球,采用高分子材料加工,密度大約
    發(fā)表于 02-25 15:00 ?26次下載

    過濾器的作用

    本視頻主要詳細(xì)介紹了過濾器的作用,分別是濾速高、過濾效果好;強度高、耐腐蝕;靜電作用;過濾物質(zhì);攔截;其次介紹了水龍頭過濾器的作用,最后介紹了活性炭
    的頭像 發(fā)表于 12-12 16:23 ?4.4w次閱讀

    如何使用計數(shù)型過濾器進行可排序密文檢索的方法概述

    云計算環(huán)境下密文檢索困難,已有的可搜索加密方案存在時間效率低、文件檢索索引不支持更新、檢索結(jié)果不能實現(xiàn)按精確度排序等問題。首先基于計數(shù)型過濾器構(gòu)建文件檢索索引,將文件集中的關(guān)鍵詞哈希映射到計數(shù)型
    發(fā)表于 01-02 15:17 ?1次下載
    如何使用計數(shù)型<b class='flag-5'>布</b><b class='flag-5'>隆</b><b class='flag-5'>過濾器</b>進行可排序密文檢索的方法概述

    解密高效空氣過濾器的性能及要求

    高效過濾器生產(chǎn)廠商 三河市科豐電氣有限公司高效過濾器。三河市科豐電氣有限公司致力于為通信行業(yè)、暖通行業(yè)、節(jié)能行業(yè),過濾行業(yè)等行業(yè)并提供專業(yè)配套產(chǎn)品和服務(wù)。高效過濾器產(chǎn)品具有
    發(fā)表于 03-19 14:56 ?2033次閱讀

    創(chuàng)新陶瓷過濾器解決方案

    創(chuàng)新陶瓷過濾器解決方案
    發(fā)表于 10-27 14:56 ?16次下載

    絲扣Y過濾器

    絲扣Y過濾器是Y過濾器的一種,普通濾材是不銹鋼或者碳鋼,濾芯普通帶有不銹鋼骨架。 絲扣Y形過濾器有時也叫做·不銹鋼內(nèi)螺紋Y過濾器。? ? 特性: ? 1.絲扣Y形
    的頭像 發(fā)表于 08-13 17:24 ?4116次閱讀

    絲扣Y過濾器過濾器測試原理簡介

    絲扣Y過濾器是Y過濾器的一種,普通濾材是不銹鋼或者碳鋼,濾芯普通帶有不銹鋼骨架。 絲扣Y形過濾器有時也叫做·不銹鋼內(nèi)螺紋Y過濾器。? 特性: 1.絲扣Y形
    發(fā)表于 09-05 09:27 ?2578次閱讀

    絲扣Y形過濾器

    絲扣Y形過濾器是保送介質(zhì)管道上不可短少的一種安裝,通常裝置在減壓閥、泄壓閥、定水位閥或其它設(shè)備的進口端,用來消弭介質(zhì)中的雜質(zhì),以維護閥門及設(shè)備的正常運用。 絲扣Y形過濾器有時也叫做·不銹鋼內(nèi)螺紋Y
    的頭像 發(fā)表于 10-24 15:03 ?3828次閱讀

    漢克森過濾器系列介紹

    漢克森過濾器 【1】國產(chǎn)品牌濾芯均為我司生產(chǎn)的替代原廠品牌濾芯,其過濾濾材采用德國原裝進口HV公司產(chǎn)品,注冊商標(biāo)為“佳潔”牌。本公司涉及的其它品牌均無品牌意義,只是作為產(chǎn)品型號參照和客戶選型對照
    發(fā)表于 03-01 08:53 ?1116次閱讀
    漢克森<b class='flag-5'>過濾器</b>系列介紹

    過濾器藥液過濾器濾除率測試儀

    過濾器藥液過濾器濾除率測試儀
    的頭像 發(fā)表于 03-09 14:53 ?914次閱讀
    <b class='flag-5'>過濾器</b>藥液<b class='flag-5'>過濾器</b>濾除率測試儀

    一文解析過濾器設(shè)計原理

    過濾器 是一個很長的二進制向量 和一系列隨機映射函數(shù) ,用于檢索一個元素是否在一個集合中 。 它的空間效率 和查詢時間 都遠遠超過一般的算法 ,但是有一定的誤判率 (函數(shù)返回 true , 意味著元素可能存在,函數(shù)返回
    發(fā)表于 05-12 11:14 ?640次閱讀
    一文解析<b class='flag-5'>布</b><b class='flag-5'>隆</b><b class='flag-5'>過濾器</b>設(shè)計原理

    貝騰過濾器濾芯

    貝騰過濾器濾芯
    的頭像 發(fā)表于 04-11 15:09 ?1121次閱讀
    貝騰<b class='flag-5'>過濾器</b>濾芯

    殺菌過濾器 滅菌過濾器 除菌過濾器

    殺菌過濾器 滅菌過濾器 除菌過濾器
    的頭像 發(fā)表于 03-03 14:03 ?2666次閱讀
    殺菌<b class='flag-5'>過濾器</b> 滅菌<b class='flag-5'>過濾器</b> 除菌<b class='flag-5'>過濾器</b>

    什么情況下需要過濾器

    什么情況下需要過濾器? 先來看幾個比較常見的例子 字處理軟件中,需要檢查一個英語單詞是否拼寫正確 在 FBI,一個嫌疑人的名字是否已經(jīng)在嫌疑名單上 在網(wǎng)絡(luò)爬蟲里,一個網(wǎng)址是否被訪問過 yahoo
    的頭像 發(fā)表于 11-11 11:37 ?661次閱讀
    什么情況下需要<b class='flag-5'>布</b><b class='flag-5'>隆</b><b class='flag-5'>過濾器</b>
    主站蜘蛛池模板: 啊灬啊灬啊灬快灬深高潮啦| 在线观看a视频| 亚洲精品色情APP在线下载观看| 99精品网站| 久久综合久久鬼色| 中文无码熟妇人妻AV在线| 国产在线综合色视频| 无码任你躁久久久久久久| 国产成人亚洲精品无广告| 三级视频网站| 国产成人无码精品久久久按摩| 色欲档案之麻雀台上淫| 国产99视频在线观看| 午夜影院一区二区三区| 国产免费播放一区二区三区| 亚洲AV精品无码成人| 国产在线观看码高清视频| 亚洲人成电影网站| 久久久精品久久久久特色影视| 在线观看视频中文字幕| 奶头从情趣内衣下露了出来AV| 99在线观看视频| 色99久久久久高潮综合影院| 国产精选视频在线观看| 亚洲精品自在在线观看| 久久99国产精品蜜臀AV| 中文成人在线视频| 欧美精品99久久久啪啪| 俄罗斯12一15处交| 午夜精品久久久久久影视riav | 无套内射CHINESEHD| 韩国甜性涩爱| 在线国内自拍精品视频| 欧美jizz19性欧美| 国产GV无码A片在线观看| 亚洲 欧美 综合 高清 在线| 精品一区二区三区AV天堂| 999国产高清在线精品| 日韩视频中文字幕精品偷拍| 国产亚洲欧洲日韩在线三区| 一品道门在线观看免费视频|