一种数据多副本混合存储方法及系统的制作方法

文档序号:6508552阅读:364来源:国知局
一种数据多副本混合存储方法及系统的制作方法
【专利摘要】本发明提供了一种数据多副本混合存储方法及系统,在数据加载阶段,将原始数据进行多次分区,每次分区采用不同的分区方式,将每次分区所得到的的分区数据存储到多个服务器中。本发明还主要针对大规模数据联机分析提供了一种数据处理方法。本发明在没有增加数据存储占用的磁盘空间、没有降低数据可靠性的前提下,增加了数据分区的多样性,使得更多场景的按分组进行的一类数据处理可以按照分区并行执行,降低了更多场景下的数据查询处理的开销,解决了现有技术中副本单一分区导致某些按分组进行数据处理的场景效率低的问题。
【专利说明】一种数据多副本混合存储方法及系统
【技术领域】
[0001]本发明涉及计算机领域,尤其涉及一种数据多副本混合存储方法、数据多副本混合存储系统及数据处理方法。
【背景技术】
[0002]在大数据处理领域,数据通常是分片存储的,数据分区的目的不仅仅是将数据分布式存储。为了进一步保证可靠性,还会采用副本技术。目前,现有的大数据分区存储技术,针对一份数据的多个副本都是采用相同的分区方式。减少加载阶段的计算量的同时,如果数据的某个副本出错或者丢失时,可直接拷贝其他存在的正确的副本即可恢复;数据有修改时,也可以直接对相应的多个副本同时修改即可。在某些操作中,合理的数据分区可以减少数据处理过程中节点之间的数据传输开销,进而很大程度上提高数据分布式处理的效率。尤其是大表的连接操作,分区是很重要的技术方案。将连接操作按照相同的方式进行分区,对应的分区内部进行连接操作,可以对多个分区同时进行连接操作,这些连接操作可以在多个节点上并行执行,同时不必有数据迁移和重分布的操作。这也是如今在内存受限和网络带宽成为瓶颈的情况下,大表连接操作高效可行的方案。数据存储和分区需要数据迁移,尤其是多节点之间的分布式存储和分区需要消耗较高的网络带宽,查询之前临时进行分区显然会导致查询效率大大降低,加载的时候采用预分区存储,可以一劳永逸地提高查询效率。
[0003]例如:分布式文件系统HDFS,直接根据文件大小分块存储,没有考虑特定分区方式。即使构建于之上的数据仓库Hive和数据库HBase提供了各自的分区功能,分布式文件系统HDFS的多个副本仍然是采用了相同的分区方式。还有,现有的NoSQL(也即Not onlySQL)数据库HBase仅采用了范围划分,也即Range分区这一种分区方式。而非关系数据库Cassandra采用一致性Hash在多节点之间分布数据。
[0004]从以上说明可以看出,目前在大数据处理系统中,在数据加载时只会采用一种分区方式。如果连接的列和连接条件与分区不一致,仍然会导致数据大范围的重分布操作,还是会导致很高的网络带宽开销。也就是,如果分区是根据一列进行的分区,而连接操作是根据另一列进行的,这种情况就是分区方式与连接操作的条件不一致,就需要大范围的数据重分布操作。除此之外,很多业务可能需要针对同一批数据按照不同的分区进行操作,例如,有的操作是按第一列进行分组操作(datal join data2 on coll或者group bycoll),有的操作可能是按第二列进行分组操作(datal join data2 on col2或者group bycol2)。因此,单一的分区方式在分区与连接操作不一致或同一批数据需要按不同分区进行操作等场景就可能导致大范围的数据重分布,在一定程度上限制了数据处理的效率。

【发明内容】

