hash函数MurmurHash
一、介绍
MurmurHash算法:高运算性能,低碰撞率,由Austin Appleby创建于2008年,现已应用到Hadoop、libstdc++、nginx、libmemcached等开源系统。2011年Appleby被Google雇佣,随后Google推出其变种的CityHash算法。
Java界中Redis,Memcached,Cassandra,HBase,Lucene都用它。
在Java的实现,Guava的Hashing类里有,上面提到的Jedis,Cassandra里都有Util类。
但存在的问题是由于Java的数据类型long与C语言中无符号长整型uint64_t有区别,导致Java输出版本存在负数,针对这个问题进行了修改;另外需要注意的是中文不同编码(UTF-8或GBK)会导致输出结果的不同,使用中需要统一编码。
二、原理
算法图例
三、性能测试对比
import java.nio.charset.StandardCharsets;
import org.apache.commons.codec.digest.DigestUtils;
import com.google.common.hash.Hashing;public class Test {public static void main(String[] args) {System.out.println(murmur3Test("334324324234234sfsfsdfwwrtregreg"));long startTime=System.currentTimeMillis();for (int i = 0; i < 10000000; i++) {Test.md5Test("KFETHGRETWERFSDFWEFWEFWF");}long endTime=System.currentTimeMillis();System.out.println("1000万次md5Test算法程序运行时间: " + (endTime - startTime ) + "ms");long startTime2=System.currentTimeMillis();for (int i = 0; i < 10000000; i++) {Test.murmur3Test("KFETHGRETWERFSDFWEFWEFWF");}long endTime2=System.currentTimeMillis();System.out.println("1000万次murmur3Test算法程序运行时间: " + (endTime2 - startTime2 ) + "ms");}public static String murmur3Test(String primaryKey) {return Hashing.murmur3_32().hashString(primaryKey, StandardCharsets.UTF_8).toString() + "_" + primaryKey;}public static String md5Test(String primaryKey) {return DigestUtils.md5Hex(primaryKey)+ "_" + primaryKey;}}
输出:
539aa3e7_334324324234234sfsfsdfwwrtregreg
1000万次md5算法程序运行时间: 4420ms
1000万次murmur3Test算法程序运行时间: 1902ms
结论:
MurmurHash算法比md5快一倍。
四、使用场景
1、根据uuid,通过hash算法进行取模分库分表
2、用来计算出key的slot值
3、短链接
五、其他算法
ketamahash一致性哈希算法
由若干固定的虚拟节点来计算出每个虚拟节点的slots,数据存储的时候,算出key的slot值,然后存入相邻最近的虚拟节点
hash函数MurmurHash相关推荐
- Hash 函数资源链接汇总
Hash 链接: [1]General Purpose Hash Function Algorithms:http://www.partow.net/programming/hashfunctions ...
- hash函数的简单介绍
HASH函数 应用Hash函数 作者:冲处宇宙 时间:2007.1.25 计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的 ...
- Hash函数的安全性
我们为了保证消息的完整性,引进了散列函数,那么散列函数会对安全正造成什么影响呢?这是需要好好研究一番的问题. 三个概念: 1.如果y<>x,且h(x)=h(y),则称为碰撞. 2.对于给定 ...
- HashMap中的hash函数
在写一个HashSet时候有个需求,是判断HashSet中是否已经存在对象,存在则取出,不存在则add添加.HashSet也是通过HashMap实现,只用了HashMap的key,value都存储一个 ...
- 文本去重之MinHash算法——就是多个hash函数对items计算特征值,然后取最小的计算相似度...
来源:http://my.oschina.net/pathenon/blog/65210 1.概述 跟SimHash一样,MinHash也是LSH的一种,可以用来快速估算两个集合的相似度.MinHas ...
- Cuckoo hash算法分析——其根本思想和bloom filter一致 增加hash函数来解决碰撞 节省了空间但代价是查找次数增加...
基本思想: cuckoo hash是一种解决hash冲突的方法,其目的是使用简单的hash 函数来提高hash table的利用率,同时保证O(1)的查询时间 基本思想是使用2个hash函数来处理碰撞 ...
- Hash函数及其应用
本文部分内容摘自网络,参考资料链接会在文后给出,在此感谢原作者的分享. 计算理论中,没有Hash函数的说法,只有单向函数的说法.所谓的单向函数,是一个复杂的定义,大家可以去看计算理论或者密码学方面的数 ...
- 常见的一些 Hash 函数
Hash的主要原理就是把大范围映射到小范围:所以,你输入的实际值的个数必须和小范围相当或者比它更小.不然冲突就会很多. 不同的应用对Hash函数有着不同的要求:比如,用于加密的Hash函数主要考虑它和 ...
- 认知理论与技术(hash函数,SHA,MD
概述: 认证是个过程,通过这个过程一个实体向另一个实体证明某种声称的属性 认证参数: "口令"相当于平时登录系统时输入的密码. "密钥"相当于公钥密码体制中的私 ...
最新文章
- 牛客网【每日一题】5月8日题目精讲 codeJan与旅行
- 完整的WebApplication JSF EJB JPA JAAS –第2部分
- leetcode 872. 叶子相似的树(dfs)
- 【转】卷积的本质及物理意义(全面理解卷积)
- 国科大prml14-独立于算法的机器学习(boosting/
- 交易引擎的对账状态为空的处理方式
- Flask中那些特殊的装饰器
- centos7部署posgresql和kong总结
- Git显示漂亮日志的小技巧
- iframe页面使用Js实现父页面和子页面通信
- Linux系统-Ubuntu的下载和安装
- 华为NP课程笔记24-BFD
- 2023年计算机网络考研真题详解
- mac安装telnet命令
- js获取当前服务器信息,js获取当前URL、参数、端口、IP等服务器信息
- html 表格 分页源码,JS代码实现table数据分页效果
- 手机h5像素_拍照超逆天!华为P30大奖来袭 | 4000万像素+50倍变焦,漳州手机摄影界真要沸腾了......
- 配置管理工作职责思考
- 不可不学的摄影技巧.1—构图
- 百度地图小区边界爬取
热门文章
- java.securti_springboot集成springsecurity 使用OAUTH2做权限管理的教程
- vs code linux 权限,在linux系统中安装VSCode(Visual Studio Code)
- 技术突破寻找新思路,互联网内容的风控与风口
- 小冰与老东家微软达成战略合作,并宣布数亿元Pre-A轮融资,将全面开展商业化
- 低代码已至,传统开发方式是否还有必要?
- 字节跳动斩获支付牌照欲建金融帝国,技术实力配得上野心吗?
- 600岁故宫插上科技翅膀 技术与营销的「双刃剑」?
- 微软想让所有人都成为开发者?
- 详解 URLLC 前世今生,你 Get 了吗?
- 还在这样学 Python?怪不得白费力!