爬蟲數據去重:
- 使用MD5生成指紋判斷頁面是否變化
- 數據存入mongodb,對關鍵字進行復合索引(千萬如下)
- 對數據關鍵字進行哈希映射,生成指紋判斷是否在redis的指紋集合中,並可經過是否過濾判斷request對象是否進隊,對request對象進行過濾(千萬級別)
- 布隆過濾器,實現大數據去重(億級別)
布隆過濾器:
實現:
- 先經過預期失誤率p、指望樣本數量n,計算須要的位數組長度m
m=-n*lnp / (ln2)**2redis
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,全爲1則存在
原理:hashmap
- 能夠將值映射到hashmap的key,在O(1)時間複雜度內返回結果
- hashmap的默認長度爲16,每次擴展都是2的次冪
哈希函數特性:
- 哈希碰撞:哈希函數不一樣的輸入能夠獲得相同輸出結果,輸入域有限,輸出域無限
- 離散性:輸出域每一個結果在整個輸出域中都是均勻分佈的