布隆過濾器總結
阿新 • • 發佈:2019-12-22
一:布隆過濾器簡介:
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