布隆過濾器

布隆過濾器概述

布隆過濾器解決這樣一個問題,假設有一個搜索引擎公司,在他公司的服務器上,有100億條URL黑名單,當你搜索某個URL的時候,服務器就會檢測這些URL在不在黑名單,如果在,就不顯示,如果不在,就顯示

首先算一下這個100億的URL佔多大存儲空間,假設一個URL是64字節,算下來總共大概640GB

要求:

  1. 該系統允許有萬分之一以下的失誤率
  2. 使用的額外空間不能超過30GB

哈希函數

在瞭解布隆過濾實現之前先認識哈希函數

哈希函數的性質:

  1. 經典哈希函數的輸入域無窮大
  2. 輸出域有窮
  3. 哈希函數沒有隨機值。★即輸入一樣,輸出也一樣★
  4. 因爲輸入域無窮大,輸出域有窮,所以必定存在多個輸入對應一個輸出
  5. 由於哈希函數的離散性,所有的輸入總是“均勻的”分佈在所有的輸出中。例如:有0~98個輸入,輸出 0~2。在0位置有33個左右的輸入,其他也相同
  6. 離散性的推論:當所有的輸入對應的輸出都模一個數m,那麼在輸出0~m-1上也是“均勻分佈的”

布隆過濾器

如果把黑名單中所有的URL通過數據庫或哈希表保存下來,就可以對每條URL進行查詢,但是至少需要640GB的空間,不滿足要求

如果遇到網頁黑名單系統、垃圾郵件過濾系統、爬蟲的網址判重系統等問題,又看到系統容忍一定程度的失誤率,但是對空間要求比較嚴格,那麼很可能就需要用到布隆過濾器。一個布隆過濾器精確地代表一個集合,並可以精確判斷一個元素是否在集合中。注意,只是精確代表和精確判斷,到底有多少精確呢?則完全在於你具體的設計,但想做到完全正確是不可能的。布隆過濾器的優勢在於使用很少的空間就可以將準確率做到很高的程度。

假設有一個長度爲m的bit類型的數組,即數組中的每一個位置只佔一個bit,每一個bit只有0和1兩種狀態。再假設有k個哈希函數,這些函數的輸出域S都大於或等於m,並且這些哈希函數都足夠優秀,彼此

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章