一种可扩展的数据存储系统的制作方法

文档序号:7640219阅读:461来源:国知局
专利名称:一种可扩展的数据存储系统的制作方法
技术领域
本发明涉及通信技术领域,特别是可扩展的数据存储系统及方法。
背景技术
随着通信网络应用规模的不断扩大,数据量呈几何级的增长,以及分布式网络的兴起,企业以及用户将越来越多的业务分布于不同的机器、不同的操作平台上,电信、金融、社保等领域服务都是建立在海量数据存储的基础上,而且这些数据必须万无一失。因而,全方位、多层次的“数据容灾备份系统”正成为市场主流。DHT (Distributed Hash Table,分布式哈希表)是一种分布式存储寻址方法的统称。DHT的主要思想是首先,每条文件索引被表示成一个(key, value)对,key称为关键 字,可以是文件名(或文件的其他描述信息)的哈希值,value是实际存储文件的节点的地址(或节点的其他描述信息)。所有的文件索引条目(即所有的(key,valUe)对)组成一张大的文件索引哈希表,只要输入目标文件的key值,就可以从这张表中查出所有存储该文件的节点地址。然后,再将上面的大文件哈希表分割成很多局部小块,按照特定的规则把这些小块的局部哈希表分布到存储系统中的所有参与节点上,使得每个节点负责维护其中的一块。这样,节点查询文件时,只要把查询报文路由到相应的节点即可(该节点维护的哈希表分块中含有要查找的(key,value)对)。基于分布式哈希表(DHT)的分布式检索和路由算法具有查找可确定性、简单性和分布性等优点。目前的分布式存储平台如(Dynamo)采用哈希算法切分数据,分放在不同的数据服务器节点(node)上。进行读(Read)操作时,根据key的哈希值寻找对应的node。而在Consistent Hashing算法中,node对应的不再是一个确定的hash值,而是一个hash值范围,key的hash值落在这个范围内,则数据存储在该node上。在这种模式下,node对应的数据是和hash值绑定的,系统中增减node会导致原有node负责的hash范围发生改变,数据必须迁移才能满足新的服务器部署。例如,原本只有node2、node3和node4三个节点,在加入新的nodel之后,原先从node2查询的部分key将改为从nodel查询,nodel和node2中的数据就需要调整,主要是nodel从node2中提取出属于它的数据,这样的数据迁移会导致消耗比较大的代价。

发明内容
有鉴于此,本发明的目的在于提供一种能够灵活扩展的分布式数据存储系统,当增加新的节点时,不需要对原有的数据进行迁移。为实现上述目的,本发明的实施例提供了一种数据存储系统,包括用于根据数据的散列码向不同索引服务器发出请求数据位置的读写数据指令,并到所述数据位置完成数据读写的客户端,还进一步包括至少一个索引服务器,用于维护数据散列码和数据存储位置的索引表,并接受所述客户端的读写指令,根据数据的散列码查找索引表,将数据位置的信息返回给所述客户端完成数据的读写;至少一个数据服务器,用于保存数据,并根据所述客户端的指令完成数据的读写。本发明的实施例还提供了一种基于所述数据存储系统的数据存储方法,包括获取待存储数据的散列码;根据所述获取的散列码,确定负责该散列码所在范围的索引服务器,向相应索引服务器请求数据的写入位置; 所述索引服务器请求一个或一个以上可用的数据服务器,并在索引表中记录该数据在数据服务器上的存储位置;索引服务器通知客户端将数据存储到相应的数据服务器。本发明的实施例还提供了一种基于所述数据存储系统的数据读取方法,包括获取待读取数据的散列码;根据所述获取的散列码,确定负责该散列码所在范围的索引服务器;所述索引服务器查找索引表,找到该散列码对应数据在数据服务器上存储的位置信息,并将该位置信息返回给客户端;所述客户端从所述数据服务器的相应读取相应数据。本发明的实施例还提供了一种基于所述数据存储系统的扩展方法,包括当需要在系统中增加新的数据服务器时,所述新的数据服务器建立与各索引服务器的连接关系,并向各索引服务器上报自身的空闲空间容量及读写负载情况。本发明的实施例还提供了另一种基于所述数据存储系统的扩展方法,包括当需要在系统中增加新的索引服务器时,所述新的索引服务器建立与各数据服务器的连接关系,确定所述新的索引服务器负责的散列码范围,并将该散列码范围内的索引表记录迁移到所述新的索引服务器。本发明实施例通过设置索引服务器,并在索引服务器中维护索引表,各索引服务器分别负责不同的散列码范围,从而建立了数据与其存储位置的对应关系,以完成数据的存取。该系统具有良好的可扩展性,一方面,如果需要在系统中增加新的数据服务器,只需向各索引服务器上报自己的空闲空间容量及读写负载情况,在之后的数据交互中,索引服务器会优先向该数据服务器分配存储数据,最终达到与其他数据服务器的负载均衡,从而避免了现有技术中在新增数据服务器节点时,需要迁移大量数据所付出的代价;另一方面,如果需要在系统中增加新的索引服务器时,只需将相应散列码范围内的索引表记录迁移到新的索引服务器,该迁移也不涉及到数据服务器上的数据迁移,只需将对应索引表迁移到新的索引服务器上。


