哈希——布隆過濾器 查黑名單(大數據 100億數據)


 查黑名單(大數據 100億數據)  

不理想的是:

1.使用哈希表來查(要使用非常大的空間)

2.改進:使用哈希分流,然后將使用多個計算機處理(浪費機器,代價高)

 

理想的是使用布隆過濾器(一種集合,但是有失誤率,不屬於黑名單的url可能會被認為在黑名單中,誤報):

使用的是基本數據類型的數組

然后使用數組中的bit位

如  int 型 數據 4個字節,32bit,int [] array = new int[1000];可以表示32*1000個位置

例:將某個位置描黑index:

1.這個bit位來自哪個整數:intIndex = index / 32

2.這個位置是這個整數的具體哪個bit:bitIndex = index % 32

3.描黑操作(找到相應的bit位):array[intIndex] = (array[intIndex] | (1 << bitIndex)); 

 

 也可以用long類型的(64bit),

long [] array = new long[1000]  1000*64 個位置

long[][] array = new long[1000][1000]  1000*1000*64 個位置

 

每個url經過k個哈希函數(相互獨立的),對應相應位置上描黑,所有黑名單中每個url都描黑之后,整個布隆過濾器的數組相應位置就被描黑了

當檢查url時,計算k個哈希函數的位置,當所有的位置都是黑的的情況下,就認為在過濾器中,否則就不在

 

 

樣本量 n:100億, 失誤率 p:0.0001萬分之一

1.需要開的空間大小m    大小為bit:

          m = 1,879,591,836,735 bit

其中n 為樣本量,p為預期失誤率

 

實際的字節 m / 8       1,879,591,836,735 bit / 8 = 234948979591字節   =23.3G(向上取整)  內存

 

2.哈希函數的個數k:

   k = 13  (向上取整)

注:m和k向上取整

3.根據m和k向上取整之后,真實的失誤率:

   p=6/十萬

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM