爬蟲數據去重-布隆過濾器

爬蟲數據去重:

  • 使用MD5生成指紋判斷頁面是否變化
  • 數據存入mongodb,對關鍵字進行復合索引(千萬如下)
  • 對數據關鍵字進行哈希映射,生成指紋判斷是否在redis的指紋集合中,並可經過是否過濾判斷request對象是否進隊,對request對象進行過濾(千萬級別)
  • 布隆過濾器,實現大數據去重(億級別)

布隆過濾器:

 實現:

  • 先經過預期失誤率p、指望樣本數量n,計算須要的位數組長度m

    m=-n*lnp  /  (ln2)**2redis

  • 再計算哈希函數個數k

    k=ln2 * m/nmongodb

  • 再根據m、n、k,計算真實的失誤率,由於m,k向上調整,因此真實失誤率 < 預期失誤率

    p=(1-e**(-nk/m))**k數組

  • 將數據(key)經過k個哈希函數獲得k個哈希值
  • 將獲得的哈希值對m取模運算,獲得位數組對應的索引位置

    index=HashCode(key)&(m-1)函數

  1. 若是保存,將位數組中對應的索引位置變爲1
  2. 若是查詢,判斷位數組對應的索引是否全爲1,全爲1則存在

 原理:hashmap

  • 能夠將值映射到hashmap的key,在O(1)時間複雜度內返回結果
  • hashmap的默認長度爲16,每次擴展都是2的次冪

 哈希函數特性:

  • 哈希碰撞:哈希函數不一樣的輸入能夠獲得相同輸出結果,輸入域有限,輸出域無限
  • 離散性:輸出域每一個結果在整個輸出域中都是均勻分佈的
相關文章
相關標籤/搜索