高性能哈希算法MurmurHash

news2024/9/20 19:41:09

参考链接:

https://blog.51cto.com/u_15127622/3264772

md5算法_十分钟掌握高性能哈希算法MurmurHash_weixin_39616339的博客-CSDN博客

Murmur哈希算法

一种非加密型哈希算法,适用于一般的哈希检索操作,由Austin Appleby创建于2008年。

之所以说是非加密型,与追求安全的MD5算法不同,它不是专门设计为不可逆转破解,而是追求高性能与低碰撞率Murmur哈希算法名称由来就是它的计算过程:Multiply and Rotate,且在哈希的过程中需要经历多次Multiply and Rotate,因此取名叫Murmur。在Github上托管,名为“SMHasher” 的测试套件。 它也存在许多变种,所有这些变种都已经被公开。 该名称来自两个基本操作,乘法(MU)和旋转(R),在其内部循环中使用。

2011年Appleby被Google雇佣,随后Google推出其变种的CityHash算法

一致性哈希算法的主要步骤:

1.首先求出缓存服务器结点的哈希值,将其映射到0~2^32的环上;
2.然后用同样的方法求出存储数据的键的哈希值,并映射到环上;
3.最后是从数据映射的位置顺时针查找,将数据发送给找到的第一个服务器上。


一、一致性哈希原理
根据上述对于一致性哈希算法思想以及步骤的描述,它的基本原理及过程如图1所示:

二、处理哈希偏斜
  由于每个服务器在环上的分布是不均匀的,所以就有可能会存在哈希偏斜的问题,如图2所示;解决这一问题所采用的方法就是引用虚拟结点;如果这三个服务器按照如图2的样子进行排列,那么在0~1之间的哈希值都会交给1进行处理,1~ 2之间的哈希值都会交给2进行处理,2~0之间的哈希值都会交给0进行处理,这样导致的结果就是0的负载是太大,当0服务器撑不住崩溃后,会陆续使得1和2的负载增大导致整个服务器集群崩溃这种分布就称为哈希偏斜;

  所以我们引入虚拟结点,解决这一问题;这样2~1之间的哈希值就不会全部交给0来处理,而是照样根据顺序查找,当查找到某虚拟结点时,根据结点之间的关系映射到真实的结点上让其进行处理;

三、一致性哈希的优点
  相比于直接哈希来讲,一致性哈希算法的优点在于每个服务器都不会受到其他服务的增加或删除的影响。对于一致性哈希,当需要从环中删掉一个服务器时,其他的服务器不会被其干扰,删除后的结果就是,删除点的下一个服务器所处理的范围除了原来的部分之外,还增加了删除的那台服务器所需要处理的部分。但这并不影响剩下的服务器正常工作 ;相应的,当需要在环中增加一个结点时,增加的结果就是增加点的下一个服务器的处理范围减小,减少的部分由增加的服务器进行处理,同样并不影响其他的服务器正常工作;如下图3所示:

四、一致性哈希的特点
均衡性(Balance)

        平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。

单调性(Monotonicity)

        单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲区加入到系统中,也就是当缓冲区大小变化时一致性哈希(Consistent hashing)尽量保护已分配的内容不会被重新映射到新缓冲区。简单的哈希算法往往不能满足单调性的要求,如最简单的线性哈希:x → ax + b mod (P)在上式中,P表示全部缓冲的大小。不难看出,当缓冲大小发生变化时(从P1到P2),原来所有的哈希结果均会发生变化,从而不满足单调性的要求。

        哈希结果的变化意味着当缓冲空间发生变化时,所有的映射关系需要在系统内全部更新。而在P2P系统内,缓冲的变化等价于Peer加入或退出系统,这一情况在P2P系统中会频繁发生,因此会带来极大计算和传输负荷。单调性就是要求哈希算法能够应对这种情况。

分散性(Spread)

        在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。

负载(Load)

        负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同的内容。与分散性一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。
-----------------------------------

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Nat.Commun.:展示了首个硅量子光源!

光子盒研究院 量子技术有望通过启用全新的通信、传感和计算方法来彻底改变社会。例如,量子密码学如果能够实现,将为抵御黑客提供无与伦比的数据安全水平:这是因为量子信息可以在光子(单个光粒子)中进行编码、无法被复制…

以数为帆,乘风破浪!数据治理与应用沙龙在广州成功举办

DCMM作为国家第一个数据管理领域标准,是企业落实数据驱动战略、实现数字化转型的重要抓手。当下每个企业都必须有自己的数字化转型战略,而数据治理和数字化转型是同生共伴的,DCMM可以为企业进行数据治理提供全面的模型指导和方法体系。 6月2…

精选Golang高频面试题和答案汇总

大家好,我是阳哥。 之前写的《 GO必知必会面试题汇总》,已经阅读破万,收藏230。 也欢迎大家收藏、转发本文。 这篇文章给大家整理了17道Go语言高频面试题和答案详解,每道题都给出了代码示例,方便大家更好的理解。 1…

输入数据时全连接层计算量是多少

