数据处理方法和装置转让专利

申请号 : CN201710379148.4

文献号 : CN107357522B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 罗雄

申请人 : 华为技术有限公司

摘要 :

一种数据处理技术,应用于分区管理设备,所述分区管理设备中存储有分区视图,所述分区视图记录有当前分区ID和存储盘地址的对应关系,当前分区总数可以小于终分区总数,使用该技术可以用当前分区对Key‑Value数据进行数据转发,减小了分区视图的复杂度。

权利要求 :

1.一种分区管理方法,由控制器执行,所述控制器对集群中的存储盘进行分区管理,所述集群中包括多个存储盘,该方法包括:当检测到有N个新的存储盘准备加入所述集群时,获取所述集群中当前存储盘数量M,以及所述集群中当前分区总数T,其中M,N以及T都是自然数;

判断当前分区总数T与存储盘总数M+N的数学关系是否满足第一预定条件;

如果满足第一预定条件,则对至少一个所述当前分区进行分裂,使得分裂后的分区总数是S,S>T,并将分裂后的分区分配给M+N个存储盘,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件,并且分裂后的分区总数不大于所述集群支持的终分区总数L,其中L、S都是大于1的自然数;

其中,当前分区总数T满足第一预定条件是指:T/(M+N)小于第一阈值,第一阈值是自然数;

其中,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件是指:S/(M+N)大于等于第二阈值,第二阈值是自然数。

2.根据权利要求1所述的方法,其中,

所述第一阈值大于10小于20。

3.根据权利要求1所述的方法,其中,

所述第二阈值大于25小于50。

4.根据权利要求1所述的方法,其中:

各所述当前分区ID是大于等于0的整数,所有当前分区的分区ID的集合是第一项是0、项数为T、公差为1的等差数列;

分裂后的各分区的分区ID是大于等于0的整数,所有分裂后的各分区的分区ID的集合是第一项是0、项数为S、公差为1的等差数列。

5.一种分区管理装置,用于对集群中的存储盘进行分区管理,所述集群中包括多个存储盘,该装置包括:存储盘检测模块,用于当检测到有N个新的存储盘准备加入所述集群时,获取所述集群中当前存储盘数量M,以及所述集群中当前已有分区总数T,其中M,N以及T都是自然数;

第一预定条件判定模块,用于判断当前分区总数T与存储盘总数M+N的数学关系是否满足第一预定条件;

分区分裂模块,用于如果满足第一预定条件,则对至少一个所述当前分区进行分裂,使得分裂后的分区总数是S,并将分裂后的分区分配给M+N个存储盘,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件,并且分裂后的分区总数不大于所述集群支持的终分区总数L,其中L、S都是大于1的自然数;

其中,当前分区总数T满足第一预定条件是指:T/(M+N)小于第一阈值,第一阈值是自然数;

其中,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件是指:S/(M+N)大于等于第二阈值,第二阈值是自然数。

6.根据权利要求5所述的分区管理装置,其中,

所述第一阈值大于10小于20。

7.根据权利要求5所述的分区管理装置,其中:

所述第二阈值大于25小于50。

8.根据权利要求5所述的分区管理装置,其中:

各所述分区ID是大于等于0的整数,所有当前分区的分区ID的集合是第一项是0、项数为T、公差为1的等差数列;

各分裂后的分区的分区ID是大于等于0的整数,所有分裂后的分区的分区ID的集合是第一项是0、项数为S、公差为1的等差数列。

9.一种分区管理设备,和集群连接,用于对集群中的存储盘进行分区管理,所述集群中包括多个存储盘,所述分区管理设备包括:存储器,被配置为存储有分区视图,所述分区视图记录有当前分区ID和存储盘地址的对应关系;

接口,被配置为用于提供对外连接;

计算机可读介质,被配置为用于存储计算机程序;

处理器,和所述存储器、接口、计算机可读介质连接,被配置为用于通过运行所述程序,执行以下步骤:当通过所述接口检测到有N个新的存储盘准备加入所述集群时,获取所述集群中当前存储盘数量M,以及所述集群中当前已有分区总数T,其中M,N以及T都是自然数;

判断当前分区总数T与存储盘总数M+N的数学关系是否满足第一预定条件;

如果满足第一预定条件,则对至少一个所述当前分区进行分裂,使得分裂后的分区总数是S,并将分裂后的分区分配给M+N个存储盘,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件,并且分裂后的分区总数不大于所述集群支持的终分区总数L,其中L、S都是大于1的自然数;

其中,当前分区总数T满足第一预定条件是指:T/(M+N)小于第一阈值,第一阈值是自然数;

其中,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件是指:S/(M+N)大于等于第二阈值,第二阈值是自然数。

10.根据权利要求9所述的设备,其中,

所述第一阈值大于10小于20。

11.根据权利要求9所述的设备,其中,

所述第二阈值大于25小于50。

说明书 :

数据处理方法和装置

技术领域

[0001] 本申请涉及一种数据处理技术,特别有关于一种数据处理方法和装置。

背景技术

[0002] 随着社会的发展,需要被存储和管理的数据的规模越来越多,甚至被称为海量数据。用传统的集中存储管理超大规模数据时,难以提供高效的读写操作,难以满足良好的扩展性以及高可用性。
[0003] 在这种背景下,出现了由多个物理存储节点组成的存储系统,每个存储节点都可以提供存储空间,这种存储方式称为分布式存储。一种分布式存储方式被称为键-值(Key-Value)存储,在Key-Value存储中,被存储的数据(或者数据分片)被称为值(Value),每个数据拥有一个在整个存储系统范围内唯一的标识,这个标识就是键(Key),Key和Value一一对应。
[0004] Key和Key所对应的Value作为整体称为Key-Value,简称K-V。每一个Key-Value存储在存储系统的一个存储盘中。在分布式哈希表(Distributed hash table,DHT)技术中,对某个具体的Key-Value而言,由哪个存储盘对其进行存储可以由一个映射规则确定。这个映射规则基于对Key进行哈希(hash)运算生成的哈希(Hash)值,每个哈希值属于一个分区,分区和存储盘对应,从而使得每个Key-Value和一个存储盘对应。基于这种方法,如果两个不同的key计算出的hash值相同,那么这两个Key对应的Key-Value存储在同一个存储盘上。分区和存储盘的对应关系被称为分区视图。
[0005] 在现有技术中,按照DHT技术,根据Key计算出的Hash值,例如落入在[0,2^32-1]的整数区间内,在系统初始化的时候,对这个大范围的整数区间进行分段,每个分段大小相等或近似相等,这样的一个分段就是一个分区(Partition),每个分区内的哈希值的数量基本一样。在存储盘集群的存储盘数量较少时,每个存储盘拥有过多的分区,导致分区视图过于复杂,在按照分区视图提供的转发数据包时效率低下,具体举例如下。
[0006] 假设有一个存储盘集群最大支持25,000个存储盘的集群,存储盘数量最大化时每个存储盘大致拥有100个分区,也就是说整个集群一共拥有2,500,000个分区。假设每个分区的信息占用4个比特的存储空间,那么这些分区信息总共会占用10MB的存储空间,分区视图信息大于10MB。
[0007] 在使用分区视图时,占用了大量的系统资源。

