一种分布式集群中数据一致性的处理方法及装置与流程

文档序号:31791026发布日期:2022-10-14 15:13阅读:55来源:国知局
一种分布式集群中数据一致性的处理方法及装置与流程

1.本发明涉及计算机技术领域,尤其涉及一种分布式集群中数据一致性的处理方法及装置。


背景技术:

2.在对云原生的分布式数据库中的数据进行查询时,通常是采用多个分布式节点分别查询的方式。
3.在实现本发明过程中,发明人发现现有技术中至少存在如下问题:
4.分布式数据库的数据表在不断地被更新,多个分布式节点分别对同一数据表进行查询时,读取同一数据的数值可能不同,从而导致数据不一致的情况发生。


技术实现要素:

5.有鉴于此,本发明实施例提供一种分布式集群中数据一致性的处理方法及装置,在分布式集群中的任一节点根据同一数据处理请求进行处理时,可以根据查询版本号及数据文件的事务信息确定出相同的目标数据文件;由此,在进行分布式查询时,多个节点均可以根据相同的目标数据文件进行查询,从而保证了多个节点读取到同一数据的相同数值,进而保证了分布式查询的数据一致性。
6.进一步地,利用合并树存储结构对数据表进行存储,每一次新增、更新或删除等写数据的操作均产生新的数据文件,对新的数据文件中的数据进行写操作,从而得到多个版本的数据文件,可以避免写操作影响读操作,提高了分布式数据库读写并发性,进而提高了分布式数据库的性能;另外,通过定期将多个数据文件合并,避免了出现大量小文件的情况,节约了存储空间,从而提升了读写效率。
7.为实现上述目的,根据本发明实施例的第一方面,提供了一种分布式集群中数据一致性的处理方法,包括:
8.获取数据处理请求;所述数据处理请求包括待处理数据标识;
9.根据所述待处理数据标识确定待处理数据表、以及所述待处理数据表对应的一个或多个数据文件和每一个所述数据文件的事务信息;所述一个或多个数据文件是根据一次或多次事务操作生成的;
10.确定所述待处理数据表对应的查询版本号;
11.根据所述事务信息和所述查询版本号,确定所述数据处理请求对应的目标数据文件;
12.对所述目标数据文件中与所述待处理数据标识对应的数据进行处理。
13.可选地,所述根据所述事务信息和所述查询版本号,确定所述数据处理请求对应的目标数据文件,包括:
14.从一个或多个数据文件对应的事务信息中确定最新的事务信息;将所述最新的事务信息作为当前事务信息,并循环执行以下步骤,直至确定出所述目标数据文件:
15.确定所述查询版本号与所述当前事务信息是否匹配;
16.如果是,将所述当前事务信息对应的数据文件作为所述目标数据文件;
17.如果否,将所述当前事务信息的前一个事务信息作为所述当前事务信息。
18.可选地,所述当前事务信息包括第一事务号,所述第一事务号对应于生成所述数据文件的事务操作,所述确定所述查询版本号与所述当前事务信息是否匹配,包括:
19.在所述第一事务号与所述查询版本号相同的情况下,确定所述查询版本号与所述当前事务信息匹配。
20.可选地,所述当前事务信息还包括第二事务号,所述第二事务号对应于修改所述数据文件的事务操作;所述确定所述查询版本号与所述当前事务信息是否匹配,包括:
21.在所述第一事务号不大于所述查询版本号的情况下,
22.判断所述第二事务号是否大于所述查询版本号;如果是,确定所述查询版本号与所述当前事务信息匹配;如果否,确定所述查询版本号与所述当前事务信息不匹配。
23.可选地,所述确定所述待处理数据表对应的查询版本号,包括:
24.确定缓存中是否存在所述待处理数据表对应的事务号;如果是,将所述事务号作为所述查询版本号;如果否,从事务管理器中提取最新的事务号,并将所述最新的事务号作为所述查询版本号。
25.可选地,所述待处理数据表采用合并树存储结构进行数据存储,以在每一次事务操作后得到新的数据文件。
26.可选地,在所述对所述目标数据文件中与所述待处理数据标识对应的数据进行处理之前,包括:
27.确定所述分布式集群中的各个节点已同步所述目标数据文件。
28.可选地,所述对所述目标数据文件中与所述待处理数据标识对应的数据进行处理,包括:
29.对所述待处理数据标识对应的数据进行查询、更新、删除或新增处理,或对所述目标数据文件进行合并处理。
30.根据本发明实施例的第二方面,提供了一种分布式集群中数据一致性的处理装置,包括:获取模块、确定模块和处理模块;其中,
31.所述获取模块,用于获取数据处理请求;所述数据处理请求指示了待处理数据标识;
32.所述确定模块,用于根据所述待处理数据标识确定待处理数据表、以及所述待处理数据表对应的一个或多个数据文件和每一个所述数据文件的事务信息;所述一个或多个数据文件是根据一次或多次事务操作生成的;确定所述待处理数据表对应的查询版本号;根据所述事务信息和所述查询版本号,确定所述数据处理请求对应的目标数据文件;
33.所述处理模块,用于对所述目标数据文件中与所述待处理数据标识对应的数据进行处理。
34.根据本发明实施例的第三方面,提供了一种电子设备,包括:
35.一个或多个处理器;
36.存储装置,用于存储一个或多个程序,
37.当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理
器实现如上述第一方面提供的一种分布式集群中数据一致性的处理方法中任一所述的方法。
38.根据本发明实施例的第四方面,提供了一种计算机可读介质,其上存储有计算机程序,所述程序被处理器执行时实现如上述第一方面提供的一种分布式集群中数据一致性的处理方法中任一所述的方法。
39.上述发明中的一个实施例具有如下优点或有益效果:在分布式集群中的任一节点根据同一数据处理请求进行处理时,可以根据查询版本号及数据文件的事务信息确定出相同的目标数据文件;由此,在进行分布式查询时,多个节点均可以根据相同的目标数据文件进行查询,从而保证了多个节点读取到同一数据的相同数值,进而保证了分布式查询的数据一致性。
40.进一步地,利用合并树存储结构对数据表进行存储,每一次新增、更新或删除等写数据的操作均产生新的数据文件,对新的数据文件中的数据进行写操作,从而得到多个版本的数据文件,可以避免写操作影响读操作,提高了分布式数据库读写并发性,进而提高了分布式数据库的性能;另外,通过定期将多个数据文件合并,避免了出现大量小文件的情况,节约了存储空间,从而提升了读写效率。
41.上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。
附图说明
42.附图用于更好地理解本发明,不构成对本发明的不当限定。其中:
43.图1是本发明一个实施例提供的一种分布式集群中数据一致性的处理方法的主要步骤示意图;
44.图2是本发明一个实施例提供的一种分布式数据库的架构示意图;
45.图3是本发明一个实施例提供的一种分布式事务的处理过程示意图;
46.图4是本发明另一个实施例提供的一种分布式事务的处理过程示意图;
47.图5是本发明另一个实施例提供的一种分布式集群中数据一致性的处理方法的流程示意图;
48.图6是本发明又一个实施例提供的一种分布式集群中数据一致性的处理方法的流程示意图;
49.图7是本发明再一个实施例提供的一种分布式集群中数据一致性的处理方法的流程示意图;
50.图8是本发明一个实施例提供的一种数据文件合并方法的流程示意图;
51.图9是本发明一个实施例提供的一种分布式集群中数据一致性的处理装置的结构示意图;
52.图10是本发明实施例可以应用于其中的示例性系统架构图;
53.图11是适于用来实现本发明实施例的终端设备或服务器的计算机系统的结构示意图。
具体实施方式
54.以下结合附图对本发明的示范性实施例做出说明,其中包括本发明实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本发明的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
55.需要指出的是,在不冲突的情况下,本发明的实施例以及实施例中的技术特征可以相互结合。
56.如图1所示,本发明实施例提供了一种分布式集群中数据一致性的处理方法,该方法应用于所述分布式集群中的任一节点,可以包括以下步骤s101至s104:
57.步骤s101:获取数据处理请求;所述数据处理请求包括待处理数据标识;
58.步骤s102:根据所述待处理数据标识确定待处理数据表、以及所述待处理数据表对应的一个或多个数据文件和每一个所述数据文件的事务信息;所述一个或多个数据文件是根据一次或多次事务操作生成的;
59.步骤s103:确定所述待处理数据表对应的查询版本号;
60.步骤s104:根据所述事务信息和所述查询版本号,确定所述数据处理请求对应的目标数据文件;
61.步骤s105:对所述目标数据文件中与所述待处理数据标识对应的数据进行处理。
62.本发明的应用场景可以是在云原生的分布式数据库中进行数据处理的场景,分布式数据库的数据处理过程,通常是采用多个分布式节点对数据处理请求进行响应,以提高分布式数据库的并发性能。对于分布式集群中的任一节点,均可以采用本发明实施例提供的一种分布式集群中数据一致性的处理方法对数据进行处理。
63.在本发明的一个实施例中,对所述目标数据文件中与所述待处理数据标识对应的数据进行处理,包括:对所述待处理数据标识对应的数据进行查询、更新、删除或新增处理,或对所述目标数据文件进行合并处理。每一个数据处理请求可以由一个已提交的事务来完成,也即由多个不同的事务分别来执行查询、更新、删除或新增数据的数据处理请求。
64.分布式数据库常见的架构可以分为sn(share nothing)框架和sd(share disk)框架。sn框架指分布式数据库的所有节点不共享任何资源,各个节点通过网络进行数据交互;而sd框架指分布式数据库的所有节点共享一个存储。通常云原生的分布式数据库都是采用sd框架。图2是本发明一个实施例提供的一种sd共享存储的架构示意图,其中,客户端1和客户端2是用于发出数据处理请求的终端应用,例如可以发出对数据库提出新增、更新、删除及查询等数据处理请求;计算节点1、计算节点2