[0005]针对现有技术中存在的上述问题,本发明提出了一种数据多副本混合存储方法及系统,增加了数据分区的多样性,使得更多场景的按照分组进行的一类数据处理可以按照分区并行执行,以增加少量加载阶段的计算量为代价,提高了更多场景的数据处理的计算效率。
[0006]为实现上述目的,本发明提供了一种数据多副本混合存储方法,主要技术方案如下:
[0007]在数据加载阶段,将原始数据进行多次分区,每次分区采用不同的分区方式;
[0008]将每次分区所得到的分区数据存储到多个服务器上。
[0009]所述分区方式为范围Range分区、散列Hash分区、列表分区或混合分区。
[0010]将每次分区所得到的分区数据按存储负载均衡原则、访问负载均衡原则或数据可靠性原则存储到各服务器上。
[0011]本发明还提供了一种数据多副本混合存储系统,包括:
[0012]分区模块,用于在数据加载阶段,将原始数据进行多次分区,其中,每次分区采用不同的分区方式;
[0013]服务器,用于存储每次分区所得到的分区数据。
[0014]所述分区模块具体用于按照范围Range分区、散列分区Hash分区、列表分区或混合分区方式将原始数据进行多次分区。
[0015]所述服务器具体用于根据存储负载均衡原则、访问负载均衡原则或数据可靠性原则存储每次分区所得到的分区数据。
[0016]本发明还提供了一种数据处理方法,包括以下步骤:
[0017]在数据加载阶段,将多组数据进行多次分区,每次分区采用不同的分区方式,每次分区时各组数据的分区方式相同;
[0018]将各次分区所得到的的分区数据存储到多个服务器中;
[0019]其中,所述多组数据在同一次分区中得到的具有相同属性的分区数据存储于同一服务器中。
[0020]所述具有相同属性的分区数据为:各组数据每次分区后,不同组数据之间属性值相同的分区数据。
[0021]所述分区方式为范围Range分区、散列Hash分区、列表分区或混合分区。
[0022]所述数据处理方法具体用于联机分析处理大数据分析应用场景。
[0023]本发明提供的一种数据多副本混合存储方法、数据多副本混合存储系统及数据处理方法,以在数据加载阶段增加少量计算为代价,在没有增加数据存储占用的磁盘空间、没有降低数据可靠性的前提下,降低了更多场景下的数据查询处理的开销,解决了现有技术中副本单一分区的数据处理效率低的问题。
【专利附图】