图I为本发明实施例提供的一种可扩展的数据存储系统结构图;图2为本发明实施例中基于图I所示数据存储系统的数据存储方法流程图;图3为本发明实施例中基于图I所示数据存储系统的数据读取方法流程图;图4为本发明实施例提供的在系统中增加新的索引服务器的示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面结合附图对本发明作进一步的详细描述。本实施例提供了一种可扩展的数据存储系统,其结构如图I所示,其中包括客户端,用于根据数据的散列码向不同索引服务器发出读写数据的指令。该指令实际上是请求数据位置,然后客户端会根据得到的数据所在位置直接到相应位置去读取和写入数据。至少一个索引服务器,用于维护数据散列码和数据存储位置的索引表,各索引服务器负责维护不同的散列码范围,并接受客户端的读写指令,根据数据的散列码查找索引表,并通知客户端在相应的位置完成数据的读写。索引服务器只负责数据的定位和创建以及向客户端返回数据位置,实际的数据读写是由客户端完成。在一个较佳实施例中,各索引服务器负责维护的索引表的散列码范围可以有重叠,这主要是基于可靠性和均衡各索引服务器负载的需求。比如在一个有冗余的系统中,通常要求每个散列码被至少两台索引服务 器覆盖,比如服务器I负责散列范围1-10,服务器2负责5-15,服务器3负责10-15和1-5,在这种系统中,任意一台服务器死掉都不会影响服务。至少一个数据服务器,用于存储数据,并接受索引服务器的指令完成数据的读写。进一步地,数据服务器周期向索引服务器上报自身的空闲空间和负载情况,索引服务器根据各数据服务器的空闲空间和负载的大小,优先将待写入的数据写入到空闲空间较大负载较小的数据服务器。当然,也可采用索引服务器定期到各数据服务读取空闲和负载信息的方式;当负载变化较大的时候,数据服务器也可以立即主动上报相应信息。所述数据存储系统,具有灵活的可扩展性。当需要在系统中增加新的数据服务器时,只需向各索引服务器上报自己的空闲空间容量及读写负载情况,而无需进行原数据服务器上数据的迁移;当需要在系统中增加新的索引服务器时,确定新索引服务器负责的散列码范围后,将该散列码范围内的索引表记录迁移到新的索引服务器即可。因此,该数据存储系统结构简单,并且降低了进行扩展时的成本和代价。基于以上数据存储系统的数据存储方法如图2所示,包括以下步骤步骤201、在存储数据时,计算数据的散列码。也就是在执行写(Write)操作时,要根据待写入数据的key值,基于一定的散列函数,获取其散列码。散列函数是一种用来实现散列的函数,它接受一个查找键,计算出该键的唯一散列码,然后再将此散列码压缩到散列表的范围内。在一个较佳实施例中,可以采用散列码中的16位进行数据定位。为使散列码尽可能均匀地分布在散列空间上,同时使计算尽可能简单,以节省计算时间,本发明根据关键字的结构和分布不同,构造出与之适应的各不相同的散列函数I、直接定址法直接定址法是以关键字key本身或关键字加上某个数值常量C作为散列地址的方法。对应的散列函数h (key)为h(key) = key+C若C为0,则散列地址就是关键字本身。这种方法计算最简单,并且没有冲突发生,若有冲突发生,则表明是关键字错误。它适应于关键字的分布基本连续的情况,若关键字分布不连续,空号较多,将造成存储空间的浪费。
2、除留余数法除留余数法是用关键字key除以散列表长度m所得余数作为散列地址的方法。对应的散列函数h (key)为h (key) = key % m除留余数法计算较简单,适用范围广,是一种最常使用的方法。这种方法的关键是选好m,使得每一个关键字通过该函数转换后映射到散列空间上任一地址的概率都相等,从而尽可能减少发生冲突的可能性。3、数字分析法数字分析法是取关键字中某些取值较分散的数字位作为散列地址的方法。它适合于所有关键字已知,并对关键字中每一位的取值分布情况作出了分析。例如,有一组关键字为(92317602,92326875,92739628,92343634,92706816,92774638,92381262,92394220), 通过分析可知,每个关键字从左到右的第1,2,3位和第6位取值较集中,不宜作散列地址。剩余的第4,5,7和8位取值较分散,可根据实际需要取其中的若干位作为散列地址。若取最后两位作为散列地址,则散列地址的集合为(2,75,28,34,16,38,62,20)。4、平方取中法平方取中法是取关键字平方的中间几位作为散列地址的方法,具体取多少位视实际要求而定。一个数平方后的中间几位和数的每一位都有关。从而可知,由平方取中法得到的散列地址同关键字的每一位都有关,使得散列地址具有较好的分散性。平方取中法适应于关键字中的每一位取值都不够分散或者较分散的位数小于散列地址所需要的位数的情况。5、折叠法折叠法是首先将关键字分割成位数相同的几段(最后一段的位数若不足应补0),段的位数取决于散列地址的位数,由实际需要而定,然后将它们的叠加和作为散列地址的方法。例如一个关键字K = 68242324,散列地址为3位,则将此关键字从左到右每三位一段进行划分,得到的三段为682,423和240,叠加和为682+423+240 = 345,此值就是存储关键字为68242324元素的散列地址。折叠法适应于关键字的位数较多,而所需的散列地址的位数又较少,同时关键字中每一位的取值又较集中的情况。目前通用的散列码算法包括md5和sha等,本实施例用的是这两个的结合,然后用md5中的16位,来确定索引服务器的位置。步骤202、根据获取的散列码,确定负责该散列码所在范围的索引服务器,向相应索引服务器请求数据的写入位置。假设有两台索引服务器,三台数据服务器,其中,两台索引服务器负责的散列码范围分别是(0,10)和(10,20),数据分散存储在三台数据服务器上。假如根据某个写指令中的K确定的散列码为3,则客户端将写指令发送给索引服务器1,索引服务器I中维护了一张索引表,记录了自身负责的不同散列码(0,10)对应的数据所存储的数据服务器位置。客户端向索引服务器发送的数据存储请求只是请求获取数据所在数据服务器的位置,获得位置信息后客户端会直接到相应位置写入数据,而非索引服务器存储数据。在本实施例中,各索引服务器负责的散列码范围各不相同,此外,在一个较佳实施例中,各索引服务器负责维护的索引表的散列码范围可以有重叠,这主要是基于可靠性和均衡各索引服务器负载的需求。
步骤203、索引服务器请求一个或者多个可用的数据服务器,并记录该数据分布在哪个数据服务器上。索引服务器I检索各数据服务器,选择一台或多台有空闲空间的数据服务器,并更新索引表,在表中增加相应的(key,value)表项,记录相应数据在数据服务器的具体存储位置。索引服务器在选择数据服务器时,会综合考虑空间属性和性能属性,具体的说,索引服务器会尽可能优先选择有较多空闲空间并且负载较轻的数据服务器来写入新的数据。这样做的好处有两个,一是可以使各数据服务器存储的数据尽量均匀,负载尽量均衡;二是在增加新的数据服务器时,不必进行数据迁移,因为索引服务器发现了新的空闲的数据服务器,自然会将新数据分配到该数据服务器上,从而避免了现有技术中,在增加新的数据节点时,进行数据迁移所带来的代价。其中,索引服务器可以定期读取的方式来获得各数据服务器的空闲空间和负载大小信息,或者由各数据服务器定期上报,如果数据服务器负载异动比较大,则可以立即向索引服务器上报。步骤204、索引服务器通知客户端将数据存储到相应的数据服务器。在本实施例的数据存储系统中,索引服务器只是负责数据的定位,或进一步完成数据的创建和删除功能, 而数据的写入和读取还是由客户端实际完成。或者进一步的,索引服务器只是完成数据定位,创建和删除功能也可以交给客户端。以上流程就完成了数据的存储过程,在这种方法中,索引服务器能够根据散列码将数据尽量均匀的存储到各数据服务器中,而且在新增数据服务器节点时,无需进行数据迁移,在新增索引服务器时,只需要迁移索引信息即可。因为索引信息比数据本身小很多,所以代价几乎可以忽略笔记。只更新索引服务器中的索引表即可。基于图I所示数据存储系统的数据读取方法如图3所示,包括以下步骤步骤301、根据散列码,定位索引服务器,客户端向该索引服务器发送请求数据位置的消息。执行读(Read)操作时,要根据待读取数据的key值,基于与前述相同的散列函数,获取其散列码。根据该散列码,能够获知负责该散列码区间的索引服务器。步骤302、索引服务器定位数据服务器,将数据在数据服务器上的位置信息返回给客户端。索引服务器查找索引表,找到该散列码对应的表项,从而查找到该散列码对应数据在数据服务器上存储的位置。步骤303、客户端根据位置信息从数据服务器读取相应数据。基于图I所示的数据存储系统,如果需要在系统中增加新的数据服务器,相比于现有技术,其扩展流程非常简单,只需向各索引服务器上报自己的空闲空间容量及读写负载情况,在之后的数据交互中,索引服务器会优先向该数据服务器分配存储数据,最终达到与其他数据服务器的负载均衡。该系统避免了现有技术中在新增数据服务器节点时,需要迁移大量数据所付出的代价,而且在一台数据服务器宕机时,也不会影响其他数据服务器。此外,基于图I所示的数据存储系统,如果需要在系统中增加新的索引服务器时,首先要确定该索引服务器负责的散列码范围,然后将该散列码范围内的索引表记录迁移到新的索引服务器,参见图4。该迁移并不涉及到数据服务器上的数据迁移,只需将对应索引表迁移到新的索引服务器上。以图I系统为例,当需增加一台新的索引服务器时,假如原索引服务器I负责的散列码范围是(0,10),现需将(0,5)的范围分配给新的索引服务器,而原索引服务器I负责的散列码范围是(5,10)。此时,只需将索引服务器I中维护的索引表中散列码为(0,5)的记录迁移到新的索引服务器,自身只保留(5,10)的记录。在该迁移中,数据服务器中的数据未发生任何变化,并扩充了索引服务器I的空间。 总之,以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种数据存储系统,包括用于根据数据的散列码向不同索引服务器发出请求数据位置的读写数据指令,并到所述数据位置完成数据读写的客户端,其特征在于,还进一步包括 至少一个索引服务器,用于维护数据散列码和数据存储位置的索引表,并接受所述客户端的读写指令,根据数据的散列码查找索引表,将数据位置的信息返回给所述客户端完成数据的读写; 至少一个数据服务器,用于保存数据,并根据所述客户端的指令完成数据的读写。
2.根据权利要求I所述的数据存储系统,其特征在于,所述系统中各索引服务器负责维护不同的散列码范围,且所述各索引服务器负责的散列码范围没有重叠。
3.根据权利要求I所述的数据存储系统,其特征在于,所述系统中各索引服务器负责维护不同的散列码范围,且所述各索引服务器负责的散列码范围有重叠。
4.根据权利要求1、2或3所述的数据存储系统,其特征在于,所述数据服务器进一步用于周期向所述索引服务器上报自身的空闲空间和负载情况,或由所述索引服务器定期读取各数据服务器的空闲空间和负载情况,所述索引服务器根据各数据服务器的空闲空间和负载的大小,优先将待写入的数据写入到空闲空间较大负载较小的数据服务器。
5.一种基于权利要求I所述数据存储系统的数据存储方法,其特征在于,包括 获取待存储数据的散列码; 根据所述获取的散列码,确定负责该散列码所在范围的索引服务器,向相应索引服务器请求数据的写入位置; 所述索引服务器请求一个或一个以上可用的数据服务器,并在索引表中记录该数据在数据服务器上的存储位置; 索引服务器通知客户端将数据存储到相应的数据服务器。
6.一种基于权利要求I所述数据存储系统的数据读取方法,其特征在于,包括 获取待读取数据的散列码; 根据所述获取的散列码,确定负责该散列码所在范围的索引服务器; 所述索引服务器查找索引表,找到该散列码对应数据在数据服务器上存储的位置信息,并将该位置信息返回给客户端; 所述客户端从所述数据服务器的相应读取相应数据。
7.一种基于权利要求I所述数据存储系统的扩展方法,其特征在于,包括 当需要在系统中增加新的数据服务器时,所述新的数据服务器建立与各索引服务器的连接关系,并向各索引服务器上报自身的空闲空间容量及读写负载情况。
8.一种基于权利要求I所述数据存储系统的扩展方法,其特征在于,包括 当需要在系统中增加新的索引服务器时,所述新的索引服务器建立与各数据服务器的连接关系,确定所述新的索引服务器负责的散列码范围,并将该散列码范围内的索引表记录迁移到所述新的索引服务器。
全文摘要
本发明公开了一种数据存储系统,包括用于根据数据的散列码向不同索引服务器发出读写数据指令的客户端,还包括至少一个索引服务器,用于维护数据散列码和数据存储位置的索引表,并接受所述客户端的读写指令,根据数据的散列码查找索引表,并在相应的位置完成数据的读写;至少一个数据服务器,用于存储数据,并根据所述索引服务器的指令完成数据的读写。本发明还公开了基于该系统的数据存取方法,以及该系统的扩展方法。本发明提供了一种能够灵活扩展的分布式数据存储系统,当增加新的节点时,不需要对原有的数据进行大范围迁移。
文档编号H04L29/06GK102739622SQ20111009462
公开日2012年10月17日 申请日期2011年4月15日 优先权日2011年4月15日
发明者林兆祥, 邹铭, 金翊 申请人:北京兴宇中科科技开发股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1