CityHash / FarmHash
CityHash & FarmHash
设计者
Google (Geoff Pike 等)
首次发布
CityHash: 2011
FarmHash: 2014
FarmHash: 2014
类别
非加密哈希函数
输出长度
32 / 64 / 128 bit
速度
~6-8 GB/s
许可证
MIT / Apache 2.0
CityHash和FarmHash是由 Google 设计的两个相关的非加密哈希函数族。CityHash 于 2011 年发布,专为字符串哈希优化;FarmHash 于 2014 年发布作为其继任者,改进了碰撞质量和跨平台一致性。
CityHash
CityHash 由 Google 的 Geoff Pike 和 Jyrki Alakuijala 设计,最初用于 Google 内部的字符串哈希需求。主要变体包括:
- CityHash32:32位输出,用于小型哈希表
- CityHash64:64位输出,最常用的变体
- CityHash128:128位输出,用于需要极低碰撞率的场景
FarmHash
FarmHash 是 CityHash 的继任者,同样由 Google 的 Geoff Pike 设计。主要改进包括:
- 更好的碰撞率分布
- 在不同平台(x86/ARM)间更一致的行为
- 对短字符串的专门优化
- 提供了 FarmHasher 接口,支持增量式哈希
应用
- Google 内部大量使用
- WebRTC 的哈希表实现
- LevelDB / RocksDB 的 Bloom Filter
- Go 语言标准库早期使用 FarmHash(后改为自定义的 memhash)
参考文献
- Pike, G., Alakuijala, J. (2011). "CityHash". Google Open Source Blog.
- Pike, G. (2014). "FarmHash: A New Family of Hash Functions". Google Open Source Blog.