博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
普通hash和一致性hash的区别
阅读量:2738 次
发布时间:2019-05-13

本文共 811 字,大约阅读时间需要 2 分钟。

普通hash

定义
Hash函数:一般翻译做散列、杂凑,或音译为哈希,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。
碰撞(冲突):如果两个关键字通过hash函数得到的值是一样的,就是碰撞或冲突。
Hash表(散列表):根据散列函数和冲突处理将一组关键字分配在连续的地址空间内,并以散列值记录在表中的存储位置,这种表成为散列表。

常用算法

直接寻址法:即取关键字或关键字的线性函数为散列地址:H(key)=key或H(key)=a*key+b;
数字分析法:即分析一组数据后采用的方法:如人的出生年月为92-09-03则前三位重复的几率比较大,容易产生碰撞,所以应该采用后三位作为hash值好点
平方取中法:取关键字平方的后几位。
折叠法:把关键字分割成位数相同的几部分,最后一部分可以位数不同,然后取这几部分的叠加值
随机数法:以关键值作为生成随机数的种子生成散列地址,通常适用于关键字长度不同的场合。
除留余数法:取关键字被某个不大于散列表长度m的数p除后所得的余数为散列地址:H(key)=key%p(p<=m);不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生碰撞。

一致性hash

hash算法被普遍用在很多地方,但是普通hash用在分布式环境中会有一些问题,比如用在membercache中时,假设有四个结点,如果初始算法为hash%4,则如果其中一台机器宕机的话,就需要改成hash%3算法,则所有的数据都要重新计算存储的位置,所以开销比较大。
一致性hash:首先对四个结点求hash值,然后分布在一个圆环上,然后对关键字也用同样hash算法求出hash值,并也分布在圆环上,其中数据存储在距离最近的结点,这样当其中一个结点宕机的时候只需要移动这个结点的部分数据到下个结点就行。
 

转载地址:http://ilwad.baihongyu.com/

你可能感兴趣的文章
常用linux连接工具简介
查看>>
Hash索引和BTree索引
查看>>
印度拒绝使用微软OOXML标准
查看>>
卡巴网快均否认“Flashget包含病毒”
查看>>
无线频段竞拍空手而归 谷歌因祸得福
查看>>
iPhone审慎支持第三方软件 禁止在后台运行
查看>>
阿里巴巴回购雅虎股权 雅虎收购变成三巨头博弈
查看>>
蓝光DVD第2道加密防线被撕破 比预期提前9年
查看>>
杨元庆:X300定价太便宜用户会不放心
查看>>
网游“包身工”:我们是累并枯燥的哑巴
查看>>
连续15个月处于实际负利率 央行加息迫在眉睫
查看>>
闪联4个提案获全票通过 08年将正式成国际标准
查看>>
谷歌三巨头去年再度领取一美元年薪
查看>>
索尼爱立信市场营销总监离职 接任人选未公布
查看>>
中国雅虎公关总监王彤:人类在迁徙
查看>>
四大唱片公司诉百度搜狐侵权索赔亿元
查看>>
美国土安全部推"曼哈顿计划" 维护网络安全
查看>>
左与AOL合并 右牵手谷歌 雅虎对抗微软收购
查看>>
任正非谈自杀:快乐地度过困难的一生
查看>>
xtools谢亿民:SaaS应用无需过于复杂 走工具化道路
查看>>