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的性能损
耗。
或者最终另辟蹊径,跳出纯算法的思惟,寻找更合适的方法!