1. 程式人生 > >布隆過濾器總結

布隆過濾器總結

一:布隆過濾器簡介:

  Bloom Filter是一種空間效率很高的隨機資料結構,它利用位陣列很簡潔地表示一個集合,並能判斷一個元素是否屬於這個集合。Bloom Filter的這種高效是有一定代價的:在判斷一個元素是否屬於某個集合時,有可能會把不屬於這個集合的元素誤認為屬於這個集合(false positive)。因此,Bloom Filter不適合那些“零錯誤”的應用場合。而在能容忍低錯誤率的應用場合下,Bloom Filter通過極少的錯誤換取了儲存空間的極大節省。

二:優勢和劣勢

1:優勢:

①:僅僅保留資料的指紋資訊,空間效率極高

②:資訊保安性極高

③:查詢效率極高,時間複雜度為O(N)

2:劣勢 :

①:存在一定的誤判

②:刪除資料困難

三:常用API總結:

引入Google的guava java API包,常用方法有:create(Funnel<? super T> funnel, int expectedInsertions, double fpp); put(T object); mightContain(T object) ; 

四:使用場景: 

  布隆過濾器在redis叢集的上一步,主要是判斷資料是否存在於布隆過濾器中,這樣減少對redis伺服器的壓力。布隆過濾器其原理就是把大資料量載入到記憶體中,判斷資料是否存在。大資料量載入到記憶體中,這樣容易導致OOM。一般是在應用啟動的時候,進行初始化把資料載入到布隆過濾器中。布隆過濾器所需要佔記憶體公式為:設bit陣列大小為m,樣本數量為n,失誤率為p。由題可知 n = 500萬,p = 3%(Google布隆過濾器預設為3%,我們也可以修改),公式為:

五:與redis伺服器整合:

&n