计算节点n通常可以是云上的虚拟机或容器节点,计算节点也即分布式集群中的节点,用于处理这些数据处理请求,这些节点均从同一个共享存储中的读取数据,或对同一个共享存储中的数据进行插入、修改及删除等操作;共享存储通常提供云上的对象存储服务或云文件服务。
65.共享存储的底层可以采用多种存储方式,在本发明的一个实施例中,可以采用合并树存储结构进行数据存储,以在每一次事务操作后得到新的数据文件。
66.其中,合并树,也即merge tree,merge tree是类似于lsm树(log structured merge tree)的一种存储结构。采用merge tre的方式,每一次对数据表新增数据都可以产生一个新的数据文件,定期会根据合并列表将小文件进行合并形成大文件,较适用于批量
插入数据的场景。对数据表进行更新数据或删除数据的操作并不会修改原有的数据文件,是将原有数据文件进行复制产生一个新的数据文件,在新的数据文件中执行更新或删除的操作,这样会产生多个版本的数据文件,可以设定后台定期对旧的不再使用的版本对应的数据文件进行清理。这样的方式可以将读数据与写数据的操作同时进行,也不需要加分布式锁,避免了读写之间的操作冲突,提高了读写的并发性,进而提高了分布式数据的性能。
67.可以理解的是,每一个数据文件是由一次或多次的事务操作生成的,由此,导致对于同一个数据表的同一数据,可能会存在多个不同版本的数据文件与之对应,也就是说,在对同一待处理数据标识进行查询时,可能会查询出多个版本的数据文件,从而导致查询数据不一致的问题。为了解决这个问题,在本发明的一个实施例中,可以根据本次数据处理请求对应的查询版本号以及数据文件的事务信息确定目标数据文件,在从目标数据文件中进行查询,从而保证查询数据的一致性。
68.在本发明的一个实施例中,可以采用以下方式来确定目标数据文件:从一个或多个数据文件对应的事务信息中确定最新的事务信息;将所述最新的事务信息作为当前事务信息,并循环执行以下步骤,直至确定出所述目标数据文件:确定所述查询版本号与所述当前事务信息是否匹配;如果是,将所述当前事务信息对应的数据文件作为所述目标数据文件;如果否,将所述当前事务信息的前一个事务信息作为所述当前事务信息。
69.具体地,可以先根据数据处理请求中的待处理数据标识确定待处理数据表。例如,在图2中的客户端需要查询数据标识a对应的所有数据,首先需要确定数据标识a对应的待处理数据表a。根据merge tree的存储结构,可以根据待处理数据表确定出一个或多个数据文件。可以理解的是,分布式数据库的数据操作通常是由分布式事务来完成,也即事务操作。一个分布式事务可以对应一条sql语句、一组sql语句或一个程序,分布式事务通常由事务管理器系统来管理,分布式事务是按照时间顺序依次执行并提交的,并在事务管理器中记录了已提交事务的事务号。在本发明的一个实施例中,可以为每一个数据文件设置事务信息,事务信息是根据对应的事务操作而设置的。
70.在更新或删除某一数据标识对应的数据时,可以复制已有的数据文件,产生一个新的数据文件,在新的数据文件中对数据更新或删除操作,并在更新或删除完成后,在新的数据文件的事务信息中设置事务操作的事务号作为第一事务号,同时在被复制的已有的数据文件的事务信息中设置一个第二事务号,第二事务号对应于修改所述数据文件的事务操作,用以表示数据有更新或删除的事务操作。其中,多个数据文件的事务信息中的最新的事务信息可以由这些数据文件的最新的第一事务号来决定的。
71.图3中事务1是新增数据的sql语句对应的事务,新增数据(1,2,3)时产生了file1;事务2是更新数据的sql语句对应的事务,产生了file2;事务3是删除数据的sql语句对应的事务,产生了file3。每一个数据文件的事务信息即包含有该数据文件的第一事务号和第二事务号。
72.如图3中,同一数据a可以存在于多个不同事务信息的数据文件中,如file1、file2及file3;文件file1、file2及file3的事务信息由第一事务号和第二事务号组成。格式可以如:第一事务号-第二事务号。如图3中的(1-2),1代表文件file1的第一事务号,2代表文件file1的第二事务号。第一事务号是生成该数据文件的事务操作对应的事务号,可以理解的是,事务操作的事务号可以设置为随着事务操作时间而递增,那么多个数据文件的事务信
息中的第一事务号也可以是递增的,例如file1、file2及file3的第一事务号是递增的1、2、3。
73.在本发明的一个实施例中,采用以下方式来确定所述查询版本号与所述当前事务信息是否匹配:在所述第一事务号与所述查询版本号相同的情况下,确定所述查询版本号与所述当前事务信息匹配。
74.可以理解的是,同一数据表对应的多个数据文件的第一事务号可以是连续递增的,例如,可以通过某些事务管理模块来保证其连续性,例如图3中的file1、file2及file3的第一事务号是连续递增的1、2、3。
75.图3描述了三个分布式事务操作对同一个数据进行处理的过程,如下:
76.事务1:在数据表a中执行新增数据a,a的具体数据为(1,2,3),即插入(1,2,3)的事务操作,根据merge tree的存储结构,新增了一个数据文件file1,file1的内容为(1,2,3),file1的事务信息被设置为(1-0),即第一事务号被设置为事务号“1”,第二事务号由于数据文件file1是新创建的还未被更新或删除过,因此可以被设置为0,也可以被设置为空,这样可以保证了更新或删除操作始终发生在新建数据文件之后。
77.事务2:在事务1成功提交之后,file1的事务信息即对事务2可见,事务2是执行将数据a(1,2,3)更新为(4,5,6)的事务操作,即更新a从(1,2,3)-》(4,5,6),此时,不对file1进行修改,而是复制file1产生一个新数据文件file2,在file2中进行更新,使得file2的内容为(4,5,6),file1还是旧的内容(1,2,3),随后将file2的事务信息设置为(2-0),即第一事务号被设置为事务号“2”,第二事务号可以设置为0(代表无穷大);在事务2提交之后,还可以将旧数据文件file1的第二事务号由0修改为2,如事务信息为(1-2),以指示了file1的数据在事务号2中有更新的操作。
78.事务3:是将数据a(4,5,6)中的6删除的操作,即删除(4,5,6)-》(4,5),此时,事务2的更新操作已完成,事务3根据最新的第一事务号2,复制file2(2-0)产生一个新数据文件file3,在file3中进行删除,使得file3的内容为(4,5),为file3设置事务信息(3-0),其第一事务号为3,第二事务号为0;在事务3提交成功后,再将file2的(2-0)修改为(2-3),以指示file2的数据在事务3中有更新操作。可以理解的是,删除操作实际上也是一种对数据的更新操作,因此,第二事务号代表了更新或删除操作所对应的事务号。
79.以数据处理请求为查询请求为例,采用数据处理请求对应的查询版本号来进行数据查询的原理可以如图3所示。在图3中的不同事务执行的阶段,查询数据时确定目标数据文件可以分为以下两种情况:
80.一种是:查询请求发生在事务2提交后,且事务3还未执行或执行还未完成时,此时file3还未生成,如果确定出查询请求(数据处理请求)对应的查询版本号为2;数据文件file1、file2中最新的事务信息是(2-0),将(2-0)作为当前事务信息与查询版本号进行匹配,确定出当前事务信息中的第一事务号(2)与查询版本号(2)相同,那么第一事务号为2的数据文件file2即为目标数据文件,从file2(2-0)中查询可以得到数据(4,5,6)。
81.另一种是:查询请求发生在事务3提交之后,数据文件file1、file2及file3中的最新的事务信息为(3-0),确定出查询请求(数据处理请求)对应的查询版本号为2,将最新的事务信息作为当前事务信息与查询版本号进行匹配,可以得到第一事务号(3)与查询版本号(2)不同,那么可以将前一个事务信息(2-3)作为当前事务信息与查询版本号进行匹配,
确定出事务信息(2-3)中的第一事务号(2)与查询版本(2)相同,也就是file2的第一事务号(2)与查询版本号(2)相同,这样可以确定目标数据文件为file2,从file2(2-3)中查询可以得到数据(4,5,6)。
82.从这两种情况来看,查询请求发生时,无论事务3是否执行,是否结束,根据查询版本号2均能查询到一致性的数据(4,5,6)。由此,多个分布式节点在对同一数据处理请求进行查询时,即使各个节点查询时间可能有差异,均能查询到一致性的数据,保证了分布式查询的数据一致性。
83.而在本发明的另一个实施例中,同一数据表对应的多个数据文件的第一事务号也可以是不连续的,如图4中,文件file1、file2及file5的事务信息中的第一事务号分别为1、2、5,此时查询版本号为4,查询版本号与这三个数据文件的第一事务号均不相同,可以采用本发明实施例提供的以下方式来确定:在所述第一事务号不大于所述查询版本号的情况下,判断所述第二事务号是否大于所述查询版本号;如果是,确定所述查询版本号与所述当前事务信息匹配;如果否,确定所述查询版本号与所述当前事务信息不匹配。也就是说,可以确定一个“第一事务号《=查询版本号《第二事务号”的判断条件,根据此判断条件来确定查询版本号与当前事务信息是否匹配。
84.可以理解的是,查询版本号如果小于某一个数据文件第一事务号时,意味着查询操作出现在这个数据文件产生之前,那么查询操作不应该读取到这个后产生的数据文件;同样,如果查询版本号大于某一个数据文件的第二事务号,则意味着查询操作出现在这个数据文件对应的数据有更新或删除的事务操作之后,那么这个数据文件中的数据在查询时已经是过期的,该数据文件不应该被读取到。
85.图4是本发明另一个实施例提供的分布式事务的处理过程示意图,其中,事务1是在数据表b中执行新增数据b的事务操作,即插入(4,5,6),生成file1,其事务信息为(1-0);事务2是执行将数据b(4,5,6)更新为(7,8,9)的事务操作,在事务2提交后,生成file2,事务信息为(2-0),file1的事务信息被修改为(1-2);事务5是将数据b(7,8,9)中的9删除的事务操作,生成的file5的事务信息为(5-0);在事务5提交成功后,file2的事务信息由(2-0)修改为(2-5),以指示file2的数据在事务5中有更新或删除操作。
86.多个数据文件的第一事务号不连续,也就是说,多个不同数据的多个事务操作是在同一个事务管理器的基数上依次递增的,例如,数据a的事务操作与数据b的事务操作是根据执行顺序依次从同一事务管理器中取事务号,因此有可能发生数据a的多个事务操作与数据b的多个事务操作交错执行,从而导致事务号不连续的情况。在图4中,查询版本号为4与这些第一事务号均不同,那么确定目标数据文件的过程可以如下:
87.如果数据处理请求(查询请求)在事务5提交前确定了查询版本为4,随后在多个分布式节点查询还未结束时,事务5已提交完成,file5也已产生,为了保证多个分布式节点查询得到的数据一致,不出现一部分节点查询到file1或file2,而另一部分节点查询到file5的情况,可以将查询版本号与多个数据文件的事务信息进行匹配。将数据文件file1、file2及file5中的最新的事务信息为(5-0)作为当前事务信息,第一事务号(5)与查询版本号(4)不同,且第一事务号(5)大于查询版本号(4),则确定查询版本号与当前事务信息不匹配,那么需要将前一个事务信息作为当前事务信息,也即将file2的事务信息(2-5)作为当前事务信息,再根据判断条件“第一事务号《=查询版本号《第二事务号”,即确定file2的事务信息
(2-5)与查询版本号(4)匹配,则可以确定目标数据文件为file2,从file2(2-5)中查询可以得到数据(7,8,9)。
88.如果数据处理请求(查询请求)发生在事务2刚提交后,此时事务5的删除事务操作还未产生。可以将数据文件file1及file2中的最新的事务信息(2-0)作为当前事务信息,第一事务号《查询版本号,即查询出现在事务2之后,而第二事务号为0(无穷大),也即可以认为查询版本号《第二事务号,意味着还没有出现对数据b进行更新或删除的事务操作,那么当前事务信息(2-0)与查询版本号(4)匹配,即数据b在file2中是查询请求能读到的最新值,可以确定目标数据文件为file2,从file2(2-0)中查询得到数据(7,8,9)。
89.可以理解的是,图4中,根据查询版本号4均能查询到一致性的数据(7,8,9)。由此,多个分布式节点在对同一数据处理请求进行查询时,即使各个节点查询时间可能有差异,均能查询到一致性的数据,保证了分布式查询的数据一致性。
90.在本发明的一个实施例中,对于多个数据文件的第一事务号是连续递增的情况,在当前最新的第一事务号不大于查询版本号时,可以将与查询版本号与多个事务信息中的第一事务号依次进行对比,确定出与查询版本号相同的第一事务号所对应的数据文件,从而确定为目标数据文件,如图3中的查询版本号为2的查询过程;而在当前最新的第一事务号小于查询版本号时,假设在图3中,查询请求出现在事务3已提交后,且查询版本号为4时,那么则可以将最新的第一事务号(3)对应的数据文件file3作为目标数据文件。可以理解的是,在多个数据文件的第一事务号是连续递增的情况下,由第一事务号可以确定查询版本号是否匹配事务信息,那么数据文件的第二事务号可以不设置,也可以都设置为0或空,在本发明的一个实施例中,不设置和设置为0或空,均可以认为是将第二事务号设置为无穷大,这样保证了第二事务号始终大于查询版本号,由此也满足了“第一事务号《=查询版本号《第二事务号”的判断条件。
91.在本发明的一个实施例中,所述确定所述待处理数据表对应的查询版本号,包括:确定缓存中是否存在所述待处理数据表对应的事务号;如果是,将所述事务号作为所述查询版本号;如果否,从事务管理器中提取最新的事务号,并将所述最新的事务号作为所述查询版本号。
92.例如,对于同一个查询语句可能会多次查询同一个数据表,为了保证同一查询语句中多个数据表查询均使用的相同的数据文件,可以设置一个查询语句级别的表缓存cache,当语句结束,表缓存cache即清空。表缓存cache中保存了待处理数据表的标识及该数据表在当前查询语句内第一次被查询时已确定出的事务号(也即已确定出的查询版本号),此时如果在表缓存中找到对应待处理数据表的事务号,那么在后续查询时可以直接使用该事务号作为查询版本号,可以较大的节约确定查询版本号的时间,提高查询效率。如果cache已经清空,没有找到事务号,则从事务管理器中获取已提交的最新的事务号,将此最新的事务号作为查询版本号。
93.确定了查询版本号后再进行查询,可以保证每次查询固定版本的数据文件,由此,不会出现同时查询到旧的数据和新更新的数据的情况,可以保证多个分布式节点查询数据的一致性,保证了分布式数据库的数据一致性;另外,查询可以发生在任意时刻,不必考虑当前是否有新增、更新或删除数据,这样可以使得读写之间不需要额外加分布式锁,较大的提高了分布式数据库的读写并发能力,提高了分布式数据库的性能。
94.在分布式集群中的多个节点进行分布式查询时,任意一个节点在所述对所述目标数据文件中与所述待处理数据标识对应的数据进行处理之前,可以采用本发明的一个实施例提供的以下方式:确定所述分布式集群中的各个节点已同步所述目标数据文件。
95.在本发明的一个实施例中,对所述目标数据文件中与所述待处理数据标识对应的数据进行处理还包括:对所述目标数据文件进行合并处理。由于采用merge tree的存储结构,每次插入数据均产生新的数据文件,则会出现大量的小的数据文件,可以定期将这些小的数据文件进行合并,以释放磁盘空间。
96.在本发明的一个实施例中,对所述目标数据文件中与所述待处理数据标识对应的数据进行处理包括:对所述待处理数据标识对应的数据进行查询、更新、删除或新增处理。
97.下面结合图5、图6及图7,分别以查询数据、新增数据及更新数据为例,对本发明实施例提供的一种数据方法进行详细描述。
98.图5是本发明另一个实施例提供的一种分布式集群中数据一致性的处理方法的流程示意图,主要是分布式数据库中进行查询数据的过程,包括以下步骤:
99.步骤s501:获取数据查询请求后,查询开始,先进行查询优化,查询优化包括步骤s502至s507;查询优化是确定查询版本号,也就是查询版本号的过程。
100.步骤s502:确定查询表;也即确定待处理数据标识对应的待处理数据表。
101.步骤s503:获取查询版本号,从s504开始执行。
102.步骤s504:判断缓存中有表版本号;如果有,直接读取表版本号并作为查询版本号,继续执行s507;如果没有,执行步骤s505。
103.步骤s505:使用事务号;即从事务管理器中获取一个已提交的最新事务号,将此事务号作为查询版本号。
104.步骤s506:将引用次数加一;
105.可以为事务管理器中的每一个事务设置一个引用次数;对本次查询使用的事务号对应的引用次数加1,并执行步骤s507。
106.如果缓存中有表版本号,则说明在一个查询语句的内部已经查询过同一个表,引用次数已经被增加过,此时不用再增加引用次数。
107.步骤s507:确定出目标数据文件。
108.步骤s508:查询执行;包括步骤s509至s512。
109.步骤s509:读取存储数据的过程包括步骤s510至s512。
110.步骤s510:重写查询语句,加入查询版本号;即将查询版本号放入查询语句中,以便查询时指定特定的查询版本号对应的数据文件。
111.步骤s511:分发节点;也即将查询优化过程得到的目标数据文件分发给不同的分布式节点进行查询,以便于多个分布式节点执行一致性查询。
112.其中,分布式缓存中存储已经完成同步的数据文件的版本号(也即事务信息中的第一事务号),在这个版本号之前的数据文件都已经同步完毕了。比如分布式缓存中存储的版本号为8,当同步过来一个版本9的时候,将缓存中的版本号更新为9,如果同步过来的版本为12,则记录下来,并不将缓存中的版本号更新,直到9,10,11版本都更新后才会将缓存中的版本号更新为12。
113.多个分布式节点均从分布式缓存中读取缓存中存储的版本号,判断当前确定出的
查询版本号是否小于或等于已存储的版本号,如果是,说明目标数据文件的元数据已经同步完成至分布式缓存中,多个分布式节点可以直接从分布式缓存中读取目标数据文件的内容,而不需要去共享存储的磁盘中读取,加快了查询速度,提高了查询效率。如果当前确定出的查询版本号大于最小版本号,说明数据同步还未完成,可以等待目标数据文件的数据在分布式缓存中同步完成,再从分布式缓存中读取数据,当然也可以不等待,直接从共享存储中读取。
114.在使用多个分布式节点进行一致性查询时,可以根据目标数据文件的编号来进行一致性哈希,哈希值等于当前节点号的数据文件,由当前节点去进行查询。这样就将整体查询分为n份,每个节点都查询其中一部分数据。一致性哈希保证所有节点看到的目标数据文件集合是一致的,否则就不能确保所有节点查询的数据文件子集不同,并且聚合后恰好为整个数据文件集合,这一部分由一致性查询的分布式缓存中存储的最小版本号来保证。例如,查询涉及到的目标数据文件集合中的文件编号为{1,2,3,4,5,6,7},当前有3个节点(从0开始编号)。我们使用哈希函数f(x)=x%3;那么得到{1,4,7}文件由1节点访问,{2,5}文件由2节点访问,{3,6}文件由0节点访问。多个分布式节点根据这些确定出来的文件子集分别进行查询。
115.在多个分布式节点执行一致性查询之前,通常由一个初始节点执行步骤s501至s511,以完成分发前的准备工作。
116.步骤s512:合并所有结果;待多个分布式节点均查询完成后,将多个结果进行合并,返回给初始节点,并发送结果给提出数据处理请求的客户端。
117.步骤s513:引用次数减一;在查询结束后,将查询版本号对应的事务号的引用次数减一。
118.由于在对数据进行写操作时(更新、删除及插入)产生了多个数据文件,一些旧的版本的数据文件不再会被查询到,例如图3中file1在事务3之后不会再被用到,可以定期对这些旧的数据文件进行清理,以释放磁盘空间;可以根据已提交事务号的引用次数进行清理,过程是:取得引用次数为0的最大事务号y,也即将所有引用次数为0的事务号进行排序取出最大值y;遍历所有数据文件,将数据文件的第二事务号不大于y的文件都删除。这个过程可以放在后台处理,不影响分布式数据处理的执行。
119.图6是本发明又一个实施例提供的一种分布式集群中数据一致性的处理方法的流程示意图;主要是在分布式数据库中进行数据新增(插入)的过程,可以包括以下步骤:
120.步骤s601:获取数据插入请求,插入开始,进行语句的词法解析;对sql语句进行词法解析;由一个插入节点执行数据插入的流程,在插入完成后,与其它节点进行数据同步。
121.步骤s602:进行语句的语法解析;对sql语句进行语法解析。
122.步骤s603:查询优化;即对于sql语句进行优化,确定待插入数据表,此时,对应的数据插入请求中包含有待插入的数据。
123.步骤s604:执行插入可以包括步骤s605至s610。
124.步骤s605:开始写入数据文件。
125.步骤s606:写入临时文件;将待插入数据写入临时文件。
126.步骤s607:重命名文件;将临时文件重命名为新的数据文件。
127.步骤s608:设置事务信息;获取当前插入事务的事务号,将该插入事务的事务号作
为第一事务号;由于是新创建的数据文件,第二事务号可以设置为0,也可以不设置,或者设置为其他特定字符,以方便在后续在和查询版本号进行比较时,作为无穷大来比较。
128.步骤s609:提交事务;也即确定插入数据完成,提交完成后,插入节点将数据写入共享存储的磁盘中,并将最新的数据文件名(例如,file1)发送给其他节点,其他节点从共享存储中读取磁盘文件获取最新的数据文件信息并更新,实现同步信息。为了保证插入数据的性能,在提交事务阶段并不等待其他节点去读取新数据文件,而是在后台异步的将新数据信息同步到其他节点。
129.步骤s610:修改内存信息中相关的数据文件信息;可以是修改分布式内存或分布式缓存中存储的数据文件信息。
130.图7是本发明再一个实施例提供的一种分布式集群中数据一致性的处理方法的流程示意图;主要是在分布式数据库中进行数据更新的过程,可以包括以下步骤:
131.步骤s701:获取数据更新请求更新开始,进行语句的词法解析;对sql语句进行词法解析;为避免多个节点同时对数据更新造成数据不一致的情况,在更新数据时需要加分布式锁,将更新操作顺序化,例如,图3中的事务2、事务3是顺序化执行,事务3删除操作也相当于另一种形式的数据更新;由获取到分布式锁的更新节点进行数据更新。
132.步骤s702:进行语句的语法解析;对sql语句进行语法解析。
133.步骤s703:查询优化,更新数据之前需要确定待更新的数据标识对应的目标数据文件,其过程同样与图4中的查询优化类似,在此不再赘述。例如,图3中的事务3在进行数据删除时,需要确定是对file1进行删除,还是对file2进行删除。
134.步骤s704:执行更新包括步骤s705至s712。
135.步骤s705:更新数据文件。
136.步骤s706:复制临时文件;确定出目标数据文件,复制目标数据文件为临时文件。
137.步骤s707:更新临时文件;在临时文件中进行数据更新。
138.步骤s708:重命名为新数据文件;将临时文件重命名为新的数据文件。
139.步骤s709:设置新数据文件事务信息;获取当前更新事务的事务号,将该更新事务的事务号作为新数据文件的第一事务号;由于是新创建的数据文件,第二事务号可以设置为0,也可以不设置,或者设置为其他特定字符,以方便在后续与查询版本号进行比较时,作为无穷大来比较,如图3中,设置file2事务信息为(2-0)。
140.步骤s710:设置旧数据文件事务信息;将原有的目标数据文件(旧数据文件)的第二事务号修改为更新事务的事务号,如图3中,设置file1的事务信息从(1-0)修改为(1-2)。
141.步骤s711:提交事务;也即确定更新数据完成,提交完成后,更新节点将数据写入磁盘,并同步至其他节点,其它节点同步信息并读取磁盘文件。
142.步骤s712:修改内存信息中相关的数据文件信息。
143.步骤s711与s712的过程与图6中的同步信息过程和修改内存信息过程一致,在此不再赘述
144.另外,数据删除操作,是复制目标数据文件为临时文件,在临时文件中进行数据的删除,然后重命名为新的数据文件,再设置新的数据文件与原有目标数据文件的事务信息,其过程与图6中的数据更新操作类似,在此不再赘述。
145.在本发明的一个实施例中,对目标数据文件进行处理还包括对目标数据文件进行
合并处理。图8是本发明一个实施例提供的一种数据文件合并方法的流程示意图,可以包括以下步骤:
146.步骤s801:合并开始,获取待合并列表;merge tree的存储机制会定期将多个小的数据文件进行排序然后得到待合并文件的列表。可以理解的是,合并文件操作也需要加分布式锁,以保证与更新事务操作不冲突,由获取到分布式锁的合并节点执行合并过程。
147.步骤s802:执行合并;包括步骤s803至s810。
148.步骤s803:读取待合并文件;循环读取待合并文件列表中的文件。
149.步骤s804:数据合入临时文件;新建临时文件,将待合并文件中的数据写入临时文件。
150.步骤s805:判断待合并列表为空;如果是,执行步骤s806,如果否,返回执行s803,继续读取下一个待合并文件。
151.步骤s806:重命名为新数据文件;在待合并列表中的数据文件的数据均写入临时文件后,将临时文件重命名为新的数据文件。
152.步骤s807:设置新数据文件事务信息;获取当前合并事务的事务号,将该事务号作为新数据文件的第一事务号,将第二事务号设置为0。
153.步骤s808:设置待合并文件事务信息;将待合并列表中的多个待合并文件的第二事务号均设置为合并事务的事务号。
154.步骤s809:提交事务;也即确定合并文件完成,提交完成后,合并节点将新数据文件名发送给其他节点进行同步,其它节点同步信息并读取磁盘文件。
155.步骤s810:修改内存信息中相关的数据文件信息。
156.步骤s809与s810的过程与图6中的同步信息过程和修改内存信息过程一致,在此不再赘述。
157.根据本发明实施例提供一种分布式集群中数据一致性的处理方法,在分布式集群中的任一节点根据同一数据处理请求进行处理时,可以根据查询版本号及数据文件的事务信息确定出相同的目标数据文件;由此,在进行分布式查询时,多个节点均可以根据相同的目标数据文件进行查询,从而保证了多个节点读取到同一数据的相同数值,进而保证了分布式查询的数据一致性。
158.进一步地,利用合并树存储结构对数据表进行存储,每一次新增、更新或删除等写数据的操作均产生新的数据文件,对新的数据文件中的数据进行写操作,从而得到多个版本的数据文件,可以避免写操作影响读操作,提高了分布式数据库读写并发性,进而提高了分布式数据库的性能;另外,通过定期将多个数据文件合并,避免了出现大量小文件的情况,节约了存储空间,从而提升了读写效率。
159.如图9所示,本发明实施例提供了一种分布式集群中数据一致性的处理装置900,包括:获取模块901、确定模块902和处理模块903;其中,
160.所述获取模块901,用于获取数据处理请求;所述数据处理请求包括待处理数据标识;
161.所述确定模块902,用于根据所述待处理数据标识确定待处理数据表、以及所述待处理数据表对应的一个或多个数据文件和每一个所述数据文件的事务信息;所述一个或多个数据文件是根据一次或多次事务操作生成的;确定所述待处理数据表对应的查询版本
号;根据所述事务信息和所述查询版本号,确定所述数据处理请求对应的目标数据文件;
162.所述处理模块903,用于对所述目标数据文件中与所述待处理数据标识对应的数据进行处理。
163.在本发明一个实施例中,所述确定模块902,用于从一个或多个数据文件对应的事务信息中确定最新的事务信息;将所述最新的事务信息作为当前事务信息,并循环执行以下步骤,直至确定出所述目标数据文件:确定所述查询版本号与所述当前事务信息是否匹配;如果是,将所述当前事务信息对应的数据文件作为所述目标数据文件;如果否,将所述当前事务信息的前一个事务信息作为所述当前事务信息。
164.在本发明一个实施例中,所述确定模块902,用于所述当前事务信息包括第一事务号,所述第一事务号对应于生成所述数据文件的事务操作,所述确定所述查询版本号与所述当前事务信息是否匹配,包括:在所述第一事务号与所述查询版本号相同的情况下,确定所述查询版本号与所述当前事务信息匹配。
165.在本发明一个实施例中,所述确定模块902,用于所述当前事务信息还包括第二事务号,所述第二事务号对应于修改所述数据文件的事务操作;所述确定所述查询版本号与所述当前事务信息是否匹配,包括:在所述第一事务号不大于所述查询版本号的情况下,判断所述第二事务号是否大于所述查询版本号;如果是,确定所述查询版本号与所述当前事务信息匹配;如果否,确定所述查询版本号与所述当前事务信息不匹配。
166.在本发明一个实施例中,所述确定模块902,用于确定缓存中是否存在所述待处理数据表对应的事务号;如果是,将所述事务号作为所述查询版本号;如果否,从事务管理器中提取最新的事务号,并将所述最新的事务号作为所述查询版本号。
167.在本发明一个实施例中,所述确定模块902,用于确定所述待处理数据表采用合并树存储结构进行数据存储,以在每一次事务操作后得到新的数据文件。
168.在本发明一个实施例中,所述确定模块902,用于在所述对所述目标数据文件中与所述待处理数据标识对应的数据进行处理之前,确定所述分布式集群中的各个节点已同步所述目标数据文件。
169.在本发明一个实施例中,所述处理模块903,用于对所述待处理数据标识对应的数据进行查询、更新、删除或新增处理,或对所述目标数据文件进行合并处理。
170.根据本发明实施例提供的一种分布式集群中数据一致性的处理装置,在分布式集群中的任一节点根据同一数据处理请求进行处理时,可以根据查询版本号及数据文件的事务信息确定出相同的目标数据文件;由此,在进行分布式查询时,多个节点均可以根据相同的目标数据文件进行查询,从而保证了多个节点读取到同一数据的相同数值,进而保证了分布式查询的数据一致性。
171.进一步地,利用合并树存储结构对数据表进行存储,每一次新增、更新或删除等写数据的操作均产生新的数据文件,对新的数据文件中的数据进行写操作,从而得到多个版本的数据文件,可以避免写操作影响读操作,提高了分布式数据库读写并发性,进而提高了分布式数据库的性能;另外,通过定期将多个数据文件合并,避免了出现大量小文件的情况,节约了存储空间,从而提升了读写效率。
172.图10示出了可以应用本发明实施例的一种分布式集群中数据一致性的处理方法或一种分布式集群中数据一致性的处理装置的示例性系统架构1000。
173.如图10所示,系统架构1000可以包括终端设备1001、1002、1003,网络1004和服务器1005。网络1004用以在终端设备1001、1002、1003和服务器1005之间提供通信链路的介质。网络1004可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
174.用户可以使用终端设备1001、1002、1003通过网络1004与服务器1005交互,以接收或发送消息等。
175.终端设备1001、1002、1003可以是具有显示屏并且支持信息浏览的各种电子设备,包括但不限于智能手机、平板电脑、膝上型便携计算机和台式计算机等等。
176.服务器1005可以是提供数据处理的服务器,例如对用户利用终端设备1001、1002、1003提出的数据处理请求提供支持的后台管理服务器。后台管理服务器可以对接收到的数据处理请求等数据进行分析等处理,并将处理结果反馈给终端设备。
177.需要说明的是,本发明实施例所提供的数据处理方法一般由服务器1005执行,相应地,数据处理装置一般设置于服务器1005中。
178.应该理解,图10中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的终端设备、网络和服务器。
179.下面参考图11,其示出了适于用来实现本发明实施例的终端设备的计算机系统1100的结构示意图。图11示出的终端设备仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
180.如图11所示,计算机系统1100包括中央处理单元(cpu)1101,其可以根据存储在只读存储器(rom)1102中的程序或者从存储部分1108加载到随机访问存储器(ram)1103中的程序而执行各种适当的动作和处理。在ram 1103中,还存储有系统1100操作所需的各种程序和数据。cpu 1101、rom 1102以及ram 1103通过总线1104彼此相连。输入/输出(i/o)接口1105也连接至总线1104。
181.以下部件连接至i/o接口1105:包括键盘、鼠标等的输入部分1106;包括诸如阴极射线管(crt)、液晶显示器(lcd)等以及扬声器等的输出部分1107;包括硬盘等的存储部分1108;以及包括诸如lan卡、调制解调器等的网络接口卡的通信部分1109。通信部分1109经由诸如因特网的网络执行通信处理。驱动器1110也根据需要连接至i/o接口1105。可拆卸介质1111,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器1110上,以便于从其上读出的计算机程序根据需要被安装入存储部分1108。
182.特别地,根据本发明公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本发明公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分1109从网络上被下载和安装,和/或从可拆卸介质1111被安装。在该计算机程序被中央处理单元(cpu)1111执行时,执行本发明的系统中限定的上述功能。
183.需要说明的是,本发明所示的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储
器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本发明中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本发明中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、rf等等,或者上述的任意合适的组合。
184.附图中的流程图和框图,图示了按照本发明各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,上述模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图或流程图中的每个方框、以及框图或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
185.描述于本发明实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的模块也可以设置在处理器中,例如,可以描述为:一种处理器包括获取模块,确定模块,处理模块。其中,这些模块的名称在某种情况下并不构成对该模块本身的限定,例如,获取模块还可以被描述为“获取数据处理请求的模块”。
186.作为另一方面,本发明还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的设备中所包含的;也可以是单独存在,而未装配入该设备中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被一个该设备执行时,使得该设备包括:获取数据处理请求;所述数据处理请求包括待处理数据标识;根据所述待处理数据标识确定待处理数据表、以及所述待处理数据表对应的一个或多个数据文件和每一个所述数据文件的事务信息;所述一个或多个数据文件是根据一次或多次事务操作生成的;确定所述待处理数据表对应的查询版本号;根据所述事务信息和所述查询版本号,确定所述数据处理请求对应的目标数据文件;对所述目标数据文件中与所述待处理数据标识对应的数据进行处理。
187.根据本发明实施例的技术方案,在分布式集群中的任一节点根据同一数据处理请求进行处理时,可以根据查询版本号及数据文件的事务信息确定出相同的目标数据文件;由此,在进行分布式查询时,多个节点均可以根据相同的目标数据文件进行查询,从而保证了多个节点读取到同一数据的相同数值,进而保证了分布式查询的数据一致性。
188.进一步地,利用合并树存储结构对数据表进行存储,每一次新增、更新或删除等写数据的操作均产生新的数据文件,对新的数据文件中的数据进行写操作,从而得到多个版本的数据文件,可以避免写操作影响读操作,提高了分布式数据库读写并发性,进而提高了
分布式数据库的性能;另外,通过定期将多个数据文件合并,避免了出现大量小文件的情况,节约了存储空间,从而提升了读写效率。
189.上述具体实施方式,并不构成对本发明保护范围的限制。本领域技术人员应该明白的是,取决于设计要求和其他因素,可以发生各种各样的修改、组合、子组合和替代。任何在本发明的精神和原则之内所作的修改、等同替换和改进等,均应包含在本发明保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1