#hash #murmur3 #hashing #murmur #hash-values

fastmurmur3

快速非加密哈希,有基准测试为证

2个不稳定版本

0.2.0 2023年6月19日
0.1.2 2021年12月14日

#636密码学

Download history 1204/week @ 2024-03-14 1504/week @ 2024-03-21 1454/week @ 2024-03-28 2046/week @ 2024-04-04 1895/week @ 2024-04-11 2516/week @ 2024-04-18 1934/week @ 2024-04-25 3425/week @ 2024-05-02 6614/week @ 2024-05-09 4742/week @ 2024-05-16 6487/week @ 2024-05-23 6807/week @ 2024-05-30 8011/week @ 2024-06-06 8740/week @ 2024-06-13 9531/week @ 2024-06-20 11674/week @ 2024-06-27

38,974 每月下载量
用于 21 个crate (10 直接)

MIT 协议

17KB
296 代码行

GitHub Contributors Stars Build Status Downloads Crates.io

Fastmurmur3

Murmur3是一种快速的非加密哈希函数。在我的测试中,fastmurmur3是Murmur3最快的实现。

使用方法

let bytes: &[u8] = b"hello world";
let x: u128 = fastmurmur3::hash(bytes);

安装

cargo install fastmurmur3

基准测试

摘要

根据当前的基准测试

  • fastmurmur3是最快的。
  • xxh3_64慢了1.66倍,并且只有64位值。
  • xxh3_128慢了2.50倍。
  • fasthash包含下一个最快的Murmur3实现,但仍然比fastmurmur3慢4.47倍。

数据

fastmurmur3             time:   [3.0878 ns 3.1215 ns 3.1619 ns]
xxhash_rust::xxh3_64    time:   [5.1473 ns 5.1872 ns 5.2456 ns]
xxhash_rust::xxh3_128   time:   [7.8066 ns 7.8271 ns 7.8499 ns]
fasthash                time:   [13.909 ns 13.960 ns 14.018 ns]
murmur3c                time:   [14.529 ns 14.604 ns 14.684 ns]
murmur3                 time:   [26.084 ns 26.163 ns 26.249 ns]
twox_hash::Xxh3Hash64   time:   [124.23 ns 126.46 ns 128.55 ns]
twox_hash::Xxh3Hash128  time:   [134.62 ns 136.75 ns 138.77 ns]
sha1                    time:   [209.55 ns 211.71 ns 214.88 ns]

基准测试未来工作

  • 这些基准测试是在有限输入集和有限种子集上运行的。在确定性地声称fastmurmur3是最快的非加密哈希函数之前,需要运行更广泛的基准测试。

  • 我不确定这些基准测试是否因为链接(即Rust函数被完全内联,而C实现因为链接算法而保持为独立的fn调用)而不公平于参考C实现。

  • 除了速度,这些基准测试还可以测量与其他算法(如xxhash等)的比较中的其他哈希属性,如抗碰撞性。

  • 有一个很棒的基准测试图表会很好。

  • 我想了解是否有我可以采取的步骤来使基准测试更具可重复性(例如,设置进程优先级,如果遇到内存竞争则失败等)。

  • 我想改进基准测试的输出,并将其抽象为更好的比较工具。目前,cargo bench和cargo criterion是为跟踪项目随时间推移的性能而构建的。我希望有一个更好的库来比较基准组内的性能。

正确性

fastmurmur3的测试与C实现进行了模糊测试。

贡献

贡献使得开源社区成为一个如此美妙的学习、灵感和创造的地方。你做出的任何贡献都备受赞赏。

如果你有改进这个项目的建议,请Fork仓库并创建一个Pull Request。你也可以简单地创建一个带有“增强”标签的问题。别忘了给项目点个赞!再次感谢!

  1. Fork项目
  2. 创建你的功能分支 (git checkout -b feature/AmazingFeature)
  3. 提交您的更改 (git commit -m '添加一些令人惊叹的功能')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开拉取请求

无运行时依赖