内存集群的存储方法及装置、内存集群的读取方法及装置与流程

文档序号:12786350阅读:321来源:国知局
本发明涉及数据库领域,特别涉及一种内存集群的数据存储方法及装置和一种内存集群的读取方法及装置。
背景技术
::一致性哈希算法提出了在动态变化的缓存环境中,判定哈希算法好坏的四个定义:平衡性:平衡性是指哈希的结果能够尽可能分布到所有的缓冲中去,这样可以使得所有的缓冲空间都得到利用。很多哈希算法都能够满足这一条件。单调性:单调性是指如果已经有一些内容通过哈希分派到了相应的缓冲中,又有新的缓冲加入到系统中。哈希的结果应能够保证原有已分配的内容可以被映射到原有的或者新的缓冲中去,而不会被映射到旧的缓冲集合中的其他缓冲区。分散性:在分布式环境中,终端有可能看不到所有的缓冲,而是只能看到其中的一部分。当终端希望通过哈希过程将内容映射到缓冲上时,由于不同终端所见的缓冲范围有可能不同,从而导致哈希的结果不一致,最终的结果是相同的内容被不同的终端映射到不同的缓冲区中。这种情况显然是应该避免的,因为它导致相同内容被存储到不同缓冲中去,降低了系统存储的效率。分散性的定义就是上述情况发生的严重程度。好的哈希算法应能够尽量避免不一致的情况发生,也就是尽量降低分散性。负载:负载问题实际上是从另一个角度看待分散性问题。既然不同的终端可能将相同的内容映射到不同的缓冲区中,那么对于一个特定的缓冲区而言,也可能被不同的用户映射为不同的内容。与分散性 一样,这种情况也是应当避免的,因此好的哈希算法应能够尽量降低缓冲的负荷。如果以单物理机为实例最小单元,按照传统一致性哈希的环形空间构建模式,如图1所示,某个分区的数据将会比较均匀的分布在所有服务器上,在访问时能够比较好的起到均衡作用。但如果应对单实例实效,其他节点托管,然后失效节点恢复再进行数据挪移的情况下,相邻的实例(即图中的节点)在物理上可能分布在不同的服务器上,内存空间内的挪移恢复可能需要在不同物理机间通过网络传输数据进行恢复,系统服务可用性差。技术实现要素:本发明所要解决的技术问题是:如何使得相邻节点存储在相同的服务器中,从而使得内存空间内的数据挪移和恢复更加高效。根据本发明实施例的一个方面,提供了一种内存集群的数据存储方法,包括:基于一致性哈希运算构建各个节点的原始哈希环;将原始哈希环中的各个节点按照相邻关系进行分组,使得相邻节点具有相同的服务器编号,以构建逻辑哈希环;按照逻辑哈希环将各个节点存储到相应的服务器;建立各个节点在原始哈希环和逻辑哈希环的映射关系。根据本发明实施例的另一个方面,提供了一种内存集群的数据读取方法,包括:基于一致性哈希运算确定欲读取数据在原始哈希环上的节点;根据各个节点在原始哈希环和逻辑哈希环的映射关系,确定欲读取数据在逻辑哈希环上的节点;根据逻辑哈希环上的节点对应的服务器编号到相应的服务器进行数据的读取。根据本发明实施例的又一个方面,提供了一种内存集群的数据存储装置,包括:原始哈希环构建模块,用于基于一致性哈希运算构建各个节点的原始哈希环;逻辑哈希环构建模块,将原始哈希环中的各个节点按照相邻关系进行分组,使得相邻节点具有相同的服务器编号,以构建逻辑哈希环;存储模块,用于按照逻辑哈希环将各个节点存储 到相应的服务器;映射关系建立模块,用于建立各个节点在原始哈希环和逻辑哈希环的映射关系。根据本发明实施例的再一个方面,提供了一种内存集群的数据读取装置,包括:节点确定模块,用于基于一致性哈希运算确定欲读取数据在原始哈希环上的节点,并根据各个节点在原始哈希环和逻辑哈希环的映射关系,确定欲读取数据在逻辑哈希环上的节点;数据读取模块,用于根据逻辑哈希环上的节点对应的服务器编号到相应的服务器进行数据的读取。本发明至少具有以下优点:通过构建逻辑哈希环,并建立原始哈希环与逻辑哈希环的映射关系,并按照逻辑哈希环将各个节点存储到相应的服务器,使得相邻节点存储在相同的服务器中,从而使得内存空间内的数据挪移和恢复更加高效。通过以下参照附图对本发明的示例性实施例的详细描述,本发明的其它特征及其优点将会变得清楚。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。图1示出传统一致性哈希的环形空间构建模式的示意图。图2示出本发明内存集群的数据存储方法的一个实施例的流程示意图。图3示出本发明内存集群的数据存储方法的另一个实施例的流程示意图。图4示出本发明对原始一级键K1的表分区段进行切分得到分片号的一个实施例示意图。图5示出本发明对原始一级键K1的表分区段进行切分得到分片号的另一个实施例的示意图。图6示出本发明内存集群的数据读取方法的一个实施例的示意图。图7示出本发明内存集群的数据存储装置的一个实施例的结构示意图。图8示出本发明切分模块的一个实施例的结构示意图。图9示出本发明切分模块的另一个实施例的结构示意图。图10示出本发明内存集群的数据读取装置的一个实施例的示意图。具体实施方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。以下对至少一个示例性实施例的描述实际上仅仅是说明性的,决不作为对本发明及其应用或使用的任何限制。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。下面结合图2描述本发明一个实施例的内存集群的数据存储方法。图2示出本发明内存集群的数据存储方法的一个实施例的流程示意图。如图2所示,该实施例的内存集群的数据存储方法包括步骤S202,基于一致性哈希运算构建各个节点的原始哈希环。原始哈希环可以参考现有技术构建。步骤S204,将原始哈希环中的各个节点按照相邻关系进行分组,使得相邻节点具有相同的服务器编号,以构建逻辑哈希环。步骤S206,按照逻辑哈希环将各个节点存储到相应的服务器。步骤S208,建立各个节点在原始哈希环和逻辑哈希环的映射关系。上述方法中,通过构建逻辑哈希环,建立原始哈希环与逻辑哈希环的映射关系,并按照逻辑哈希环将各个节点存储到相应的服务器,使得相邻节点存储在相同的服务器中,从而使得内存空间内的数据挪移和恢复更加高效。对于内存空间内的数据来说,数据的分散性越强,数据的挪移和恢复越复杂。因此,可以将本发明内存集群的数据存储方法与内存集群的存储均衡方法相结合运用,使得本发明的技术效果更加明显。下面结合图3描述本发明一个实施例的内存集群的数据存储方法。图3示出本发明内存集群的数据存储方法的另一个实施例的流程示意图。如图3所示,在图2所示的实施例基础上,本实施例还包括:步骤S3012,对原始一级键K1的表分区段进行切分得到分片号。原始一级键K1为定制对象DO的原始逻辑键,原始一级键K1由数据库段、数据表段、表分区段组成。步骤S3014,根据原始一级键K1、分片号生成均衡一级键K1’。其中,均衡一级键K1’为定制对象DO的均衡逻辑键。步骤S3016,采用(K1’,DO)的数据存储形式存储键值数据。通过上述方法,对原始一级键K1的表分区段进行进一步细分,然后根据原始键和分片号重新构建均衡键,并基于均衡键进行数据的存储,实现了数据在内存集群数据节点上的均匀分布,进而充分利用内存集群的存储容量。然后,利用图2所示的实施例方法对进一步细分后的数据进行存储,使得相邻的节点存储在相同的服务器中,从而在数据挪移和恢复过程中只需在相同服务器内对数据进行操作,避免了服务器之间的数据操作,提高了数据操作效率。下面结合图4描述本发明一个实施例的对原始一级键K1的表分区段进行切分得到分片号方法。图4示出本发明对原始一级键K1的表分区段进行切分得到分片号的一个实施例的示意图。如图4所示,定制对象DO中存储(K2,V),二级键K2为定制对象DO的数据键,V为定制对象DO的数据值。对原始一级键K1的表分区段进行切分得到分片号的一种具体实现方法包括:步骤S402,对原始一级键K1和二级键K2进行哈希运算。步骤S404,将哈希运算所得哈希值对计划分片数M进行取余运算。步骤S406,将取余运算的结果作为分片号。例如,集群节点数是4,分区的最大分片数设计为40。那么用户向db1的table1中存储一新的值:Key-Value,该值对应的分区是:Stringslice=String.valueOf(Math.abs(Key.hashCode())/40)。假设计算的结果为23。如果完整的分区键名为db1_table1_p1,则新的分区名为db1_table1_p1_23。在分区的基础上进一步把数据“切”分成片。当切片数大于节点数时,切片就会根据TwemProxy的特性被均匀分布到不同的节点上。原则上切片数越多,数据存储粒度越小,数据分布就越均匀,从而实现数据在内存集群数据节点上的均匀分布,进而充分利用内存集群的存储容量。但切片数据也没必要过大,一般保持在节点数的N(N≤10)倍即可。下面结合图5描述本发明一个另实施例的对原始一级键K1的表分区段进行切分得到分片号方法。图5示出本发明对原始一级键K1的表分区段进行切分得到分片号的另一个实施例的示意图。如图5所示,对原始一级键K1的表分区段进行切分得到分片号的另一种具体实现方法包括:步骤S502,对原始一级键K1和二级键K2进行md5运算;步骤S504,取md5运算所得摘要值的后n位作为分片号,n位所能表示的最大数值不大于计划分片数M。通过对原始一级键K1和二级键K2进行md5运算获取分片号,同样可以使得数据存储粒度越小,数据分布就越均匀,从而实现数据在内存集群数据节点上的均匀分布,进而充分利用内存集群的存储容量。与图4所示的实施例相比,md5算法可以根据原始一级键K1和二级键K2计算出结果为唯一值的分片号,但是md5算法对CPU的占用较高,在大的并发压力下会影响性能。此外,定制对象DO可以通过MAP的形式存储。下面结合图6描述本发明一个实施例的内存集群的数据读取方法。图6示出本发明内存集群的数据读取方法的一个实施例的示意图。 如图6所示,该实施例的内存集群的数据读取方法包括:步骤S602,基于一致性哈希运算确定欲读取数据在原始哈希环上的节点。步骤S604,根据各个节点在原始哈希环和逻辑哈希环的映射关系,确定欲读取数据在逻辑哈希环上的节点。步骤S606,根据逻辑哈希环上的节点对应的服务器编号到相应的服务器进行数据的读取。通过上述方法,用户采用的数据读取方式不做改变,而此时相邻的节点已经存储在相同的服务器中,既实现了一致性哈希功能,还实现了数据存储的均衡。下面结合图7描述本发明一个实施例的内存集群的数据存储装置。图7示出本发明内存集群的数据读取方法的另一个实施例的示意图。如图7所示,该实施例的内存集群的数据存储装置70包括:原始哈希环构建模块702,用于基于一致性哈希运算构建各个节点的原始哈希环;逻辑哈希环构建模块704,将原始哈希环中的各个节点按照相邻关系进行分组,使得相邻节点具有相同的服务器编号,以构建逻辑哈希环。存储模块706,用于按照逻辑哈希环将各个节点存储到相应的服务器。映射关系建立模块708,用于建立各个节点在原始哈希环和逻辑哈希环的映射关系。此外,数据存储装置70还可以包括:切分模块710,用于对原始一级键K1的表分区段进行切分得到分片号。均衡一级键生成模块712,用于根据原始一级键K1、分片号生成均衡一级键K1’。键值数据存储模块714,用于采用(K1’,DO)的数据存储形式将键值数据存储到节点中。其中,原始一级键K1为定制对象DO的原始逻辑键,所述原始一级键K1由数据库段、数据表段、表分区段组成,均衡一级键K1’为定制对象DO的均衡逻辑键。下面结合图8描述本发明一个实施例的切分模块。图8示出本发明切分模块的一个实施例的结构示意图。如图8所示,该实施例的切分模块810包括:哈希运算单元8102,用于对原始一级键K1和二级键K2进行哈希运算;取余运算单元8104,用于将哈希运算所得哈希值对计划分片数M进行取余运算,并将取余运算的结果作为分片号。下面结合图9描述本发明另一个实施例的切分模块。图9示出本发明切分模块的另一个实施例的结构示意图。如图9所示,该实施例的切分模块910包括:md5运算单元9102,用于对原始一级键K1和二级键K2进行md5运算;分片号确定单元9104,用于取md5运算所得摘要值的后n位作为分片号,n位所能表示的最大数值不大于计划分片数M。下面结合图10描述本发明一个实施例的内存集群的数据读取装置。图10示出本发明内存集群的数据读取装置的一个实施例的结构示意图。如图10所示,该实施例的数据读取装置100包括:节点确定模块1002,用于基于一致性哈希运算确定欲读取数据在原始哈希环上的节点,并根据各个节点在原始哈希环和逻辑哈希环的映射关系,确定欲读取数据在逻辑哈希环上的节点;数据读取模块1004,用于根据逻辑哈希环上的节点对应的服务器编号到相应的服务器进行数据的读取。本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是 只读存储器,磁盘或光盘等。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1