MurmurHash

1MurmurHash简介

Murmur英文 (multiply and rotate) and (multiply and rotate),MurmurHash是一种非加密型哈希函数,适用于一般的哈希检索操作。由Austin Appleby在2008年发明,并出现了多个变种,都已经发布到了公有领域(public domain)。与其它流行的哈希函数相比,对于规律性较强的key,MurmurHash的随机分布特征表现更良好。

Austin Appleby被邀到google工作,MurmurHash3算法是最新版本,基于MurmurHash2改进了一些小瑕疵,使得速度更快,实现了32位(低延时)、128位HashKey,尤其对大块的数据,具有较高的平衡性与低碰撞率。

2MurmurHash的应用

Redis在实现字典时用到了两种不同的哈希算法,MurmurHash便是其中一种(另一种是djb),在Redis中应用十分广泛,包括数据库、集群、哈希键、阻塞操作等功能都用到了这个算法。

Cassandra的数据模型以及Partition Key,同时Cassandra维护了一个令牌环,这样当写入一条数据或者需要读取数据的时候,就知道首先去哪一台机器执行相应的操作。在底层支撑令牌的算法,就是默默无闻但是几乎一统江湖的MurmurHash算法。

如Hadoop、libstdc++、nginx、libmemcached、常见的大数据库底层,都使用了这个MurmurHash算法作为底层的存储算法。

3实现代码

MurmurHash2实现代码:

uint32_t

MurmurHash2 ( const void * key, int len, uint32_t seed )

{

// 'm' and 'r' are mixing constants generated offline.

// They're not really 'magic', they just happen to work well.

const uint32_t m = 0x5bd1e995;

const int r = 24;

// Initialize the hash to a 'random' value

uint32_t h = seed ^ len;

// Mix 4 bytes at a time into the hash

const unsigned char * data = (const unsigned char *)key;

while(len >= 4)

{

uint32_t k = *(uint32_t*)data;

k *= m;

k ^= k >> r;

k *= m;

h *= m;

h ^= k;

data += 4;

len -= 4;

}

// Handle the last few bytes of the input array

switch(len)

{

case 3: h ^= data[2] << 16;

case 2: h ^= data[1] << 8;

case 1: h ^= data[0];

h *= m;

};

// Do a few final mixes of the hash to ensure the last few

// bytes are well-incorporated.

h ^= h >> 13;

h *= m;

h ^= h >> 15;

return h;

}

参考链接:

murmurhash 下载_MurmurHash相关推荐

  1. murmurhash 下载_MurmurHash3?

    HashMap面试必问的6个点,你知道几个? 一.HashMap的实现原理? 此题可以组成如下连环炮来问 你看过HashMap源码嘛,知道原理嘛?为什么用数组+链表?hash冲突你还知道哪些解决办法? ...

  2. iphone开发笔记和技巧总结

    在iphone程序中实现截屏的一种方法: //导入头文件   #importQuartzCore/QuartzCore.h //将整个self.view大小的图层形式创建一张图片imageUIGrap ...

  3. 【流媒体开发】VLC Media Player - Android 平台源码编译 与 二次开发详解 (提供详细800M下载好的编译源码及eclipse可调试播放器源码下载)

    作者 : 韩曙亮  博客地址 : http://blog.csdn.net/shulianghan/article/details/42707293 转载请注明出处 : http://blog.csd ...

  4. python如何下载安装spacy_SpaCy下载及安装

    SpaCy可以说是坑多到怀疑人生.. 但是看在它那么功能那么强大的份上,我还是决定原谅它哈哈哈~ 1.首先用官网给的命令快速安装纯属扯淡..(结果就是一直拒绝你的连接) 官网是说用下面的两行命令就能够 ...

  5. python 导入sklearn时报错: no model named ‘murmurhash‘

    今天在跑机器学习相关的代码,一小时前还好好的,一小时后突然在import sklearn这行代码上报错,报的就是没有murmurhash. 搜了半天也不知道这是个啥问题,而且明明不久前代码还好好的. ...

  6. SpaCy下载及安装

    1.官网给的命令快速安装基本没用!!(结果就是一直拒绝你的连接) 官网:https://spacy.io/ 官网是说用下面的两行命令就能够快速安装并使用spacy了,第一行命令是可以很快就成功,但是第 ...

  7. MurmurHash PK CityHash

    MurmurHash PK CityHash 标签: 算法测试alignmentgooglenull语言 2012-03-14 21:08 14636人阅读 评论(2) 收藏 举报  分类: c/c+ ...

  8. Alibaba Cloud Linux 2.1903 LTS 64位服务器yum源下载404,Alibaba Cloud Linux 2实例中使用docker-ce、epel等YUM源安装软件失败

    [Alibaba Cloud Linux 2.1903 LTS 64位]服务器yum源下载404 failure: repodata/repomd.xml from docker-ce-stable: ...

  9. Redis学习之路(一)--下载安装redis

    redis学习之路--下载安装redis windows安装redis 1.下载redis 2.安装 3.查看是否安装成功 windows安装redis 1.下载redis 网址:https://gi ...

最新文章

  1. win32: 查询滚动条相关信息的注意事项
  2. python生成条形图-Python处理JSON数据并生成条形图
  3. 【杂文】企业数字化转型展望—角色转型
  4. 查找域内所有的Windows Server 2012 R2的服务器,并区分出哪些是物理机,那些是虚拟机...
  5. Extjs TreeNode的图标元素。 (节点图标, expand的加减号)
  6. Android6.0 dump h264/h265编码裸流(二)
  7. 在局域网中用联通的3G无线上网卡后的静态路由的命令行
  8. 修改本地AD帐号名称后无法同步到Office 365
  9. 关于怎样写商业计划书
  10. 修身齐家治国平天下  读《战国策》和《编程卓越之道》有感
  11. 开发微信小程序的必备技能图谱
  12. 经典:统计字符串中汉字,英文,数字,特殊符号个数
  13. 微信服务号、订阅号和企业号的差别(运营和开发两个角度)
  14. 风吹过,云散了,影子淡了
  15. NAS如何进行磁盘碎片整理?
  16. 企业微信朋友圈和个人微信朋友圈有哪些区别?
  17. 日本某地发生了一件谋杀案
  18. 测试中缺陷的管理流程
  19. 苹果电脑以及iPhone上截屏的方法介绍
  20. Jira Servcie Desk使用教程(十四):如何接收来自电子邮件的请求?

热门文章

  1. public static void main(String[] args) 的介绍
  2. Excel固定首行或首列
  3. 大咖 | “大数据之父”达文波特:成功的数据科学家不一定要有研究生学位
  4. 皮卡丘的梦想2(线段树+二进制状态压缩)
  5. 自编码-李宏毅深度学习/机器学习
  6. 如何有效开展小组教学_如何实施有效的小组合作学习
  7. 有害突变预测软件--PROVEAN
  8. idea debug模式,进不了断点
  9. Linux 7z命令的安装和使用
  10. 一款在使用中的车牌选号系统开发