1.測試內容:算法
使用多種hash算法將文章標識翻譯成整型ID後的衝突數和衝突率的比較。函數
2.測試方法性能
1. CRC32:把任意長度的字符串經過散列算法,最終變換成固定長度(int32)的摘要輸出測試
2. Blizzard的Hashstring: 暴雪公司設計的字符串轉整型的hash函數,hash值爲int32.優化
3. BKDRHash: 經常使用的字符串哈希函數,hash值也爲int32.spa
4. MD5 :目前被大量普遍使用的散列算法之一。MD5散列長度一般是128bit.net
5. MD5 To 32bit:在MD5值的基礎上作壓縮,轉換成32位整型ID。翻譯
3.測試數據設計
全部文章key數 | 去重後的key數 |
4136019 | 4135999 |
4.測試結果blog
5.結果分析
1.想直接用生成int32的hash函數來翻譯文章的key,產生衝突的數會比較多。
2.MD5雖然能保證對文章key不衝突,但生成的值不是整型,不友好。
3.對MD5壓縮翻譯成整型值(至關於二次hash),能夠下降衝突,但性能開銷明顯增大(看最後一列時間對比)。
6.思考:
對於用純hash算法完成翻譯文章key的方式,衝突理論上確定存在,咱們只能但願儘可
能地減小衝突(410多萬數據最多幾十次衝突),同時還要考慮性能!
接下來還能夠走的路,尋找更大hash值的算法,或者優化組合下降二次hash的性能損
耗。
或者最終另闢蹊徑,跳出純算法的思惟,尋找更合適的方法!