发明内容

[0008] 本发明提供一种数据处理方法和装置,可以减少处理Key-Value数据时,对系统资源的占用。
[0009] 第一方面,本发明提供一种数据处理方法,应用于分区管理设备中,所述分区管理设备中存储有分区视图,所述分区视图记录有当前分区ID和存储盘地址的对应关系,该方法包括:获得键-值Key-Value数据中的值Key,根据所述Key计算所述Key-Value数据对应的终分区ID,其中,所述Key-Value数据包括值Value以及与所述Value唯一对应的Key;计算所述终分区ID对应的当前分区ID,其中,每个当前分区ID对应多个终分区ID;查询所述分区视图,获得当前分区ID对应的存储盘地址;以所述存储盘地址作为目的地址生成Key-Value报文,发送所述Key-Value报文给所述存储盘,所述Key-Value报文携带所述Key-Value数据。
[0010] 第二方面,本发明提供一种数据处理装置,该装置包括:存储模块,用于存储分区视图,所述分区视图记录有当前分区ID和存储盘地址的对应关系;终分区计算模块,用于获得键-值Key-Value数据中的值Key,根据所述Key计算所述Key-Value数据对应的终分区ID,其中,所述Key-Value数据包括值Value以及与所述Value唯一对应的Key;当前分区计算模块,用于计算所述终分区ID对应的当前分区ID,其中,每个当前分区ID对应多个终分区ID;查询模块,用于查询所述存储模块所存储的所述分区视图,获得当前分区ID对应的存储盘地址;发送模块,用于以所述存储盘地址作为目的地址生成Key-Value报文,发送所述Key-Value报文给所述存储盘,所述Key-Value报文携带所述Key-Value数据。
[0011] 第三方面:本发明提供一种数据处理设备,所述数据处理设备包括:存储器,被配置为存储有分区视图,所述分区视图记录有当前分区ID和存储盘地址的对应关系;接口,被配置为用于提供对外连接;计算机可读介质,被配置为用于存储计算机程序;处理器,和所述存储器、接口、计算机可读介质连接,被配置为用于通过运行所述程序,执行以下步骤:获得键-值Key-Value数据中的值Key,根据所述Key计算所述Key-Value数据对应的终分区ID,其中,所述Key-Value数据包括值Value以及与所述Value唯一对应的Key;计算所述终分区ID对应的当前分区ID,其中,每个当前分区ID对应多个终分区ID;查询所述分区视图,获得当前分区ID对应的存储盘地址;以所述存储盘地址作为目的地址生成Key-Value报文,从所述接口发送所述Key-Value报文给所述存储盘,所述Key-Value报文携带所述Key-Value数据。
[0012] 第四方面:本发明提供一种分区管理方法,由控制器执行,所述控制器对集群中的存储盘进行分区管理,所述集群中包括多个存储盘,该方法包括:当检测到有N个新的存储盘准备加入所述集群时,获取所述集群中当前存储盘数量M,以及所述集群中当前已有分区总数T,其中M,N以及T都是自然数;判断当前分区总数T与存储盘总数M+N的数学关系是否满足第一预定条件;如果满足第一预定条件,则对至少一个所述当前分区进行分裂,使得分裂后的分区总数是S,并将分裂后的分区分配给M+N个存储盘,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件,并且分裂后的分区总数不大于所述集群支持的终分区总数L,其中L、S都是大于1的自然数。
[0013] 第四方面的第一种实现方式中,还执行更新分区视图的操作,分区视图中记录当前分区和IP盘的对应关系。
[0014] 第五方面,本发明提供一种分区管理装置,用于对集群中的存储盘进行分区管理,所述集群中包括多个存储盘,该装置包括:存储盘检测模块,用于当检测到有N个新的存储盘准备加入所述集群时,获取所述集群中当前存储盘数量M,以及所述集群中当前已有分区总数T,其中M,N以及T都是自然数;第一预定条件判定模块,用于判断当前分区总数T与存储盘总数M+N的数学关系是否满足第一预定条件;分区分裂模块,用于如果满足第一预定条件,则对至少一个所述当前分区进行分裂,使得分裂后的分区总数是S,并将分裂后的分区分配给M+N个存储盘,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件,并且分裂后的分区总数不大于所述集群支持的终分区总数L,其中L、S都是大于1的自然数。
[0015] 第五方面的第一种实现方式中,分区分裂模块还用于更新分区视图的操作,分区视图中记录当前分区和IP盘的对应关系。
[0016] 第六方面,本发明提供一种分区管理设备,和集群连接,用于对集群中的存储盘进行分区管理,所述集群中包括多个存储盘,所述分区管理设备包括:存储器,被配置为存储有分区视图,所述分区视图记录有当前分区ID和存储盘地址的对应关系;接口,被配置为用于提供对外连接;计算机可读介质,被配置为用于存储计算机程序;处理器,和所述存储器、接口、计算机可读介质连接,被配置为用于通过运行所述程序,执行以下步骤:当通过所述接口检测到有N个新的存储盘准备加入所述集群时,获取所述集群中当前存储盘数量M,以及所述集群中当前已有分区总数T,其中M,N以及T都是自然数;判断当前分区总数T与存储盘总数M+N的数学关系是否满足第一预定条件;如果满足第一预定条件,则对至少一个所述当前分区进行分裂,使得分裂后的分区总数是S,并将分裂后的分区分配给M+N个存储盘,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件,并且分裂后的分区总数不大于所述集群支持的终分区总数L,其中L、S都是大于1的自然数。
[0017] 第六方面的第一种实现方式中,处理器还执行更新分区视图的操作,分区视图中记录当前分区和IP盘的对应关系。
[0018] 应用本发明方案,分区管理设备可以使用当前分区进行Key-Value数据转发,由于当前分区的数目小于终分区,因此相对于现有技术使用终分区进行转发的方案,减小了资源消耗。

附图说明

[0019] 图1是本发明存储系统实施例拓扑图;
[0020] 图2是本发明分区管理方法实施例流程图;
[0021] 图3是本发明控制器实施例结构图;
[0022] 图4是本发明还提供一种分区管理装置实施例示意图;
[0023] 图5是本发明数据处理方法实施例流程图;
[0024] 图6是本发明数据处理设备实施例结构图;
[0025] 图7是本发明数据处理装置实施例示意图。

具体实施方式