假设是这样的 那么计算公式是这样的 [ a 1 a 2 a 3 ] [ W 11 W 12 W 21 W 22 W 31 W 32 ] [ x 1 x 2 ] [ b 1 b 2 b 3 ] \left[\begin{array}{l} a_1 \\ a_2 \\ a_3 \end{array}\right]\left[\begin{array}{ll} W_{11} & W_{12} \\ W_{21} & W_{22} \\ W_{31} &…

关于uCOSiii使用__get_MSP()返回主堆栈指针的当前值出现的问题

关于uCOSiii使用__get_MSP()返回主堆栈指针的当前值出现的问题 我的uCOSiii的版本是: V3.03.01 void STACK_Init(void) { Used_STACK_SIZE0; STACK_BOTTOM*(vu32 *)STM32_FLASH_BASE_ADDRESS1;//取APP的SP初值 STACK_TOP1STACK_BOTTOM; } //函数功能:在中断函数…

cookies、localStorage 、sessionStorage 的区别

共同点:三者都是浏览器的本地存储。 区别: 存储位置:cookie是由服务器端写入的,而SessionStorage、LocalStorage都是由前端写入的; 存储大小:cookie的存储空间比较小,大概4KB,而SessionStorag…

webpack编译微信小程序

微信小程序开发目前主要还是依赖小程序原生开发者工具,但开发者工具目前还不支持常用的less、sass样式编译,以及环境变量配置等功能。使用webpack就可以弥补这些问题。 思路 webpack启动后,通过webpack-shell-plugin-next包执行启动后的一些…

沉浸式翻译

chrome沉浸式翻译插件 网页双语翻译,完全免费使用,支持Deepl/Google/Bing/腾讯/有道等。 一款免费、用户友好、简洁、革命性、广受好评的人工智能双语网络翻译扩展程序,可帮助您有效地弥合信息差距,也可在移动设备上使用&#xff…

【ArcGIS Pro二次开发】(44):属性结构描述表【Excel】转空库(批量)

随着县级国土空间总体规划数据库规范的下发,建立标准空库是一项马上就要着手的工作。国空的数据库体量很大,单是要素类就有100多个,不是以前村规数据库能比的,手动建库是不可能的,工具自动建库就是一个很合理的选择。 …

短视频seo矩阵系统源码开发思路

短视频SEO矩阵系统源码开发,需要遵循一下步骤: 1. 确定需求和功能:明确系统的主要目标和需要实现的功能,包括关键词研究、短视频制作、外链建设、数据分析、账号设置优化等方面。 2. 设计系统架构:根据需求和功能确定…

2023第二届中国汽车碳中和国际峰会 嘉宾更新

The 2nd China Automotive Carbon Neutral Summit 2023 2023第二届中国汽车碳中和国际峰会 嘉宾更新 Event Background会议背景 As the world increasingly recognizes the devastating impact of climate change, governments, organizations, and individuals are taking a…

如何安装微信小程序开发工具

1、点击进入微信开发者工具(稳定版 Stable Build)下载地址,选择Win64的版本下载。 2、运行exe程序,可能会出现微软商城安全提醒,不用理睬,直接点运行。 3、点击“下一步”。 4、点击“我接受”。 5、选择安…

vant-weapp源码解析(一)

想每天做点新东西,因此有此记录 这是进入的第一个页面,里面有引入list,page。 config.js:这是路径配置文件 page.js,外层配置文件 options,就算引入这个page.js页面所传递的数据 点击进入导航,看第一个按钮组件 button…

秋招二本4年Java经验,五面字节(定薪45K)

前段时间刚面试上岸,先后面试了各大小公司,拿了一些 offer,有阿里,滴滴,快手,达达,得物等公司。面试的公司大部分都能过,所以这里给大家分享下自己的经验,也给自己做个归…

学习Vue3——生命周期

简单来说就是一个组件从创建到销毁的过程称为生命周期 Vue 2 生命周期钩子函数Vue 3 生命周期钩子函数含义beforeCreatesetup在实例初始化之后、数据观测 (data observer) 和 event/watcher 事件配置之前被调用createdsetup在实例创建完成后被立即调用。在这一步,实…

手机信号老是卡,问题可能出在这四个原因上!

换手机的速度肯定是赶不上换卡的速度,当手机使用了一定的年限之后,不少小伙伴发现信号网速是越来越差,如果是到“五杀暴走” 的关键时刻,突然的卡顿能让你的心降到冰点! 这都是小编和小伙伴们在交流心得的时候得到的一…

uniapp打包app后,微信授权登录

官方文档:App端OAuth(登录鉴权)模块 关键配置项说明: 1、appid 微信开放平台申请应用的AppID值。 2、appSecret(HBuilderX3.4.18 不再提供此参数的可视化配置) 微信开放平台申请应用的AppSecret值。 找到manifest.json文件&am…

VR全景编辑器v1.0版本上线,为企业提供沉浸式全景可视化服务。

随着物联网技术的迅速发展,可视化技术在物联网中起到越来越重要的作用,当康科技经过不懈努力,研发了自己的一款基于物联网VR全景可视化的编辑器,为企业助力可视化服务。 部分源代码:: // 基础图标图库 ex…

几千万记录,数据库表结构如何平滑变更?

回答知识星球水友“逆光下的微笑”提问。 问题域:数据量大、并发量高场景,如何在流量低峰期,平滑实施表结构变更? 画外音,一般来说,是指增加表的属性,因为:(1&#xff09…

手把手教你,本地RabbitMQ服务搭建(windows)

本地RabbitMQ服务搭建(windows) 前言一、Erlang 环境准备1. 下载安装包2. 安装 二、RabbitMQ服务器安装1. 下载安装包2. 安装RabbitMQ server3. 启动RabbitMQ4. 启动状态检测5. 管理插件启用 三、登录管理界面 前言 前面已经对RabbitMQ介绍了很多内容&a…