簡述布隆過濾器

2022-05-07 07:09:07 字數 1547 閱讀 1257

目錄

1. 什麼是布隆過濾器

2. 應用場景

3. 布隆過濾器原理

判斷某個key一定不存在

1. 本質上布隆過濾器是一種資料結構,比較巧妙的概率型資料結構

2. 特點是高效地插入和查詢,可以用來告訴你 「某樣東西一定不存在或者可能存在」。

3. 相比於傳統的 list、set、map 等資料結構,它更高效、占用空間更少,但是缺點是其返回的結果是概率性的,而不是確切的。

使用:

布隆過濾器在nosql資料庫領域中應用的非常廣泛

當使用者來查詢某乙個row時,可以先通過記憶體中的布隆過濾器過濾掉大量不存在的row請求,然後去再磁碟進行查詢

布隆過濾器說某個值不存在時,那肯定就是不存在,可以顯著降低資料庫io請求數量

1)場景1(給使用者推薦新聞)

1. 當使用者看過的新聞,肯定會被過濾掉,對於沒有看多的新聞,可能會過濾極少的一部分(誤判)。

2. 這樣可以完全保證推送給使用者的新聞都是無重複的。

2)場景2(爬蟲url去重)

1. 在爬蟲系統中,我們需要對url去重,已經爬取的頁面不再爬取

2. 當url高達幾千萬時,如果乙個集合去裝下這些url位址非常浪費空間

3. 使用布隆過濾器可以大幅降低去重儲存消耗,只不過也會使爬蟲系統錯過少量頁面

布隆過濾器(bloom filter)的核心實現是乙個超大的位陣列和幾個雜湊函式。假設位陣列的長度為m,雜湊函式的個數為k

以上圖為例,具體的操作流程:假設集合裡面有3個元素,雜湊函式的個數為3。首先將位陣列進行初始化,將裡面每個位都設定位0。對於集合裡面的每乙個元素,將元素依次通過3個雜湊函式進行對映,每次對映都會產生乙個雜湊值,這個值對應位陣列上面的乙個點,然後將位陣列對應的位置標記為1。查詢w元素是否存在集合中的時候,同樣的方法將w通過雜湊對映到位陣列上的3個點。如果3個點的其中有乙個點不為1,則可以判斷該元素一定不存在集合中。反之,如果3個點都為1,則該元素可能存在集合中。注意:此處不能判斷該元素是否一定存在集合中,可能存在一定的誤判率。可以從圖中可以看到:假設某個元素通過對映對應下標為4,5,6這3個點。雖然這3個點都為1,但是很明顯這3個點是不同元素經過雜湊得到的位置,因此這種情況說明元素雖然不在集合中,也可能對應的都是1,這是誤判率存在的原因。

新增元素

將要新增的元素給k個雜湊函式

得到對應於位陣列上的k個位置

將這k個位置設為1

查詢元素

將要查詢的元素給k個雜湊函式

得到對應於位陣列上的k個位置

如果k個位置有乙個為0,則肯定不在集合中

如果k個位置全部為1,則可能在集合中

布隆過濾器

布隆過濾器 bloom filter 是1970年由布隆提出的。它實際上是乙個很長的二進位制向量和一系列隨機對映函式。布隆過濾器可以用於檢索乙個元素是否在乙個集合中。它的優點是空間效率和查詢時間都遠遠超過一般的演算法,缺點是有一定的誤識別率和刪除困難。如果想要判斷乙個元素是不是在乙個集合裡,一般想到...

布隆過濾器

布隆過濾器的概念 如果想要判斷乙個元素是不是在乙個集合裡,一般想到的是將所有元素儲存起來,然後通過比較確定。鍊錶,樹等等資料結構都是這種思路.但是隨著集合中元素的增加,我們需要的儲存空間越來越大,檢索速度也越來越慢 o n o logn 不過世界上還有一種叫作雜湊表 又叫 雜湊表,hash tabl...

布隆過濾器

如果想判斷乙個元素是不是在乙個集合裡,一般想到的是將集合中所有元素儲存起來,然後通過比較確定。鍊錶 樹 雜湊表 又叫雜湊表,hash table 等等資料結構都是這種思路。但是隨著集合中元素的增加,我們需要的儲存空間越來越大。同時檢索速度也越來越慢。bloom filter 是一種空間效率很高的隨機...