.Net Core 中的 MurmurHash

    MurmurHash 是一种非加密型哈希算法,适用于一般的哈希检索操作,具有高性能、低碰撞率的特点。由 Google 的工程师 Austin Appleby 于2008年创建。MurmurHash 与其它流行的哈希函数相比,对于规律性较强的 Key,其随机分布特征表现的更好。非加密意味着着相对 MD5,SHA 这些函数它的性能更高(性能是 MD5 等加密算法的十倍以上),也正是由于它的这些优点,所以虽然它出现于2008年,但目前已经广泛应用到 Redis 等众多著名的软件中。MurmurHash 提供了两种长度的哈希值,32 bit,128 bit。MurmurHash 的英文为:(multiply and rotate) and (multiply and rotate)。

    最新版本是 MurmurHash3,基于MurmurHash2 改进了一些小瑕疵,使得速度更快,尤其对大块的数据,具有较高的平衡性与低碰撞率。

    .Net Core 使用 MurmurHash 要先使用 NuGet 添加 System.Data.HashFunction.MurmurHash 这个包。

1
2
3
4
5
6
7
8
//using System.Data.HashFunction.MurmurHash;
byte[] srcBytes = Encoding.UTF8.GetBytes("001");
// HashSizeInBits=32 or 128
var cfg = new MurmurHash3Config() { HashSizeInBits = 32,  Seed = 0 };
var mur = MurmurHash3Factory.Instance.Create(cfg);
var hv = mur.ComputeHash(srcBytes);
var base64 = hv.AsBase64String();
var hashBytes = hv.Hash;

对于规律性较强的 key,MurmurHash 的随机分布特征表现更良好,简单测试如下:
String   Hash值(Base64)
001 => oPj2oQ
002 => HWDyLA
003 => Qiz+PQ

虽然字符串 001,002,003 有规律,但其 Hash 值 oPj2oQ,HWDyLA,Qiz+PQ 已经没有规律了;

 

String   Hash值(Base64)
ade => HGGhPQ
bde => Ourovw
cde => slivpw

虽然字符串 ade,bde,cde 有规律,但其 Hash 值 HGGhPQ,Ourovw,slivpw 已经没有规律了。

 

HashSizeInBits=128时, Base64的Hash值长度是22位;HashSizeInBits=32时, Base64的Hash值长度只有6位;6位长度Hash值,很适合用于一般的哈希检索。

英文 (multiply and rotate) and (multiply and rotate)

posted on   大豆男生  阅读(1118)  评论(0编辑  收藏  举报

编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示