[0026] 下面将结合本发明实施例中的附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例所获得的所有其他实施例,都属于本发明保护的范围。
[0027] 如图1所示是发明实施例存储系统拓扑图。应用服务器11和管理服务器集群12连接,管理服务器集群12和交换设备集群13连接,交换集群13和IP盘集群14连接,控制器15和管理服务器集群12、IP盘集群14连接。管理服务器集群12由至少一个管理服务器121组成;IP盘集群14由至少一个IP盘141组成。
[0028] 应用服务器1发出读数据的命令或者写数据的命令。管理服务器121例如是分布式对象池(distribute object pool,DOP),对应用服务器11提供对象接口,这个对象可以很大,例如以GB为基本单位。
[0029] 如果对象过大,管理服务器121可以把对象拆分成小的分片,例如把对象拆分成1MB大小的分片,每个分片是一个Value;每个Value拥有一个标签,称为Key。管理服务器121可以对Key进行哈希运算,把算出的哈希值和分区对应起来。此外,管理服务器121还可以存储分区视图,分区视图中记录IP盘和分区的对应关系,具体而言,可以是当前分区ID和IP盘的对应关系。因此管理服务器可以查找到每个Key-Value对应的IP盘。查找到的IP盘称为目标盘,管理服务器121可以把目标IP盘的地址作为目的地址,生成IP报文,发送给交换集群
13。分区视图记录的内容例如下表1所示,其中i是自然数,m是大于1的自然数。
[0030]
[0031] 表1
[0032] 交换集群13由至少一个交换机组成,用于在读数据或写数据的时候,在管理服务器121和IP盘141之间的数据交换。查询分区视图的操作也可以挪给交换集群13中的交换机执行,也就是说由交换机集群13中的交换机存储分区视图。在这种场景下,在管理服务器121向交换机集群3发送数据时,可以不使用IP报文,而是使用一种可以称为Key-Value报文的新型报文。Key-Value报文和IP报文其余部分相同,区别仅在于目的地址是由Key计算获得的分区号,并且用报文类型字段区分IP报文和Key-Value报文。由交换机查询自己存储的分区号和IP盘地址的映射表,把目的地址替换成分区所对应的IP盘的地址,并修改报文类型,从而把Key-Value报文转换成IP报文,然后转发给对应的IP盘进行存储。
[0033] 在管理服务器121中,分区和IP盘的对应关系的记录方式,可以是记录成分区号(也称为分区ID)和IP盘地址的对应关系。为了方便理解,这种对应关系的另外一种表达方式是:分区属于IP盘;还有一种表达方式是:IP盘拥有分区。
[0034] 分区是一个逻辑概念,分区并不拥有存储空间,实际存储数据的是IP盘。但每个分区有对应的IP盘,在存储数据过程中,通过查询分区视图可以获知分区所对应的IP盘,以便进行真实的存储。在用户看来,数据似乎是被存入了分区中,因此,有时候我们也把数据存储分区所对应的IP盘的过程,称为数据存入分区。
[0035] 控制器15用于计算分区总数,获取IP盘信息,建立IP盘和分区的对应关系,并把对应关系及时更新到各个管理服务器中。这个对应关系也称为分区视图。
[0036] 现有技术中,由于分区总数是不变的,随着IP盘数量的增多,每个IP盘对应的分区成反比例的减少。因此当IP盘数量较少时,每个IP盘对应了过多的分区。以背景技术中的例子为例,在25,000个存储盘的情况下,每个存储盘拥有100个分区是合适的;但是在75个存储盘的情况下,每个存储盘会拥有33333个分区,这个分区数量是不合适的,因为它至少会引起以下问题。
[0037] (1)分区视图过于复杂,分区视图中一共拥有75×33333=2499975条对应关系。和25,000个存储盘的情况下的对应关系条数相近。管理服务器在使用这个分区视图转发IP报文时,需要检索分区视图中的对应关系,在IP盘数量不多时就要检索如此大量的对应关系,造成转发效率低下。而且发布分区视图时,控制器需要把分区视图发布给每个管理服务器,占用带宽较大。因此,占用了过多管理服务器的处理资源以及存储系统的带宽资源。
[0038] (2)为了增强数据可靠性,每个分区会存在副本分区在其他IP盘,分区和它的副本分区位于不同的IP盘,但对应存储有相同的数据,这种情况被称为多副本。假设B分区、C分区是A分区的副本分区,那么在把一个报文存入A分区所在的IP盘时,会同时把这个报文的副本存入B分区所在的IP盘,以及C分区所在的IP盘。
[0039] 在多副本场景下,假设某个IP盘发生故障,那么故障存储盘中的数据需要通过副本进行恢复,以确保数据可靠性。具体而言,就是查找故障IP盘中各个分区的副本分区,然后对副本分区中的数据进行复制,把复制得到的数据存储到没有故障的IP盘。当每个IP盘中的分区过多时,这些分区的副本分区数量也会很多,这些副本分区将分布在大量的其他IP盘中。以至于当一个IP盘故障时,大量其他IP盘都要参与数据的恢复,在数据恢复期间,这些参与数据恢复的IP盘的性能都受到影响。
[0040] (3)在多副本场景下,如果每个IP盘拥有的分区数量过多,那么对某一个IP盘而言,其分区的副本会分散到大量的IP盘中,由于存储副本的IP盘数量较大,同时出现多个IP盘故障的可能性变大,使得数据可靠性降低。
[0041] (4)本发明实施例引入母分区和终分区的概念,终分区总数是不变的,类似于现有技术中的分区。母分区可以分裂成多个子分区,如果子分区可以继续分裂成新的子分区,那么这个子分区是下一级子分区的母分区。随着集群中IP盘数量的增多,分裂过程可以一直持续下去,直至分裂成为终分区。此时整个集群中拥有的分区数量达到终分区总数。
[0042] 需要说明的是,现有技术中用户看到的分区和存储系统内部管理的分区数量是相同的,不论集群中拥有多少IP盘,分区数量始终不变。而本发明实施例中,用户看到的仍然是终分区的数量。但是,在母分区分裂成终分区之前,存储系统中使用母分区进行管理,也就是说分区视图以及报文转发都使用母分区进行处理。本发明各实施例中,在没有特别说明的情况下,分区都是指存储系统所管理的分区。
[0043] 当集群中的IP盘数量较少时,为每个IP盘分配适量的母分区,每个IP盘的合并分区数量可以由管理员指定或者由系统自动设定,不受终分区数量限制。例如在集群拥有75个IP盘时,每个IP盘对应100个母分区,分区视图中仅有75×100=7500条对应关系。在集群拥有150个IP盘时,每个母分区分裂成2个子分区,那么每个IP盘仍然对应100个分区,假设每个分区拥有一个副本,那么某个IP盘故障时,受影响的其他IP盘数量将限定在100以内。也就是说,本发明可以实现分区数量的定制化,使得每个IP盘拥有的分区数量可控。基于本发明实施例提供的方法,控制器向管理服务器集群中的各个管理服务器发送分区视图时,占用的带宽更小。而且对应关系的条目减少以后,管理服务器在查询键(Key)对应的存储盘地址时速度更快。
[0044] 应用服务器1需要读数据或者写数据时,数据依次经过管理服务器21、交换设备集群3到达IP盘。
[0045] IP盘可以使用磁盘或者闪存作为存储介质,在软件上提供Key-Value接口,硬件上提供以太网接口,对通过以太网接口接收的以太帧解压后获得IP报文。IP盘例如希捷公司的Kinetic产品。
[0046] 本发明实施例中将存储Key-Value数据的存储器统称为存储盘。除了IP盘以外,在其他实施方式中,存储盘也可以使用支持Key-Value接口的其他存储设备,在硬件上使用非以太接口。存储盘使用的存储介质可以是硬盘或者闪存。
[0047] 图2介绍本发明实施例分区管理方法,描述了当IP盘集群中的IP盘数量扩容时,如何增加分区的数量来满足新增IP盘的需要。该方法由控制器执行该方法包括下面的步骤。
[0048] 步骤21:根据集群中IP盘最大容量,确定终分区数量L,L是自然数。以及根据初始IP盘数量,确定每个IP盘拥有的初始分区数量。本步骤是个前置步骤,在控制器初始化时执行,是可选的。并且每个初始分区对应有一个存储盘,用分区视图记录这个对应关系。
[0049] 在执行完本步骤后,控制器中会把初始IP盘数量记录为当前IP盘数M、每个IP盘拥有的初始分区数量记录为当前分区数P,集群中当前已有分区总数T=M·P。控制器还会记录终分区数L。后续如果集群中IP盘数量变化或者各个IP盘的分区数量发生变化,会对当前IP盘数M,当前分区数P进行更新。本发明各实施例中,符号“·”表示乘积。
[0050] 终分区的数量是不变的,无法分裂,可以被用户感知。初始分区通常是母分区。母分区是可以分裂的分区,分裂生成下一级母分区或者生成终分区,母分区供存储系统使用,用户无法感知母分区的存在。本发明实施例中,当前分区是指在当前时刻,管理服务器使用的分区,由控制器发布给管理服务器。如果执行了分区分裂了,当前分区就是分区分裂后的分区。当前分区可以是母分区,也可以包括终分区。
[0051] L的值可以由用户设定也可以由系统自动分配,通常由IP盘最大容量,以及IP盘最大容量时各个IP盘的分数,二者共同确定。L=IP盘最大容量×每个IP盘的分区数。假设每个IP盘拥有X个分区是较佳值。例如用户认为每个IP盘拥有100个分区是一个比较合理的值,也就是X=100,而IP盘集群能够支持的最大IP盘数量是10,000个。那么L=10,000×100=1,000,000。
[0052] 类似的,初始分区数量由用户设定也可以由系统自动分配,一种可选方式是:假设初始情况下IP盘数M=75,每个IP盘分配100个分区,那么初始分区总数=75×100=7,500。应用本发明方法,在初始阶段,就可以使存储系统中每个IP盘拥有的分区数量自由设定,可以把分区数量设定为既符合用户需求,又不过多占用存储资源、计算资源、带宽资源等资源的值。
[0053] 每个初始分区对应有终分区。每个初始分区有ID,ID编号是大于等于0的整数。每个终分区有ID,编号是大于等于0的整数。获得初始分区所对应终分区的方法是:用终分区的ID对初始分区总数取模,余数的值表示这个终分区所对应的初始分区ID。此时初始分区也就是当前分区。
[0054] 步骤22:检测到有N个新的IP盘准备加入IP盘集群时,获取所述集群中当前存储盘数量M,以及所述集群中当前已有分区总数T,其中M,N以及T都是自然数。
[0055] 控制器和IP盘集群连接,因此准备加入集群的新的IP盘,能够被控制器检测到。在当前已有M个IP盘,当前的分区总数是M·P。这N个IP盘物理上已经接入集群,可以被控制器检测到,但还没有被分配分区,因此还无法存储数据。
[0056] 需要说明的是,“当前”是指准备执行本步骤的时刻。本实施例中,控制器初始化后尚未增加过IP盘,因此当前IP盘数量是M。在其他实施例中,如果在执行本步骤之前,IP盘集群中IP盘数量发生过变化,那么当前IP盘数量不是M。如果在执行本步骤之前,分区进行过分裂,那么当前每个IP盘拥有的初始分区数数量比P更大。T个分区大致平均分配在M个IP盘中。
[0057] 步骤23:判断当前分区数量是否满足当前IP盘与新增IP盘的共同需要。也就是判断当前分区总数T与存储盘总数M+N的数学关系是否满足第一预定条件。具体地,可以使用公式M·P/(M+N)与第一阈值进行比较的方式进行判断。其中,第一阈值是自然数。第一阈值可以由控制器预设。在控制器初始化后第一次执行本步骤时,T=M·P。可选地,上述第一阈值可以是一个大于10小于20的整数,例如16,17,18或者19。
[0058] 一种判断方法是:如果T/(M+N)小于第一阈值,就满足第一预设条件,需要进行分裂。每个IP盘平均拥有的分区数目小于(也可以设置为小于等于)分裂阈值,说明如果不进行分裂每个IP盘拥有的分区太少,因此有必要通过分裂增加分区的总数,那么执行步骤24;否则执行步骤25。
[0059] 另外一种判断方法是:如果进行1次分区分裂后,每个IP盘平均拥有的分区数大于(也可以设置为大于等于)某阈值,说明如果进行分裂,每个IP盘用的分区过多,那么就执行步骤25;否则,执行步骤24。另外也可以把这两种判断方法结合起来进行判断,选择一种对对业务满足程度最高的方案。后续实施例均以第一种判断方法为例对本发明介绍。
[0060] 步骤24:对至少一个当前分区进行分裂,可以分裂一次,也可以分裂多次,直至分裂后的分区数目符合要求,然后执行步骤26。分裂后的分区数目符合要求,可以是分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件。分裂后的总分区数不大于终分区数L。分裂多次是指对分裂产生的分区再次进行若干次分裂。
[0061] 分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件具体可以是:S/(M+N)大于等于第二阈值,第二阈值是自然数。第二阈值例如可以是大于25小于50的自然数,例如25,26,27,48或者49。
[0062] 分裂后的分区数目符合要求可以有多种判断方式。例如,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件就停止分裂。具体而言,例如如果分裂后平均每个IP盘拥有的分区数大于等于第二阈值,就算作满足第二预设条件,停止继续分裂。或者分裂后平均每个IP盘拥有的分区数满足一个预设阈值范围就符合要求,就算作符合要求。
[0063] 如果每次分裂,每个分区分裂成多个子分区,每个分区分裂成的子分区的数目相同。从第一次分裂前,直至分裂结束,分区变化的倍数称为分裂系数。假设每次分裂,每个母分区分裂成2个子分区。那么如果进行1次分裂就结束分裂,那么分裂系数是2。如果进行2次分裂后分裂结束,那么分裂系数是22。
[0064] 如果对至少一个所述当前分区进行分裂是指:对所有当前分区进行分裂。那么分裂后分区总数S=T×分裂系数。如果对至少一个所述当前分区进行分裂是指:对一部分当前分区进行分裂。那么分裂后分区总数S<T×分裂系数。前一种分裂方式的分裂速度更快;后一种分裂方式使得分裂后的分区总数可调整性更好。为了表述方便,本发明实施例以前一种分裂方式进行说明。
[0065] 下面对后一种分裂方法举例:假设终分区总数是1000,而当前分区总数是512,分裂系数是2,如果对每个分区都进行分裂,那么分裂后将获得1024个分区,超过了终分区的总数。由于当前分区总数大于终分区总数是不允许的。为了避免此种情况发生,可以仅对488个当前分区进行分裂,488+512=1000,也就是说分裂后的当前分区总数将恰好达到
1000,没有大于终分区总数的值。此外,如果用户认为1000个当前分区数目过大,例如用户认为分裂后的当前分区总数达到800最合适。那么可以对512个当前分区中的288个分区按照分裂系数2进行分裂,使得分裂后的当前分区总数恰好达到800。应用这后一种分裂方法,可以每次只分裂一个分区,如果分裂系数是2,那么分裂前后当前分区总数的差值为1,使得分区分裂的粒度最小。
[0066] 此外,在上面实施例的基础上,分裂系数也是可以更改的。比如在第一次分裂中,使用分裂系数2,但在第二次分裂中,把分裂系数改为5。也可以达到使分裂获得的分区总数的值更容易调节的目的。
[0067] 当前分区和终分区有对应关系,这个对应关系可以存储在控制器中,并且可以由控制器发布给各管理服务器。每个当前分区有ID,当前分区ID可以是大于等于0的整数。当前分区一共有T个,这T个当前分区的ID形成第一项是0、公差为1的等差数列,项数是T。每个终分区有ID,终分区ID可以是大于等于0的整数。终分区共有S个,S个终分区的ID形成第一项是0、差值为1的等差数列,项数是S。例如由12个分区成24个分区,分裂前的分区ID依次是0,1,2,3……,9,10,11;分裂后的分区ID依次是0,1,2,3……,21,22,23。
[0068] 分区分裂后的分区ID生成规则可以是这样:分裂后的分区中,一个分区保留原分区ID,其余分区ID与原分区ID的值形成等差数列,数列中项数的递增,公差是分裂前的分区总数M。例如,分裂前一共有200个分区,分裂后每个分区分裂为3个,对ID是21的分区进行分裂后生成的3个分区的ID依次是:221、421以及621。这个ID生成规则是可以改变的,只要整个分裂过程结束后,当前分区的ID仍然是一个首项为0、并且公差为1的递增的等差数列即可。
[0069] 例如,按照另外一种分区ID生成规则:ID是0的分区进行分裂出的3个分区ID还可以是0、201以及202;ID是1的分区分裂后得到的分区ID是1、203、204;ID是3的分区分裂后得到的分区ID是3、205、206;其余分区的ID以此类推。
[0070] 需要说明的是,在当前分区总数S即将达到终分区总数L时。可能会出现这样的情况:如果对每个分区都进行一次分裂所生成的分区总数大于终分区总数L。这个时候,那么可以只对部分分区进行分裂。或者减小分裂系数,使得既能通过分裂增加分区总数,又不至于使得分区总数超过终分区总数L。
[0071] 步骤25:执行分区迁移,将原有的M个IP盘所拥有的分区,迁移一部分到新增的N个IP中,使M·P个分区平均分布在M+N个IP盘中。执行步骤25后后,整个系统中的分区总数不变,平均每个IP盘拥有的分区数减少。步骤24和步骤25二选一执行,在一个完整的分区管理方法实施例中,执行了步骤24后,不再执行步骤25或步骤26。
[0072] 步骤26:对控制器中记录的当前IP盘总数更新为M+N,当前分区总数更新为S。本步骤也可以和步骤24一起执行。每个IP盘的当前分区数大致为S/(M+N),因此,也可以不记录总分区数S,而改为记录集群中每个IP盘的当前分区数大致为S/(M+N)。
[0073] 步骤26是为了下一次分裂做准备,因此对本次分区管理操作而言,不是必要步骤。
[0074] 需要说明的是,S个当前分区分配到M+N个IP盘。还可以执行更新分区视图的操作,分区视图中记录当前分区所对应的IP盘,具体而言,可以是当前分区ID和IP盘地址的对应关系。更新分区视图的操作可以在步骤24执行也可以在步骤26执行。后续的数据处理方法,可以本步骤所述更新后的分区视图。实际上,由于正确记录了当前分区和IP盘的对应关系后,分区才能够被使用,因此在本发明其他实施例中,涉及到当前分区发生变化时,都需要执行分区视图更新的操作。
[0075] 上述分区管理方法,可以由图3所示的硬件执行。图3中,控制器3包括接口31,处理器32以及存储介质33。
[0076] 接口31用以提供对外接口,例如连接存储盘集群和管理服务器。存储介质33用以存储计算机程序代码。处理器32通过运行存储介质33中的程序代码执行上述的分区管理方法。
[0077] 参见图4,本发明实施例还提供一种分区管理装置4,分区管理装置4可以是硬件,或者软件形成的虚拟硬件。分区管理装置4可以执行上述的分区管理方法。分区管理装置4包括存储盘检测模块41、第一预定条件判断模块42以及分区分裂模块43。可选的,分区管理装置4还可以包括初始化模块40。可选的,分区管理装置4还可以包括更新模块44。
[0078] 初始化模块40,用于根据集群中IP盘最大容量,确定终分区数量L,L是自然数。以及根据初始IP盘数量,确定每个IP盘拥有的初始分区数量。本步骤是个前置步骤,仅在控制器初始化时执行,因此是可选的。
[0079] 更新模块44可以把初始IP盘数量记录为当前IP盘数M、每个IP盘拥有的初始分区数量记录为当前分区数P,集群中当前已有分区总数T=M·P。更新模块44还会记录终分区数L。后续如果集群中IP盘数量变化或者各个IP盘的分区数量发生变化,会对当前IP盘数M,当前分区数P进行更新。本发明各实施例中,符号“·”表示乘积。
[0080] 终分区的数量是不变的,无法分裂,可以被用户感知。初始分区通常是母分区。母分区是可以分裂的分区,分裂生成下一级母分区或者生成终分区,母分区供存储系统使用,用户无法感知母分区的存在。
[0081] L的值可以由用户设定也可以由系统自动分配,通常由IP盘最大容量,以及IP盘最大容量时各个IP盘的分数,二者共同确定。L=IP盘最大容量×每个IP盘的分区数。假设每个分区拥有X个分区是较佳值。例如用户认为每个IP盘拥有100个分区是一个比较合理的值,也就是X=100,而IP盘集群能够支持的最大IP盘数量是10,000个。那么L=10,000×100=1,000,000。
[0082] 类似的,初始分区数量由用户设定也可以由系统自动分配,一种可选方式是:假设初始情况下IP盘数M=75,每个分区分配100个分区,那么初始分区总数=75×100=7,500。应用本发明方法,在初始阶段,就可以使存储系统中每个IP盘拥有的分区数量自由设定,可以把分区数量设定为既符合用户需求,又不过多占用存储资源、计算资源、带宽资源等资源的值。
[0083] 存储盘检测模块41,用于当检测到有N个新的存储盘准备加入所述集群时,获取所述集群中当前存储盘数量M,以及所述集群中当前已有分区总数T,其中M,N以及T都是自然数。
[0084] 分区管理装置4和IP盘集群连接,因此新加入集群的IP盘,能够被存储盘检测模块41检测到。在当前已有M个IP盘,当前的分区总数是M·P。这N个IP盘物理上已经接入集群,可以被存储盘检测模块41检测到,但还没有被分配分区,因此还无法存储数据。
[0085] 需要说明的是,“当前”是指准备执行某个操作的时刻。本实施例中,分区管理装置4在初始化后尚未增加过IP盘,因此当前IP盘数量是M。在其他实施例中,如果在执行本步骤之前,IP盘集群中IP盘数量发生过变化,那么当前IP盘数量不是M。如果在执行本步骤之前,分区进行过分裂,那么当前每个IP盘拥有的初始分区数数量比P更大。T个分区大致平均分配在M个IP盘中。
[0086] 第一预定条件判定模块42,用于判断当前分区总数T与存储盘总数M+N的数学关系是否满足第一预定条件。
[0087] 判断当前分区数量是否满足当前IP盘与新增IP盘的共同需要。也就是判断当前分区总数T与存储盘总数M+N的数学关系是否满足第一预定条件,可以使用公式T/(M+N)与第一阈值进行比较的方式进行判断。分裂阈值可以由控制器预设。在控制器初始化后第一次执行本步骤时,T=M·P。第一阈值可以是一个大于10小于20的整数,例如16,17,18,19或者20。
[0088] 一种判断方法是:如果T/(M+N)小于第一阈值则分裂,就满足第一预设条件,需要进行分裂。每个IP盘平均拥有的分区数目小于(也可以设置为大于等于)分裂阈值,说明如果不进行分裂每个IP盘拥有的分区太少,那么执行步骤24;否则执行步骤25。
[0089] 另外一种判断方法是:如果进行1次分区分裂后,每个IP盘平均拥有的分区数大于(也可以设置为大于等于)某阈值,说明如果进行分裂,每个IP盘用的分区过多,那么就执行步骤25;否则,执行步骤24。另外也可以把这两种判断方法结合起来进行判断,选择一种对对业务满足程度最高的方案。后续实施例均以第一种判断方法为例对本发明介绍。
[0090] 分区分裂模块43,如果经过第一预定条件判定模块42的判断,结论是满足第一预定条件,则分区分裂模块43用于则对至少一个所述当前分区进行分裂,使得分裂后的分区总数是S,并将分裂后的分区分配给M+N个存储盘。分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件,并且分裂后的分区总数不大于所述集群支持的终分区总数L,其中L、S都是大于1的自然数。将分裂后的分区分配给M+N个存储盘可以是平均分配,无法平均分配时可以尽量平均分配。
[0091] 对至少一个当前分区进行分裂,可以分裂一次,也可以分裂多次,直至分裂后的分区数目符合要求。分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件具体可以是:S/(M+N)大于等于第二阈值,第二阈值是自然数。第二阈值例如可以是大于25小于50的自然数,例如47,48,49或50。
[0092] 分裂后的分区数目符合要求可以有多种判断方式。例如,分裂后的分区总数S与存储盘总数M+N的数学关系满足第二预定条件就停止分裂。具体而言,例如如果分裂后平均每个IP盘拥有的分区数大于等于第二阈值,就算作满足第二预设条件,停止继续分裂。或者分裂后平均每个IP盘拥有的分区数满足一个预设阈值范围就符合要求,就算作符合要求。
[0093] 如果每次分裂,每个分区分裂成多个子分区,每个分区分裂成的子分区的数目相同。从第一次分裂前,直至分裂结束,分区变化的倍数称为分裂系数。假设每次分裂,每个母分区分裂成2个子分区。那么如果进行1次分裂就结束分裂,那么分裂系数是2。如果进行2次分裂后分裂结束,那么分裂系数是22。
[0094] 如果对至少一个所述当前分区进行分裂是指:对所有当前分区进行分裂。那么分裂后分区总数S=T×分裂系数。如果对至少一个所述当前分区进行分裂是指:对一部分当前分区进行分裂。那么分裂后分区总数S<T×分裂系数。前一种分裂方式的分裂速度更快;后一种分裂方式使得分裂后的分区总数可调整性更好。具体可以参见分区管理方法实施例的描述。为了表述方便,本发明实施例以前一种分裂方式进行说明。
[0095] 下面对后一种分裂方法举例:假设终分区总数是1000,而当前分区总数是512,分裂系数是2,如果对每个分区都进行分裂,那么分裂后将获得1024个分区,超过了终分区的总数。由于当前分区总数大于终分区总数是不允许的。为了避免此种情况发生,可以仅对488个当前分区进行分裂,488+512=1000,也就是说分裂后的当前分区总数将恰好达到
1000,没有大于终分区总数的值。此外,如果用户认为1000个当前分区数目过大,例如用户认为分裂后的当前分区总数达到800最合适。那么可以对512个当前分区中的288个分区按照分裂系数2进行分裂,使得分裂后的当前分区总数恰好达到800。应用这后一种分裂方法,可以每次只分裂一个分区,如果分裂系数是2,那么分裂前后当前分区总数的差值为1,使得分区分裂的粒度最小。
[0096] 此外,在上面实施例的基础上,分裂系数也是可以更改的。比如在第一次分裂中,使用分裂系数2,但在第二次分裂中,把分裂系数改为5。也可以达到使分裂获得的分区总数的值更容易调节的目的。当前分区和终分区有对应关系,这个对应关系可以由更新模块44进行存储,还可以由更新模块44发布给数据处理装置。每个当前分区有ID,当前分区ID可以是大于等于0的整数。所有当前分区的ID形成第一项是0、公差为1的等差数列。每个终分区有ID,终分区ID可以是大于等于0的整数。所有终分区的ID形成第一项是0、差值为1的等差数列。例如由12个分区成24个分区,分裂前的分区ID依次是0,1,2,3……,9,10,11;分裂后的分区ID依次是0,1,2,3……,21,22,23。
[0097] 分区分裂后的分区ID生成规则可以是这样:分裂后的分区中,一个分区保留原分区ID,其余分区ID的值与原分区ID的值形成等差数列,等差数列中各项递增,公差是分裂前的分区总数M。例如,分裂前一共有200个分区,分裂后每个分区分裂为3个,对ID是21的分区进行分裂后生成的3个分区的ID依次是:221、421以及621。这个ID生成规则是可以改变的,只要整个分裂过程结束后,当前分区的ID仍然是一个首项为0、并且公差为1的、递增的等差数列即可。
[0098] 需要说明的是,在当前分区总数S即将达到终分区总数L时。可能会出现这样的情况:如果对每个分区都进行一次分裂所生成的分区总数大于终分区总数L。这个时候,那么可以只对部分分区进行分裂。或者减小分裂系数,使得既能通过分裂增加分区总数,又不至于使得分区总数超过终分区总数L。
[0099] 更新模块44,用于在分区分裂模块43的操作执行完成后,把分区管理装置4中记录的当前IP盘总数更新为M+N,当前分区总数更新为S。每个IP盘的当前分区数大致为S/(M+N),因此,也可以不记录总分区数S,而改为记录集群中每个IP盘的当前分区数大致为S/(M+N)。
[0100] 由于更新模块44的操作是为了下一次分裂做准备,因此对本次分区管理操作而言,不是必要模块。
[0101] 可选的,分区分裂模块43或者更新模块44还可以执行分区视图的操作,分区视图中记录当前分区所对应的IP盘,例如当前分区的分区ID和所对应的IP盘的IP盘地址地址的对应关系。也就是说分区视图记录了:对当前的S个分区中,各个分区和M+N个IP盘的哪个IP盘对应。后续的数据处理装置,可以使用所述更新后的分区视图。
[0102] 可选的,还可以包括分区迁移模块(图中未示出),如果不执行分区分裂,可以使用分区迁移模块执行分区迁移,将原有的M个IP盘所拥有的分区,迁移一部分到新增的N个IP中,使M·P个分区平均分布在M+N个IP盘中。
[0103] 参见图5本发明另外提供一种数据处理方法,应用于分区管理设备中。所述分区管理设备中存储有分区视图,所述分区视图记录有当前分区ID和存储盘(例如IP盘)地址的对应关系。数据处理方法在分区管理方法之后执行,以分区管理方法作为基础,但二者有相对的独立性。分区管理设备和控制器连接。分区管理设备例如是管理服务器,或者是交换设备集群,下面以管理服务器为例进行说明。数据处理方法实施例可以基于前文描述的分区管理方法所提供的分区视图执行,分区视图由控制器生成,发送给分区管理设备集群中的各个分区管理设备进行存储。
[0104] 步骤51:根据待写数据生成Key-Value数据。例如把待写数据切分成包含值Value集合,生成所述Value的Key,形成Key-Value数据,Key-Value是Key和Key所对应的Value的组合。由于一个待写数据可以拆分成多个Value,相应的会生成多个Key-Value,为了描述方便,后续步骤仅描述其中某一个具体的Key-Value的处理过程。
[0105] 待写数据来自于应用服务器,例如是文件或者数据流。如果待写数据的尺寸(Size)比较大,为了存储方便,管理服务器可以对数据进行拆分。例如可以拆分成大小为1MB的等大小数据分片,每个分片称为一个Value。Key用于唯一标记一个Value。因此不同Value的Key不同。例如可以使用“数据文件名+数字编号”作为一个Value的Key。对于尺寸比较小的数据,可以不用拆分,直接生成它的Key,然后形成Key-Value数据。在一些特殊场景下,尺寸大的数据也可以不用拆分,直接形成相应的Key-Value数据,然后发送到IP盘进行存储。
[0106] 步骤52:获得键-值Key-Value数据中的值Key,根据所述Key计算所述Key-Value数据对应的终分区ID。如前所述,所述Key-Value数据包括值Value以及与所述Value唯一对应的Key。
[0107] 一种计算终分区ID的方法是,对所述Key进行哈希运算得到所述Key的哈希值,对所述哈希值按照所述终分区总数L取模,余数作为所述终分区ID。L是大于等于2的自然数。这样获得的终分区ID是一个数字,在另外一种实施例中,一种等同的变换是把这个数字映射为另外一个标记,例如映射成英文编号。把这个英文编号作为终分区ID。除了终分区,初始分区、当前分区也可以用英文编号表示。而在计算Key对应的终分区,或者计算当前分区和终分区的对应关系时,可以把这个英文编号重新映射为数字,并把映射获得的数字像数字分区ID一样使用“取模”法进行计数。在这种算法中,终分区的概念可以参见前面的分区管理方法实施例中的描述。
[0108] 步骤53:计算所述终分区ID对应的当前分区ID,其中,每个当前分区ID对应多个终分区ID。
[0109] 一种计算终分区的当前分区的算法是:对所述终分区ID按照当前分区总数T取模,余数作为当前分区ID。当前分区总数T是自然数。同样的,当前分区ID是一个数字,一种等同的变换是把这个数字映射为另外一个标记以作为当前分区ID。当前分区是指在当前时刻,IP盘集群所拥有的分区,每个当前分区对应有一个IP盘。参见前面的分区管理方法实施例中对当前分区的描述。终分区是当前分区的子分区。
[0110] 由此可见当前分区ID和多个终分区ID存在对应关系,对应关系可以参照分区管理方法实施例。当前分区和终分区有对应关系,这个对应关系可以存储在控制器中,在执行步骤53时读取这个对应关系。也可以不预存这个对应关系,执行步骤53时按照算法计算获得这个对应关系。每个当前分区有ID,当前分区ID可以是大于等于的整数。所有当前分区的ID的集合形成第一项是0、公差为1的等差数列。每个终分区有ID,终分区ID可以是大于等于的整数。所有终分区的ID的集合形成第一项是0、差值为1的等差数列。获得当前分区所对应终分区的方法是:用终分区ID对当前分区总数取模,余数的值是这个终分区所对应的当前分区ID。
[0111] 此外,分区分裂后,ID生成规则可以是这样:分裂后的分区中,一个分区保留原分区ID,其余分区ID的值与原分区ID的值形成等差数列,数列中各项递增,公差是分裂前分区总数。例如,分裂前一共有200个分区,分裂后每个分区分裂为3个,对ID是21的分区进行分裂后生成的3个分区的ID依次是:221、421以及621。这个ID生成规则是可以改变的,只要整个分裂过程结束后,当前分区的ID仍然是一个首项为0、并且公差为1的、递增的等差数列即可。例如按照另外一种分区方法:以对ID是0的分区进行分裂,分裂出的3个分区ID还可以是0、201以及202;ID是1的分区分裂后得到的分区ID是1、203、204;ID是3的分区分裂后得到的分区ID是3、205、206;其余分区的ID以此类推。
[0112] 步骤54:查询所述分区视图,获得当前分区ID对应的存储盘地址。
[0113] 所述分区管理设备中存储有分区视图,所述分区视图记录有当前分区ID和存储盘地址的对应关系。如果存储盘是IP盘,那么存储盘地址可以是一个IP地址。如果存储盘是基于其他类型的协议,比如ATM或者IPX协议,那么存储盘地址就是ATM地址,或者IPX地址。
[0114] 步骤55:以所述存储盘地址作为目的地址生成Key-Value报文,发送所述Key-Value报文给所述存储盘,所述Key-Value报文的净荷中携带所述Key-Value数据。
[0115] 存储盘接收到Key-Value报文后,存储Key-Value数据。
[0116] 如图6所示,是本发明数据处理设备实施例,数据处理包括:存储器61,被配置为存储有分区视图,所述分区视图记录有当前分区ID和存储盘地址的对应关系;接口62,被配置为用于提供对外连接;计算机可读介质63,被配置为用于存储计算机程序;处理器64,和所述存储器61、接口62、计算机可读介质连接63,被配置为用于通过运行所述程序,执行上述数据处理方法。例如包括以下步骤。
[0117] 获得键-值Key-Value数据中的值Key,根据所述Key计算所述Key-Value数据对应的终分区ID,其中,所述Key-Value数据包括值Value以及与所述Value唯一对应的Key;计算所述终分区ID对应的当前分区ID,其中,每个当前分区ID对应多个终分区ID;查询所述分区视图,获得当前分区ID对应的存储盘地址;以所述存储盘地址作为目的地址生成Key-Value报文,发送所述Key-Value报文给所述存储盘,所述Key-Value报文携带所述Key-Value数据。
[0118] 如图7所示,是本发明实施例数据处理装置7的附图。包括:存储模块71、终分区计算模块6、当前分区计算模块73、查询模块74和发送模块75。可选的,还可以包括Key-Value数据生成模块76。
[0119] 存储模块71,用于存储分区视图,所述分区视图记录有当前分区ID和存储盘地址的对应关系。存储模块71所使用的存储介质可以是闪存或者硬盘。
[0120] 存储模块71的分区视图来自分区管理装置,例如图4中的分区管理装置4。存储模块71可以和分区管理装置4连接,以便接收分区视图。
[0121] 终分区计算模块72,用于获得键-值Key-Value数据中的值Key,根据所述Key计算所述Key-Value数据对应的终分区ID,其中,所述Key-Value数据包括值Value以及与所述Value唯一对应的Key。
[0122] 终分区计算模块72计算计算终分区ID的一种方法是,对所述Key进行哈希运算得到所述Key的哈希值,对所述哈希值按照所述终分区总数L取模,余数作为所述终分区ID。L是大于等于2的自然数。这样获得的终分区ID是一个数字,在另外一种实施例中,一种等同的变换是把这个数字映射为另外一个标记,例如映射成英文编号。把这个英文编号作为终分区ID。除了终分区,初始分区、当前分区也可以用英文编号表示。而在计算Key对应的终分区,或者计算当前分区和终分区的对应关系时,可以把这个英文编号重新映射为数字,并把映射获得的数字像数字分区ID一样使用“取模”法进行计数。终分区的概念可以参见前面的分区管理方法实施例中的描述。
[0123] 当前分区计算模块73,用于计算所述终分区ID对应的当前分区ID,其中,每个当前分区ID对应多个终分区ID。
[0124] 当前分区计算模块73计算终分区的当前分区的一种算法是:对所述终分区ID按照当前分区总数T取模,余数作为当前分区ID。当前分区总数T是自然数。同样的,当前分区ID是一个数字,一种等同的变换是把这个数字映射为另外一个标记以作为当前分区ID。当前分区是指在当前时刻,IP盘集群所拥有的分区,每个当前分区对应有一个IP盘。参见前面的分区管理方法实施例中对当前分区的描述。终分区是当前分区的子分区。
[0125] 由此可见当前分区ID和多个终分区ID存在对应关系,对应关系可以参照分区管理装置实施例,分区管理装置生成对应关系后发布给各个数据处理装置。当前分区和终分区有对应关系,这个对应关系可以存储在当前分区计算模块73中,也可以不预存这个对应关系,由当前分区计算模块73计算获得这个对应关系。每个当前分区有ID,当前分区ID可以是大于等于的整数。所有当前分区的ID的集合可以形成第一项是0、公差为1的递增的等差数列。每个终分区有ID,终分区ID可以是大于等于的整数。所有终分区的ID的集合形成第一项是0、差值为1的递增等差数列。获得当前分区所对应终分区的方法是:用当前分区的ID对初始分区总数取模,余数的值表示这个当前区所对应的初始分区ID。例如由12个分区成24个分区,分裂前的分区ID依次是0,1,2,3……,9,10,11;分裂后的分区ID依次是0,1,2,3……,21,22,23。
[0126] 此外,分区分裂后,ID生成规则可以是这样:分裂后的分区中,一个分区保留原分区ID,其余分区ID的值与原分区ID的值形成等差数列,数列中各项递增,公差是分裂前分区总数。例如,分裂前一共有200个分区,分裂后每个分区分裂为3个,对ID是21的分区进行分裂后生成的3个分区的ID依次是:221、421以及621。这个ID生成规则是可以改变的,只要整个分裂过程结束后,当前分区的ID仍然是一个首项为0、并且公差为1的递增的等差数列即可。例如按照另外一种分区方法:以对ID是0的分区进行分裂,分裂出的3个分区ID还可以是0、201以及202;ID是1的分区分裂后得到的分区ID是1、203、204;ID是3的分区分裂后得到的分区ID是3、205、206;其余分区的ID以此类推。
[0127] 查询模块74,用于查询所述存储模块71所存储的所述分区视图,获得当前分区ID对应的存储盘地址。
[0128] 所述分区视图记录有当前分区ID和存储盘地址的对应关系。如果存储盘是IP盘,那么存储盘地址可以是一个IP地址。如果存储盘是基于其他类型的协议,比如ATM或者IPX协议,那么存储盘地址就是ATM地址,或者IPX地址。
[0129] 发送模块75,用于以所述存储盘地址作为目的地址生成Key-Value报文,发送所述Key-Value报文给所述存储盘,所述Key-Value报文携带所述Key-Value数据。
[0130] 接下来,作为Key-Value报文的目的设备,存储盘用于通过交换机集群接收Key-Value报文,然后存储Key-Value数据。
[0131] Key-Value数据生成模块76,用于生成Key-Value数据。例如把待写数据切分成包含值Value集合,生成所述Value的所述Key,形成Key-Value数据,Key-Value是Key和Key所对应的Value的组合。由于一个待写数据可以拆分成多个Value,相应的会生成多个Key-Value,为了描述方便,本发明实施例仅介绍某一个具体的Key-Value的处理方式。
[0132] 待写数据来自于应用服务器,例如是文件或者数据流。如果待写数据的尺寸(Size)比较大,为了存储方便,管理服务器可以对数据进行拆分。例如可以拆分成大小为1MB的等大小数据分片,每个分片称为一个Value。Key用于唯一标记一个Value。因此不同Value的Key不同。例如可以使用“数据文件名+数字编号”作为一个Value的Key。对于尺寸比较小的数据,可以不用拆分,直接把这个数据作为Value生成Key-Value数据。在一些特殊场景下,尺寸大的数据也可以不用拆分,直接作为Value生成Key-Value数据。
[0133] 如果数据处理设备7有Key-Value数据生成模块76的话,那么终分区计算模块72可以和Key-Value数据生成模块76连接,如果数据处理设备7没有Key-Value数据生成模块76的话,那么终分区计算模块72可以直接通过对外接口成欧诺个应用服务器获得Key-Value数据。
[0134] 本发明的各个方面、或各个方面的可能实现方式可以被具体实施为系统、方法或者计算机程序产品。因此,本发明的各方面、或各个方面的可能实现方式可以采用完全硬件实施例、完全软件实施例(包括固件、驻留软件等等),或者组合软件和硬件方面的实施例的形式,在这里都统称为“电路”、“模块”或者“系统”。此外,本发明的各方面、或各个方面的可能实现方式可以采用计算机程序产品的形式,计算机程序产品是指存储在计算机可读介质中的计算机可读程序代码。
[0135] 计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质包含但不限于电子、磁性、光学、电磁、红外或半导体系统、设备或者装置,或者前述的任意适当组合,如随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或者快闪存储器)、光纤、便携式只读存储器(CD-ROM)。
[0136] 计算机中的处理器读取存储在计算机可读介质中的计算机可读程序代码,使得处理器能够执行在流程图中每个步骤、或各步骤的组合中规定的功能动作;生成实施在框图的每一块、或各块的组合中规定的功能动作的装置。