加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

可扩展性的hash算法和系统

(2010-08-31 10:22:56)
标签:

hash算法

it

分类: 程序开发与测试

                                             作者:张金强

Hash算法是计算机系统非常重要的算法,它的目的就是要将任意类型的信息均匀影射到一个有限的连续空间上;它的用途可以用于数据的快速检索(比如hashmap), 也可以用于数据签名(比如md5), 也可用于安全系统(SHA),也普遍用于p2p系统中的信息检索和路由;本文中提到的应用着重指数据检索中使用的hash算法。

 

在数据检索的应用中,需要利用hash算法将key映射到一个有序范围中,将具有相同hash值的key统一管理起来,理想情况可以达到O(1)的检索效率,因此跟Btree类的检索算法相比,具有更快的插入效率、检索效率、也具有空间效率;但是当数据的规模超过有序范围5倍以上的时候,hash算法的查询效率随着规模的增长线性降低;因此具有可扩展性的hash算法将是有效数据检索的一个方向。这里着重介绍两个hash算法,分别是动态hash算法和一致性Hash算法。

 

动态hash算法可以参考dynamic hashing , 主要是为了解决规模扩展的问题,主体思路是在数据规模变大后,映射的范围将翻倍,新数据的插入将按照最新的映射范围插入,对于查询,则逐层降级查找,先查找最新的范围查找,如果没有,再将范围缩短一倍进行查找,逐层下去,直到最小范围终止;该算法可以有效支持数据规模的扩展,整体数据的查询效率也维护在O(1)的效率; 当前在bdb中的hash算法就基于此算法实现,并且广泛应用的memcache服务中的索引扩展也是基于改算法思想。

 

一致性hash算法可以参考一致性hashconsistent hashing ,主要是为了解决分布式系统如何扩展的问题,主体思路是保证数据分布的均匀性和单调性,让数据均匀分散在各个节点上,并且在扩展的时候只是对一个区间内的数据进行了重新整理,所以只影响了一部分的数据节点; 当前 p2p系统中都普遍才了该算法进行数据的定位, 以及要amazon-dynamo/Apache-Cassandra系统中也是采用了该算法作为基础进行数据管理。

 

这两类Hash算法都提供了一种扩展的思路,在不影响正常应用的情况实现了支持规模升级。

 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有