【附图说明】
[0024]图1为本发明实施例的数据多副本混合存储方法的示意图;
[0025]图2为现有技术中的数据多副本存储方法的示意图;
[0026]图3为本发明实施例的数据多副本混合存储系统的示意图;
[0027]图4为本发明实施例的数据处理方法的流程图;
[0028]图5为本发明实施例的两组数据多副本混合存储的示意图;
[0029]图6为本发明实施例一的示意图;【具体实施方式】
[0030]为了使本发明的技术方案及优点更加清楚明白,以下结合附图对本发明的示例性实施例进行进一步详细的说明,显然,所描述的实施例仅是本发明的一部分实施例,而不是所有实施例的穷举。
[0031]本发明为了迎合海量数据处理的实际需求,提出了一种数据多副本混合存储方法及系统,其中,副本的数量可以根据实际需要来确定。本发明的核心思想在于,以增加少量加载阶段的计算量为代价,来提高更多场景的计算效率。本发明的数据多副本混合存储方法很适合写一次、读多次、计算多次的联机分析处理OLAP (On-Line AnalyticalProcessing)大数据分析应用场景。
[0032]所谓多副本是指一份数据存储多个备份,而混合存储指的是每个副本以不同的分区方式存储。
[0033]下面结合附图对本发明实施例进行详细说明:
[0034]本发明实施例提供了一种数据多副本混合存储方法,包括以下步骤:
[0035]在数据加载阶段,将原始数据进行备份存储的时候,也即进行多次分区,多次分区形成的分区数据作为原始数据的多个副本,每个副本采用不同的分区方式,也即每次分区采用不同的分区方式;其中,每次采用的分区方式可以是现有技术中的范围Range分区、散列Hash分区、列表分区或混合分区。将每次分区所得到的分区数据存储到多个服务器上。不同分区方式得到的分区数据作为原始数据的多个副本,存储到多个服务器上。其中,存储时可以根据存储负载均衡原则、访问负载均衡原则或数据可靠性原则等将每次分区所得到的分区数据存储到各服务器上。
[0036]如图1所示,以两次分区为例,对本发明实施例的数据多副本混合存储方法具体说明如下:
[0037]将原始数据DATA按分区方式I进行分区,形成分区A、分区B、分区C ;再将原始数据DATA按分区方式2进行分区,形成分区2-1、分区2-2、分区2_3、分区2_4 ;将这两种分区方式形成的分区作为双副本存储到服务器1、服务器2、服务器3上,存储可以根据负载均衡原则进行存储,在此就不再赘述。
[0038]采用本发明实施例所提供的数据多副本混合存储方法,可以使得服务器上存储的多副本为按不同分区方式形成的分区数据,既可以达到作为副本的目的,又可以为后续数据之间进行连接操作时提供便利,不需要数据迁移。不仅如此,本发明实施例所提供的数据多副本混合存储方法还可以在所有需要针对分区进行操作的业务中提高数据处理效率。比如,数据I和数据2按第一列连接(dataljoin data2 on coll或者group by coll),有的操作可能是按第二列进行分组操作(datal join data2 on col2或者group by col2),这时采用本发明实施例提供的数据多副本混合存储方法就可以根据多个分区进行并行操作,不需要数据重新分布了。
[0039]而传统的数据副本存储方法,在数据加载阶段仅将数据按照一种分区方式进行一次分区,形成多个分区;然后将每个分区复制成多份,分发到相应的服务器节点上存储。以双副本为例,如图2所示,首先将系统中每种数据在加载时按一种分区方式分成5个分区,分别为Datal_Data5,再将每个分区复制一份作为副本,存储在各服务器上。当一种数据需要和另一种数据进行连接操作时,只能按照上述所说的那一种分区方式进行连接,如果连接操作是按另一种分区方式进行的,则需要大量的数据迁移,重新分布数据或者说是重划分数据。
[0040]而采用本发明的数据多副本混合存储方法,则可以避免上述存在的技术问题。与上述传统的数据副本存储方法相比,采用本发明实施例的技术方案,既起到了备份的作用,数据的存储量没有变化,且如果出现按照第二种分区进行连接操作的应用场景,也不必进行数据重划分。
[0041]基于同一发明构思,本发明实施例还提供了一种数据多副本混合存储系统,如图3所示,该系统包括分区模块201和服务器202:
[0042]分区模块201,用于在数据加载阶段,为了保证可靠性,需要将原始数据多副本备份存储,也即将原始数据进行多次分区,其中,本发明实施例中将多副本采用不同的分区进行存储,即每次分区采用不同的分区方式;其中,分区模块具体用于按照范围Range分区、散列分区Hash分区、列表分区或混合分区方式将原始数据进行多次分区。分区方式可以是现有技术中的范围分区(Range分区)、散列分区(Hash分区)、列表分区、混合分区中的任意一个或几个。
[0043]分区操作可以采用嵌套式的分区,也即,以一组数据为例,首先将该数据按一种分区方式进行分区,在所形成的分区内部将各分区数据按照另一种分区方式再进行一次分区。采用这样层层嵌套的方式实现分区,可以将不同分区方式形成的分区之间互相作为副本,也即多副本。分区操作还可以采用直接将该组数据分别进行多次分区,每次分区采用不同的分区方式。也即,将该数据按一种分区方式进行分区,再将该数据按另一种分区方式进行分区,以此类推。
[0044]服务器202,用于存储每次分区所得到的分区数据。服务器在存储过程中,具体用于根据存储负载均衡原则、访问负载均衡原则或数据可靠性原则存储每次分区所得到的分区数据。本领域技术人员可以有各种存储方式,本发明对此不做限制。对于不同组数据,应确保每个服务器上存有多组数据在同一次分区中得到的具有相同属性的分区数据。
[0045]对于系统中的数据都可以采用本发明实施例所提供的数据多副本混合存储方法,当数据之间需要进行连接操作时,可能涉及多组数据之间的交互。因此,基于同一发明构思,本发明实施例还提供了一种数据处理方法,主要针对大规模数据的联机分析处理,如连接操作。如图4所示,包括以下步骤:
[0046]步骤S101、假设系统中有多组数据,在数据加载过程中,将多组数据进行多次分区,每次分区采用不同的分区方式,每次分区时各组数据的分区方式相同。
[0047]也就是说,假设多组数据为A、B、0..Z,每个字母代表一组数据。将这多组数据首先分别按分区方式I进行第一次分区,得到:
[0048]A组数据第一次分区结果:An、A12、…、Au.、…、Alm,
[0049]B组数据第一次分区结果:Bn、B12、…、By、…、Blm,
[0050]C组数据第一次分区结果:Cn、C12、…、Qj、…、Clm, …
[0051]Z组数据第一次分区结果:Zn、Z12、...> Z1j…、Zlm。
[0052]其中,字母Α、Β、0..Ζ表示不同的数据组,而每个字母的下标第一位代表第几次分区(本次为第一次分区则下标第一位为“I”),每个字母的下标第二位表示该组数据的第一次分区后的分区序号。“m”表示第一次分区数量为m个分区。
[0053]再将多组数据按分区方式2进行第二次分区,得到:
[0054]A21、A22、...、A2j.、...、A2n,
[0055]B21、B22、...、B2j、…、B2n,
[0056]C21、C22、...、C2j.、…、C2n,...[0057]Z21、Z22、...、Z2j.、…、Z2n。
[0058]每个字母的下标第一位“2”表示第二次分区,以C21为例说明,代表C组数据按分区方式2进行第二次分区得到的第I个分区。“η”表示第二次分区数量为η个分区,其中每次分区的数量可以相同,也可以不同,也就是说m可以等于η,也可以不等于η。
[0059]以此类推,以分区方式i进行第i次分区,得到:
[0060]An、Ai2、...> Aij …,
[0061]Bn、Bi2、...> Bij …,
[0062]Cn、Ci2、...> Cij …,...[
0063]Zn、Zi2、...> Zij...。
[0064]其中,下标相同的不同组数据的分区属于具有相同属性的数据分区。也即,An、Bn、Cn、…、Z11为具有相同属性的数据分区,A23、B23、C23、…Z23也为具有相同属性的数据分区,同理,Au、Bu、Cu、…、ZuS具有相同属性的数据分区。这样,不同分区方式形成的分区作为该组数据的多副本,也即,Αη-Α1ηι、A21-A2n,…、Ail-Aij均为A组数据的多副本。
[0065]S102、将各次分区所得到的的分区数据存储到多个服务器中,多组数据在同一次分区中得到的具有相同属性的数据分区存储于同一服务器中。也就是说,将各组数据下标值相同的分区存储于同一服务器中,以便于后续的连接操作。如,将分区a21、b21、c21、…、Z21放到同一服务器上进行存储。对于同组数据的各分区,可以根据一定的存储负载均衡原贝U、访问负载均衡原则、数据可靠性原则等将同组数据分布存储到多个服务器上,本发明对此不作限制。
[0066]其中,分区方式可以是范围Range分区、散列Hash分区、列表分区或者是复合分区(也称混合分区),也可以是其他的分区方式。本发明对多组数据进行分区的分区方式不作限制,本领域技术人员可以采用现有技术中其他的分区方式,但只要是采用本发明所提供的数据处理方法,均应该在本发明的保护范围之内。
[0067]其中,将数据按照多种分区方式进行分区,可以得到多个副本,具体进行几次分区可以根据实际需要进行设置,本发明对分区次数不作限制。一般情况下,考虑到系统性能的原因,进行2次分区(也即i = 2)即可达到混合存储备份的目的。
[0068]另外,每次分区具体分成多少个分区,也即分区数量,在实际应用中可能根据需要或者根据分区方式都会有所不同,本发明对每次分区的分区数量也不作限制。
[0069]采用本发明实施例所提供的存储方式,可以保证如果出现按照第i种分区方式进行连接操作时也不需要进行数据重划分了,因为每个服务器中已经存在各组数据按照第i种分区方式形成的具有相同属性的分区数据。这样的话,当每种数据之间进行连接操作时,就可以按多种分区方式进行连接,不需要数据迁移。此处所说的连接操作,是指将数据库中的两种或两种以上的数据,根据相同的字段的值相等的行合并为一行,形成一个新的大数据表。[0070]具体的连接操作如图5所示,下面以两组数据(数据I和数据2)进行具体连接操作时的过程为例,进行详细说明如下:
[0071]假设数据I和数据2是需要进行连接操作的两种数据,且二者的数据量都比较大,一台机器内有限,多个服务器节点并行联结,效率将会更高。首先将数据I按不同的分区方式进行分区,此处以两次分区为例,按分区方式I分为分区An、A12、A13、A14,按分区方式2分为分区A21、A22、A23、A24、A25 ;同理,将数据2按照数据I的分区方式进行两次分区,按分区方式I分为分区Bn、B12> B13、B14 ;,按分区方式2分为分区B21、B22、B23、B24> B25O
[0072]在数据存储时,将各个分区按照负载均衡原则存储到各服务器上,只需要确保数据I和数据2相同属性的分区数据在同一服务器上即可,这样就可以避免迁移。例如,将数据I的分区A11与数据2的分区B11存储在同一服务器(服务器I)上,将数据I的分区A22与数据2的分区B22存储在同一服务器(服务器3)上;当数据I与数据2需要按照分区方式I进行连接操作时,就不需要与其他节点进行数据交换,当数据I与数据2需要按照分区方式2进行连接操作时,也不需要与其他节点进行数据交换。
[0073]本发明中同组数据的不同分区在服务器上的分布只需要遵循负载均衡原则、数据可靠性原则等即可,而对于不同组数据,则需要确保不同组数据的相同分区在一个服务器上,这样在连接操作时就可以避免数据迁移。
[0074]比如两次分区的情况,采用这样的数据处理方法,可以确保即使对数据进行连接操作时与第一次分区的方式不一致,也可以以第二次分区方式进行连接操作。当然,上述说明仅是本发明实施例的一个举例,具体应用时可以进行多次分区,而不仅限于第一次分区和第二次分区。同时,对于分区形成的分区数也只是举例而已,现实应用时可能根据分区方式的不同或其他需要,将数据分区成多个,本发明对分区的次数和每次分区形成的分区数量都不作限制。
[0075]实施例一、
[0076]如图6所示,将北京人口数据作为数据1、天津人口数据作为数据2,。首先分别将北京人口数据(数据I)按姓氏(分区方式I)拆分成多个分区,拆分后的结果就是北京张氏为分区A11,北京王氏为分区A12…;再按年龄(分区方式2)拆分成多个分区,拆分结果为北京0-30岁为分区A21,北京31-60岁为分区A22…。同样的,天津人口数据(数据2)也按姓氏(分区方式I)拆分,拆分结果为天津张氏为分区B11,天津王氏为分区B12…;再按年龄(分区方式2)拆分,拆分结果为天津0-30岁为分区B21,天津31-60岁为分区B22…。
[0077]在进行数据存储时,考虑一定的负载均衡策略将北京人口数据(数据I)存储到多个服务器上,只需确保北京人口数据(数据I)和天津人口数据(数据2)的相同分区在同一服务器上存储即可。比如,将北京张氏(分区A11)与天津张氏(分区B11)存储在同一服务器上,将北京0-30岁(分区A21)与天津0-30岁(分区B21)存储在同一服务器上。
[0078]这样,当北京人口数据(数据I)与天津人口数据(数据2)进行连接操作时,不管是以姓氏(分区方式I)进行连接,还是以年龄(分区方式2)进行连接,都不会涉及与其他服务器节点的数据迁移。
[0079]传统数据副本存储方法是将北京人口数据(数据I)按姓氏分区,将天津人口数据(数据2)也按姓氏分区,并将每个分区分别复制成多份,分发到相应的服务器节点上存储。这样的方式,如果连接操作采用的是以年龄进行连接,与按姓氏分区的方式不一致。由于每个服务器里只有按照姓氏得到的分区数据,没有按年龄分区的数据,就需要将数据进行重分布或者说是重划分之后才能进行并行计算,需要大量的数据迁移工作。
[0080]本发明提供的这种数据处理方法,虽然在加载时多了一步分区计算,但是数据还是只需要扫描一遍。因此,增加的开销只有分区计算,这部分开销也是为了后面重复多样的数据处理做准备的。用户可以权衡整体的性能,决定是否采用本发明所提供的数据处理方法。
[0081]采用本发明的技术方案,每个数据副本都至少是二维分区的,一种分区内部会嵌套另外一种分区。因此,在进行数据恢复时,需要涉及另外一种分区方式的全部副本,利用每个副本属于丢失副本分区的数据进行重构恢复。由于加载时每个分区内部的多个二维分区已经是分开存储的,因此这种恢复也省去了逐条数据扫描分区的开销,仍然只需要跟传统分区方式一样的数据拷贝开销,因为拷贝的数据量并没有变化。
[0082]采用本发明所提供的技术方案,在没有增加数据存储占用的磁盘空间、没有降低数据可靠性的前提下,增加了数据分区的多样性,使得更多场景的按分组进行的一类数据处理可以按照分区并行执行,降低了更多场景下数据查询处理的开销,因为省去了开销巨大的数据迁移操作,解决了现有技术中副本单一分区导致某些按分组进行数据处理的场景效率低的问题。
[0083]以上实施例仅用以说明本发明的技术方案而非对其进行限制,在不背离本发明精神及其实质的情况下,本领域技术人员可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围内。
【权利要求】
1.一种数据多副本混合存储方法,其特征在于,包括以下步骤: 在数据加载阶段,将原始数据进行多次分区,每次分区采用不同的分区方式; 将每次分区所得到的分区数据存储到多个服务器上。
2.如权利要求1所述的数据多副本混合存储方法,其特征在于,所述分区方式为范围Range分区、散列Hash分区、列表分区或混合分区。
3.如权利要求1所述的数据多副本混合存储方法,其特征在于,将每次分区所得到的分区数据按存储负载均衡原则、访问负载均衡原则或数据可靠性原则存储到各服务器上。
4.一种数据多副本混合存储系统,其特征在于,包括: 分区模块,用于在数据加载阶段,将原始数据进行多次分区,其中,每次分区采用不同的分区方式; 服务器,用于存储每次分区所得到的分区数据。
5.如权利要求4所述的数据多副本混合存储系统,其特征在于,所述分区模块具体用于按照范围Range分区、散列分区Hash分区、列表分区或混合分区方式将原始数据进行多次分区。
6.如权利要求4所述的数据多副本混合存储系统,其特征在于,所述服务器具体用于根据存储负载均衡原则、访问负载均衡原则或数据可靠性原则存储每次分区所得到的分区数据。
7.一种数据处理方法,其特征在于,包括以下步骤: 在数据加载阶段,将多组数据进行多次分区,每次分区采用不同的分区方式,每次分区时各组数据的分区方式相同; 将各次分区所得到的分区数据存储到多个服务器中;其中,所述多组数据在同一次分区中得到的具有相同属性的分区数据存储于同一服务器中。
8.如权利要求7所述的数据处理方法,其特征在于,所述具有相同属性的分区数据为:各组数据每次分区后,不同组数据之间属性值相同的分区数据。
9.如权利要求7所述的数据处理方法,其特征在于,所述分区方式为范围Range分区、散列Hash分区、列表分区或混合分区。
10.如权利要求7所述的数据处理方法,其特征在于,所述数据处理方法具体用于联机分析处理大数据分析应用场景。
【文档编号】G06F17/30GK103440301SQ201310368095
【公开日】2013年12月11日 申请日期:2013年8月21日 优先权日:2013年8月21日
【发明者】王颖, 狄静舒, 宋怀明, 苗艳超, 刘新春, 邵宗有 申请人:曙光信息产业股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1