可扩展性的hash算法和系统

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值