一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据拆分方法、装置、设备、介质及程序产品与流程

2021-12-07 21:14:00 来源:中国专利 TAG:


1.本技术涉及计算机数据库领域,尤其涉及一种数据拆分方法、装置、设备、介质及程序产品。


背景技术:

2.随着互联网技术的不断发展,各项互联网业务也在迅速增加,但是大多数业务上线时无法预知业务后期的数据规模,因此大部分业务在开发时都是使用了单个数据库实例集群承载业务,然而随着业务发展,业务增长量迅速,有些数据表中的数据量过大,导致系统的查询和更新性能整体下降,进而影响系统的整体业务吞吐量。
3.现有技术在处理此问题时,一般是通过将一个表头结构复杂的数据表拆分成表头结构简单的多个数据表,或者是用基于数据库的复制技术,将大数据量的数据表单独拆分到新的数据库中来提高整个系统的整体运行效率。
4.但是上述拆分方法无论是拆表还是拆数据库,其拆分过程的通用性都比较差,并且拆分过程复杂,在业务连续增长时,再次拆分又会面临同样的问题,并且还需要同时修改业务方访问数据库时的sql(structured query language,结构化查询语言)代码,即现有技术存在数据拆分涉及多方面改动,拆分代码复用性低,还需要同时在业务方修改数据库访问代码的技术问题。


技术实现要素:

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.可选的,所述属性特征包括:第一属性特征和第二属性特征,所述根据所述待拆分数据的属性特征,将所述待拆分数据分发给不同的所述数据源节点,包括:
44.将第四待拆分数据发送给第一数据源节点,所述第四待拆分数据的第一属性特征满足第一特征要求;
45.将第五待拆分数据发送给第二数据源节点,所述第五待拆分数据的第二属性特征满足第二特征要求;
46.所述待拆分数据包括:所述第四待拆分数据以及所述第五待拆分数据,所述数据源节点包括:所述第一数据源节点以及所述第二数据源节点。
47.在一种可能的设计中,在所述通过所述数据源节点将所述拆分数据发送到至少一个目标数据库集群的至少一个目标节点中之后,还包括:
48.校验所述目标节点中的数据是否已经正确复制;
49.若是,则将所述待拆分数据库集群的部分或全部服务切换到所述目标数据库集群中;
50.若否,则修正对应的问题数据。
51.第二方面,本技术提供一种数据拆分装置,包括:
52.源节点选择模块,用于在待拆分数据库集群中,根据预设要求确定至少一个数据源节点,所述数据源节点为所述待拆分数据库集群与目标数据库集群之间数据复制转移的中间媒介;
53.待拆分数据准备模块,用于将所述待拆分数据库集群中的待拆分数据发送给所述数据源节点,所述预设拆分方式保留了原有数据表的逻辑结构;
54.拆分模块,用于根据预设拆分方式对所述数据源节点中的所述待拆分数据进行拆分,以确定拆分数据;
55.所述拆分模块,还用于通过所述数据源节点将所述拆分数据发送到至少一个目标数据库集群的至少一个目标节点中。
56.在一种可能的设计中,所述待拆分数据库集群包括至少一个主从关系节点,所述主从关系节点包括:主节点以及依附于所述主节点的至少一个从节点,所述数据源节点包
括所述主从关系节点中的至少一个所述从节点。
57.在一种可能的设计中,所述拆分模块,具体用于根据所述待拆分数据中预设关键字段对应的预设拆分参数,确定所述拆分数据。
58.可选的,所述预设拆分参数包括:拆分区间范围以及在所述拆分区间范围内的至少一个拆分值,所述拆分模块,具体用于:
59.保持数据表的结构不变,根据所述数据表中的所述预设关键字段对应的所述拆分区间范围以及所述拆分值,确定所述拆分数据,所述拆分数据具备与所述数据表相同的所述结构,所述待拆分数据中包括至少一个所述数据表。
60.在一种可能的设计中,所述拆分模块,还具体用于:
61.为每个所述目标节点创建一个写入队列;
62.利用读取协程从所述数据源节点中读取所述拆分数据,并插入所述写入队列中;
63.利用写入协程从所述写入队列中依次将所述拆分数据复制到对应所述目标节点中。
64.在一种可能的设计中,所述拆分模块,还用于将所述数据源节点从所述待拆分数据库集群中摘除,以使所述数据源节点中的数据总量保持不变。
65.在一种可能的设计中,所述拆分模块,还用于:
66.将所述数据源节点重新接入所述待拆分数据库集群中;
67.将更新后的待拆分数据发送给所述数据源节点;
68.根据预设拆分方式对所述待拆分数据再次进行拆分,以确定新的拆分数据;
69.通过所述数据源节点,以过滤复制的方式将所述新的拆分数据发送给所述目标节点,所述过滤复制的方式用于滤除在所述目标节点中已经存在的拆分数据。
70.可选的,所述预设要求包括:所述数据源节点为只读节点。
71.进一步可选的,所述只读节点为所述主从关系节点中只读类型的从节点。
72.在一种可能的设计中,所述待拆分数据准备模块,用于根据所述待拆分数据的属性特征,将满足预设条件的第一待拆分数据按预设发送方式发送给所述数据源节点,所述待拆分数据包括所述第一待拆分数据。
73.可选的,所述待拆分数据准备模块,具体用于:
74.将第二待拆分数据以及第三待拆分数据按预设顺序发送给所述数据源节点,所述第二待拆分数据的所述属性特征大于或等于预设特征阈值,所述第三待拆分数据的所述属性特征小于所述预设特征阈值;
75.所述第一待拆分数据包括所述第二待拆分数据以及所述第三待拆分数据。
76.可选的,所述待拆分数据准备模块,具体用于:
77.先将所述第二待拆分数据和所述第三待拆分数据两者中的其中一个发送给所述数据源节点;
78.在通过所述数据源节点将所述第二待拆分数据或者所述第三待拆分数据对应的拆分数据发送给所述目标节点之后,再将另一个发送给所述数据源节点。
79.在一种可能的设计中,所述待拆分数据准备模块,用于将所述待拆分数据按预设属性特征的要求进行排列,以确定待拆分数据队列;
80.所述待拆分数据准备模块,还用于根据所述待拆分数据队列的排列顺序,将所述
待拆分数据分批次发送给所述数据源节点;其中,
81.在上一批次的数据在所述数据源节点中完成拆分,并且通过所述数据源节点将拆分数据发送到所述目标节点之后,再将下一批次的数据发送给所述数据源节点。
82.在一种可能的设计中,所述数据源节点的数量为至少两个时,所述待拆分数据准备模块,用于根据所述待拆分数据的属性特征,将所述待拆分数据分发给不同的所述数据源节点。
83.可选的,所述属性特征包括:第一属性特征和第二属性特征,所述待拆分数据准备模块,用于将第四待拆分数据发送给第一数据源节点,所述第四待拆分数据的第一属性特征满足第一特征要求;
84.所述待拆分数据准备模块,还用于将第五待拆分数据发送给第二数据源节点,所述第五待拆分数据的第二属性特征满足第二特征要求;
85.所述待拆分数据包括:所述第四待拆分数据以及所述第五待拆分数据,所述数据源节点包括:所述第一数据源节点以及所述第二数据源节点。
86.在一种可能的设计中,所述数据拆分装置还包括:
87.校验模块,用于校验所述目标节点中的数据是否已经正确复制;
88.若是,则
89.切换模块,用于将所述待拆分数据库集群的部分或全部服务切换到所述目标数据库集群中;
90.若否,则
91.所述拆分模块,还用于修正对应的问题数据。
92.第三个方面,本技术提供一种电子设备,包括:
93.存储器,用于存储程序指令;
94.处理器,用于调用并执行所述存储器中的程序指令,执行第一方面所提供的任意一种可能的物品存储信息确定方法。
95.第四方面,本技术提供一种存储介质,所述可读存储介质中存储有计算机程序,所述计算机程序用于执行第一方面所提供的任意一种可能的数据拆分方法。
96.第五方面,本技术还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现第一方面所提供的任意一种可能的数据拆分方法。
97.本技术提供了一种数据拆分方法、装置、设备、介质及程序产品,通过在待拆分数据库集群中,根据预设要求确定至少一个数据源节点;然后将待拆分数据库集群中的待拆分数据发送给数据源节点;并根据预设拆分方式对数据源节点中的待拆分数据进行拆分,以确定拆分数据;最后通过数据源节点将拆分数据发送到至少一个目标数据库集群的至少一个目标节点中。解决了现有技术中数据拆分涉及多方面改动,拆分代码复用性低,并且更改分表逻辑还需要同时在业务方修改查询代码的技术问题。达到了无分表逻辑变动的高效数据拆分,拆分代码复用性高,无需业务端改变查询代码的技术效果。
附图说明
98.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本技术的实施例,并与说明书一起用于解释本技术的原理。
99.图1a

1c为本技术实施例提供的保持数据表的逻辑结构不变的一种应用场景示意图;
100.图2为本技术实施例提供的一种数据拆分方法的流程示意图;
101.图3为本技术实施例提供的一种待拆分数据库集群的结构示意图;
102.图4为本技术实施例提供的另一种待拆分数据库集群的结构示意图;
103.图5为本技术实施例提供的对逻辑序列构建子序列的示意图;
104.图6为本技术实施例对图2所示数据拆分方法中s202的实现流程示意图;
105.图7为本技术实施提供的另一种数据拆分方法的流程示意图;
106.图8为本技术实施例提供的一种数据拆分装置的结构示意图;
107.图9为本技术提供的一种电子设备的结构示意图。
108.通过上述附图,已示出本技术明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本技术构思的范围,而是通过参考特定实施例为本领域技术人员说明本技术的概念。
具体实施方式
109.为使本技术实施例的目的、技术方案和优点更加清楚,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,包括但不限于对多个实施例的组合,都属于本技术保护的范围。
110.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本技术的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
111.大多数业务上线时无法预知业务后期的数据规模,因此都是使用了单个数据库实例集群承载业务,随着业务发展,业务增长量迅速,有些表数据量过大,导致查询和更新性能整体下降,进而影响系统的整体吞吐量。
112.这时需要做拆分,而数据库的拆分方法可以有多种实现方式。现有技术在进行数据库数据拆分时,一是通过将一个表头结构复杂的数据表拆分成表头结构简单的多个新数据表,例如将t表拆分成t1~t16或者更多的表来提供服务;二是将大数据量的数据表单独拆分到新数据库中,并且新数据库的系统版本更新,数据库容量更大,即新数据库对大数据量的数据表的读写能力更强。
113.但是现有技术的一个普遍存在的问题是拆分代码的通用性非常差,每次拆分都需要开发人员重新编写拆分代码,或者是对现有拆分代码进行人工修改;并且无论是拆表还是拆数据库,都无法避免地要对应修改业务侧访问数据库的sql读写代码。即现有技术存在数据拆分涉及多方面改动,拆分代码复用性低,还需要同时在业务方修改数据库访问代码
的技术问题。
114.为解决上述技术问题,本技术的发明构思是:
115.数据表是构成数据库的基础元素,业务侧对数据库访问的实质是对数据表进行增、删、读、改等一系列操作。也就是说,要想不改变业务侧的访问代码或者说不改变业务逻辑,那么就不能够去变动数据表。
116.但是正是由于数据表的数据量过大了,影响了业务侧的访问效率,又要求我们去改动数据表。这看似就是一个互相矛盾的无解问题。
117.而本技术的发明人在深入分析后,发现导致本领域技术人员认为上述问题无解的原因是本领域技术人员对于“改动数据表”的惯性思维。本领域技术人员固有的思维是认为,数据表就是一张能看得见的表格,对表格的垂直或横向的拆分,就会拆解成为多个新的数据表,原表也就不复存在了。
118.而本技术发明人却打破了这种认知惯性,从数据表的本质来思考。数据表的本质其实并不依赖于实体的表格而存在,即数据库中的数据表并不等同于我们印在纸张上的表格。一个数据表其实是一个具备预设逻辑结构的数据集合。是逻辑结构和数据本身内在的联系才是判断数据元素是否归属于数据表这个集合的约束条件。
119.也就是说,无论数据存储在何处,或者无论以何种形式存储,只要数据表的逻辑结构本身不变,那么这个数据表就是不变的。而所谓的拆分,其根本目的不是将数据表撕碎,或者将数据表重构,而是让业务端在访问时能够快速定位到数据,而只要分表逻辑不变,那么业务端自然就无需改写访问代码了。
120.这样我们就把问题转换为了如何才能够将拆分到各个新数据库中存储的数据以原数据库中数据表的逻辑结构即分表逻辑再次统领起来,使得无论数据表进行多少次拆分,但是逻辑上的数据表永远不变。并且这种统领方式不能过于复杂,避免消耗过多的计算量。
121.下面以具体地实施例对本技术的技术方案以及本技术的技术方案如何解决上述技术问题进行详细说明。下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本技术的实施例进行描述。
122.首先,我们先来介绍一种保持分表逻辑即数据表的逻辑结构不变的实施方式。
123.图1a

1c为本技术实施例提供的保持数据表的逻辑结构不变的一种应用场景示意图。如图1a所示,需要拆分的数据表100中含有大量数据记录,可以将表头结构单独提取出来,形成第一逻辑序列101,同时将下面的数据记录与第二逻辑序列102对应起来。这样通过第一逻辑序列101和第二逻辑序列102就构成了数据表100的逻辑结构,或者说利用第一逻辑序列101和第二逻辑序列102就能够表示出数据表100。
124.需要说明的是,第一逻辑序列101和第二逻辑序列102中各元素值可以是经过预设编码方式得到的编码值,如通过hash算法进行编码。那么业务侧的访问代码在编译时就可以与第一逻辑序列101和第二逻辑序列102对应起来。
125.那么拆分数据表100就可以转换为对第一逻辑序列101,和/或第二逻辑序列102的拆分,即第一逻辑序列101,和/或第二逻辑序列102可以包含多个子序列。
126.图1b和图1c就是第一逻辑序列101保持不变,而将第二逻辑序列102进行水平拆分后所得到的分别存储在新数据库中的数据表100的其中两个部分。注意,这里是两个部分而
不是两张表,因为本技术拆分的是逻辑序列而不是对表的拆分。这就是本技术的与现有技术的不同,例如现有技术在区分表时会给每个表一个单独的文件,现有技术的拆表会使得文件数量增加,这也是为什么会需要修改业务侧访问代码的原因。而本技术的逻辑序列不是数据表,但是其又能够将表还原出来,或者说第一逻辑序列101和第二逻辑序列102建立了一张虚拟表,无论实际数据存储如何拆分,虚拟表都是一个整体。
127.接下来,对应用上述保持数据表的逻辑结构不变的数据拆分方法进行详细介绍。
128.图2为本技术实施例提供的一种数据拆分方法的流程示意图。如图2所示,该数据拆分方法的具体步骤,包括:
129.s201、在待拆分数据库集群中,根据预设要求确定至少一个数据源节点。
130.在本步骤中,所述数据源节点为所述待拆分数据库集群与目标数据库集群之间数据复制转移的中间媒介。
131.在本实施例中,所述待拆分数据库集群包括至少一个主从关系节点,所述主从关系节点包括:主节点以及依附于所述主节点的至少一个从节点,所述数据源节点包括所述主从关系节点中的至少一个所述从节点。
132.在一种可能的实施方式中,所述预设要求包括:所述数据源节点为只读节点。即数据源节点的类型为只读类型的节点。这样可以避免在数据拆分时由于不确定的因素导致误删、误改数据的情况发生。
133.图3为本技术实施例提供的一种待拆分数据库集群的结构示意图。如图3所示,在待拆分数据库集群中只有一个主从关系节点300,其中主节点301与从节点302中保存的数据是一致的,但是从节点302只负责对外提供复杂查询、数据分析等服务,而不能进行写入操作,写入或者更改数据的操作必须要访问主节点301才能完成。并且主节点301定期或实时与从节点302进行数据同步,以确保两个节点的数据是一致的。原则上说,可以任意选择主节点301与从节点302中的任意一个作为数据拆分的数据源节点,但是为了避免拆分复制的过程中对原数据库集群中的数据产生误删、误改等错误操作,一般选择从节点作为实时本实施例的数据拆分方法的数据源节点。
134.若待拆分数据库集群包含多种节点,并且各节点间的关系比较复杂时,如图4所示。
135.图4为本技术实施例提供的另一种待拆分数据库集群的结构示意图。如图4所示,在待拆分数据库集群中包括:独立节点401、第一主从关系节点402、第二主从关系节点403、第三主从关系节点404。其中,第一主从关系节点402包括:第一主节点4021和第一从节点4022;第二主从关系节点403包括:第二主节点4031、第二从节点4032和第三从节点4033;第三主从关系节点404包括:第三主节点4041和第四从节点4042。原则上说,可以任意选择任意一个节点作为数据拆分的数据源节点,但是为了避免拆分复制的过程中对原数据库集群中的数据产生误删、误改等错误操作,一般选择只读节点作为实时本实施例的数据拆分方法的数据源节点。例如,第二从节点4032和第四从节点4042都为只读的从节点,那么可以选择两者中的其中一个作为数据源节点,或者将这两者都作为数据源节点。
136.当然可以理解的是,在加入了复制校验机制后,错误操作的可能大为减少的情况下,也可以选择主节点作为数据源节点。或者,对于一些非重要数据,如独立节点401可以保存一些过程类的非重要数据,此时也可以直接将其作为数据源节点。
137.总的来说,数据源节点可以不止有一个,这样可以对待拆分数据库集群中的数据进行分类拆分,提供多个拆分中间媒介接口,加快整个拆分的处理。
138.s202、将待拆分数据库集群中的待拆分数据发送给数据源节点。
139.在本步骤中,将待拆分数据库集群中的待拆分数据复制到数据源节点中,此时若为完全替换性拆分,即待拆分数据库集群全部被新的数据库集群所替代,则将待拆分数据库集群的所有数据都复制给数据源节点。若为部分替换性拆分,即仍有部分业务保留在待拆分数据库集群中,那么就将迁移的业务所对应的待拆分数据复制给数据源节点。
140.可以理解的是,受限于数据源节点的容量和处理速度,待拆分数据也可以是分批次地发送给数据源节点,待上一批次的数据通过数据源节点拆分到新数据库集群后,再复制下一批待拆分数据给数据源节点。
141.s203、根据预设拆分方式对数据源节点中的待拆分数据进行拆分,以确定拆分数据。
142.在本步骤中,所述预设拆分方式保留了原有数据表的逻辑结构即保持待拆分数据库集群的分表逻辑不变,将待拆分数据中的数据表都以虚拟表的形式保持为一个逻辑结构不变的整体。
143.可以理解的是,业务侧用相同的数据库访问代码即sql代码依然可以对数据表进行增、删、读、改等操作。
144.在本实施例中,具体的,如通过图1a

1c所示的对第一逻辑序列101和/或第二逻辑序列102构建子序列的拆分方式。
145.图5为本技术实施例提供的对逻辑序列构建子序列的示意图。如图5所示,一个逻辑序列500是起始值501到末尾值502之间的连续或者非连续的取值序列,例如起始值501为[0x00],末尾值502为[0xff]。在起始值501到末尾值502之间按预设算法如hash算法取至少一个子序列拆分值503,如[0x80],则逻辑序列500就被拆分为两个子序列,即起始值501到子序列拆分值503的第一子序列,以及子序列拆分值503到末尾值502的第二子序列。
[0146]
可以理解的是,子序列在拆分后还可以进行扩展,以对应数据表中新增的数据记录。并且子序列还能够以相同的方式继续进行拆分,从而实现了数据拆分代码的通用性或者说是复用性。
[0147]
进一步的,在一种可能的设计中,可以根据所述待拆分数据中预设关键字段对应的预设拆分参数,确定所述拆分数据。
[0148]
例如,上述的第二逻辑序列102其可以是原数据表中的所有数据,也可以是部分数据,这样第二逻辑序列的起始值、末尾值和子序列拆分值都需要做出相应的调整,来得到子序列即拆分数据。
[0149]
s204、通过数据源节点将拆分数据发送到目标数据库集群的目标节点中。
[0150]
在本步骤中,目标数据库集群包括至少一个新的数据库集群,每个数据库集群中包括至少一个节点,目标节点可以是新的数据库集群中任意一个或多个节点。
[0151]
步骤s203中所得到的拆分数据,其除了待拆分数据中原数据表的数据外,还包括了逻辑序列,用以维系数据表的分表逻辑不变。而不同的拆分数据根据预设规则,放入到了不同的新数据库或者新数据库集群的节点当中。
[0152]
需要说明的是,新数据库或者新数据库集群因为需要服务的数据量少了,在业务
侧访问时能够提高处理效率,进而提高了整个系统的性能。当然,新数据库或者新数据库集群也可以是数据处理性能更好的数据库,在相同数据量时能够更好更快地处理业务侧的访问需求。
[0153]
进一步的,在一种可能的设计中,在通过数据源节点完成拆分数据向目标数据库集群的目标节点的复制之后,还包括:
[0154]
校验所述目标节点中的数据是否已经正确复制
[0155]
若是,则将所述待拆分数据库集群的部分或全部服务切换到所述目标数据库集群中;
[0156]
若否,则在所述待拆分数据库集群中修正对应的问题数据,并通过所述数据源节点重新复制所述问题数据。
[0157]
本实施例提供了一种数据拆分方法,通过在待拆分数据库集群中,根据预设要求确定至少一个数据源节点;然后将待拆分数据库集群中的待拆分数据发送给数据源节点;并根据预设拆分方式对数据源节点中的待拆分数据进行拆分,以确定拆分数据;最后通过数据源节点将拆分数据发送到至少一个目标数据库集群的至少一个目标节点中。解决了现有技术中数据拆分涉及多方面改动,拆分代码复用性低,并且更改分表逻辑还需要同时在业务方修改查询代码的技术问题。达到了无分表逻辑变动的高效数据拆分,拆分代码复用性高,无需业务端改变查询代码的技术效果。
[0158]
为了便于理解,下面的实施例在图2所示实施例的基础上,对步骤s202对应的几种可能的实施方式进行解释。
[0159]
图6为本技术实施例对图2所示数据拆分方法中s202的实现流程示意图。
[0160]
对于s202、将待拆分数据库集群中的待拆分数据发送给数据源节点,可以有至少以下s610、s602

s603和s630三种可能的并列实施方式。
[0161]
第一种实施方式为:
[0162]
s601、根据待拆分数据的属性特征,将满足预设条件的第一待拆分数据按预设发送方式发送给数据源节点,所述待拆分数据包括所述第一待拆分数据。
[0163]
属性特征可以有多个特征,包括:数据访问频率、数据类型、对应的业务分类等等,还可以包括各个数据表中不同字段的数据记录选取不同的取值范围来作为预设的属性特征对应的预设条件。本领域技术人员可以根据具体应用场景的需求来选定属性特征及其对应需要满足的预设条件,来筛选出待拆分数据,本实施例不作限定。
[0164]
进一步的,所述第一待拆分数据包括:第二待拆分数据以及第三待拆分数据,所述第二待拆分数据的属性特征大于或等于预设特征阈值,所述第三待拆分数据的属性特征小于所述预设特征阈值。
[0165]
则将第二待拆分数据以及第三待拆分数据按预设顺序发送给所述数据源节点。
[0166]
具体的,先将所述第二待拆分数据和所述第三待拆分数据两者中的其中一个发送给所述数据源节点;
[0167]
在通过所述数据源节点将所述第二待拆分数据或者所述第三待拆分数据对应的拆分数据发送给所述目标节点之后,再将另一个发送给所述数据源节点。
[0168]
例如,在待拆分数据库集群中,将数据访问频率大于或等于预设频率的数据确定为第二待拆分数据,即热点数据,该部分数据由于被经常访问,那么其对业务侧的影响较
大,因此需要先将其拆分到新数据库集群中。而数据访问频率小于预设频率的,确定为第三待拆分数据,即冷门数据,那么就可以在第二待拆分数据在数据源节点中拆分完成,并对应分拆复制到各个目标数据库集群的目标节点后,再将第三待拆分数据发送给数据源节点进行拆分和复制给其对应的目标数据库集群中的各个目标节点。
[0169]
第二种实施方式为:
[0170]
s602、将所述待拆分数据按预设属性特征的要求进行排列,以确定待拆分数据队列。
[0171]
s603根据所述待拆分数据队列的排列顺序,将所述待拆分数据分批次发送给所述数据源节点。
[0172]
在本步骤中,在上一批次的数据在所述数据源节点中完成拆分,并且通过所述数据源节点将拆分数据发送到所述目标节点之后,再将下一批次的数据发送给所述数据源节点。
[0173]
例如,将待拆分数据按照业务类型进行分类,然后再按照每个业务类型中数据的操作日志所记录的操作时间进行排列,将同一个时间段的数据作为同一批次的待拆分数据,发送给数据源节点,由数据源节点根据子序列拆分值、起始值、末尾值等拆分参数进行拆分后,再通过多个并行协程发送给各个目标数据库集群中的各个目标节点。在一批待拆分数据完成拆分复制后,再进行下一批,直到所有待拆分数据都通过各个数据源节点完成拆分和复制。
[0174]
第三种实施方式为:
[0175]
所述数据源节点的数量为至少两个时,所述将所述待拆分数据库集群中的待拆分数据发送给所述数据源节点包括:
[0176]
s604、根据所述待拆分数据的属性特征,将所述待拆分数据分发给不同的所述数据源节点。
[0177]
在本步骤中,所述属性特征包括:第一属性特征和第二属性特征,所述待拆分数据包括:第四待拆分数据以及第五待拆分数据,数据源节点包括:第一数据源节点以及第二数据源节点。
[0178]
具体步骤包括:
[0179]
s6041、将第四待拆分数据发送给第一数据源节点,所述第四待拆分数据的第一属性特征满足第一特征要求;
[0180]
s6042、将第五待拆分数据发送给第二数据源节点,所述第五待拆分数据的第二属性特征满足第二特征要求。
[0181]
例如,在待拆分数据库中,将数码产品类业务的相关数据中,月销售额度在10万以上的销售数据拆分到a数据库集群中,则将该销售数据发送给第一数据源节点进行拆分和复制;将餐饮服务类业务的相关数据中,访问频率大于或等于预设访问阈值如日均访问量在2000人次的相关数据拆分到b数据库集群中,则将其发送到第二数据源节点进行拆分和复制。
[0182]
进一步的,考虑到数据源节点在待拆分数据库中原本也负责着某些业务,如对外提供复杂查询、数据分析等服务,这时候,数据源节点会与其它节点间存在着数据交互。考虑到该交互可能会对拆分和复制产生影响,或者说为了保证数据源节点实现静态拆分和静
态复制,那么需要在数据源节点接收完待拆分数据后断开与其它节点的联系,并停止对外服务,即从待拆分数据库集群中摘除,且其工作状态变为不可用状态。
[0183]
下面就在图2所示实施例的基础上,结合数据源节点的摘除,得到的另一种数据拆分方法进行介绍。
[0184]
图7为本技术实施提供的另一种数据拆分方法的流程示意图。如图7所示,该数据拆分方法的具体步骤包括:
[0185]
s701、在待拆分数据库集群中,根据预设要求确定至少一个数据源节点。
[0186]
在本步骤中,所述待拆分数据库集群包括至少一个主从关系节点,所述主从关系节点包括:主节点以及依附于所述主节点的至少一个从节点,所述数据源节点包括所述主从关系节点中的至少一个所述从节点。
[0187]
所述预设要求包括:所述数据源节点为只读节点,进一步的,所述只读节点为所述主从关系节点中只读类型的从节点。
[0188]
本步骤的具体介绍,参见图2所对应的实施例的s201,在此不作赘述。
[0189]
s702、将待拆分数据库集群中的待拆分数据发送给数据源节点。
[0190]
本步骤的具体解释可以参见图6所示的实施方式,在此不作赘述。
[0191]
s703、将数据源节点从待拆分数据库集群中摘除。
[0192]
在本步骤中,将所述数据源节点与所述待拆分数据库集群中其它节点的连接都切断,并且将所述数据源节点的类型改为不可用类型,如标记上notserving标识。这样外部业务侧也不能够通过所述数据源节点访问数据库。这就为后续的拆分与复制过程实现了静态拆分与静态复制,避免拆分或复制的数据出现错误。
[0193]
s704、保持数据表的表头结构不变,根据数据表中的预设关键字段对应的拆分区间范围以及拆分值,确定拆分数据。
[0194]
在本步骤中,拆分数据具备与数据表相同的结构,待拆分数据中包括至少一个数据表。
[0195]
s705、通过数据源节点将拆分数据发送到至少一个目标数据库集群的至少一个目标节点中。
[0196]
步骤s704

s705的具体解释参见图2所示实施例的步骤s203

s204,在此不作赘述。
[0197]
需要说明的是,在一种可能的设计中,向各个目标节点中复制或克隆数据是并行完成的,可以通过指定参数来设置复制的方式。例如设置多个协程同时从不可用状态的源节点中读取数据,并写入到每个写入队列中。默认情况下,有10个并行的协程并行读取源节点中的数据,并将其写入到对应的目标节点当中。
[0198]
还需要说明的是,在一种可能的情况下,如果目标节点有脏数据即无法确定其正确性与合法性的数据,向目标节点克隆或复制数据过程中会将脏数据删除或者修正;反之,在克隆数据之前将数据插入到目标节点是不可以的,数据会被认为是脏数据而被删除。
[0199]
s706、将数据源节点重新接入待拆分数据库集群中。
[0200]
在本步骤中,由于数据源节点在执行s704和s705这两个步骤的过程中,业务侧可能会向待拆分数据库中写入数据或者更新数据,为了保证拆分后各个目标数据库集群中各个目标节点中的数据与待拆分数据库集群中的数据保持一致性,需要将数据源节点重新接入待拆分数据库作检验。
[0201]
此外,在一种可能的设计中,若待拆分数据库集群中的待拆分数据是分批次传输的,此步骤也能够保证数据源节点能够接收到下一批次的数据。
[0202]
进一步的,因为数据源节点也是有服务功能的,为了让数据源节点的不可用状态的持续时间尽可能缩短,可以限制每次数据源节点拆分待拆分数据的数据量,和/或向各个目标节点复制拆分数据的数据量。而通过分批多次,在服务空闲时完成拆分复制,实现数据库拆分时对业务侧的影响最小化。
[0203]
s707、将更新后的待拆分数据发送给数据源节点。
[0204]
本步骤可以看成是重复执行步骤s702。但是只是将更新的数据传给数据源节点。
[0205]
s708、根据预设拆分方式对待拆分数据再次进行拆分,以确定新的拆分数据。
[0206]
s709、通过数据源节点,以过滤复制的方式将新的拆分数据发送给所述目标节点。
[0207]
在本步骤中,所述过滤复制的方式用于滤除在所述目标节点中已经存在的拆分数据。
[0208]
具体的,过滤复制就是在目标节点上开启一个日志消费服务,日志消费服务去源节点读取binlog,用于表示业务侧在访问数据库时对数据的操作记录,根据binlog和拆分参数(如逻辑序列的初始值、末尾值和子序列拆分值)决定是否执行binlog。
[0209]
需要注意的是,克隆工作完成后过滤复制仍然是开启状态的,也就是说,忽略复制延迟的情况下,源数据库集群即待拆分数据库集群和目标数据库集群的数据是一致的。现在源数据库集群的任何更新操作都可以在相应的目标数据库集群上读取到。
[0210]
s710、校验目标节点中的数据是否已经正确复制。
[0211]
在本步骤中,可以逐行对比目标节点的数据表中的数据是否与待拆分数据中的数据一致,若是,则执行步骤s711,若否,则执行s712。
[0212]
s711、将待拆分数据库集群的部分或全部服务切换到目标数据库集群中。
[0213]
在本步骤中,在确认目标数据库集群的服务正常时,就可以关闭待拆分数据库集群或者是关闭待拆分数据库集群的部分节点,将对应发服务切换到目标数据库集群即新的拆分后的数据库集群中,即拆分任务完成。
[0214]
s712、修正对应的问题数据。
[0215]
具体的,若发现待拆分数据库集群中的数据存在问题,如类型错误,或对应的业务类型错误,则在所述待拆分数据库集群中修正对应的问题数据,并通过所述数据源节点重新复制正确的数据。
[0216]
若是拆分复制的过程出错,则直接通过所述数据源节点重新复制正确的数据。
[0217]
本实施例提供了一种数据拆分方法,通过在待拆分数据库集群中,根据预设要求确定至少一个数据源节点;然后将待拆分数据库集群中的待拆分数据发送给数据源节点;并根据预设拆分方式对数据源节点中的待拆分数据进行拆分,以确定拆分数据;最后通过数据源节点将拆分数据发送到至少一个目标数据库集群的至少一个目标节点中。解决了现有技术中数据拆分涉及多方面改动,拆分代码复用性低,并且更改分表逻辑还需要同时在业务方修改查询代码的技术问题。达到了无分表逻辑变动的高效数据拆分,拆分代码复用性高,无需业务端改变查询代码的技术效果。
[0218]
图8为本技术实施例提供的一种数据拆分装置的结构示意图。该数据拆分装置800可以通过软件、硬件或者两者的结合实现。
[0219]
如图8所示,该数据拆分装置800包括:
[0220]
获取模块801,用于获取待存储物品对应的第一标签信息;
[0221]
源节点选择模块802,用于在待拆分数据库集群中,根据预设要求确定至少一个数据源节点,所述数据源节点为所述待拆分数据库集群与目标数据库集群之间数据复制转移的中间媒介;
[0222]
待拆分数据准备模块803,用于将所述待拆分数据库集群中的待拆分数据发送给所述数据源节点,所述预设拆分方式保留了原有数据表的逻辑结构;
[0223]
拆分模块804,用于根据预设拆分方式对所述数据源节点中的所述待拆分数据进行拆分,以确定拆分数据;
[0224]
所述拆分模块804,还用于通过所述数据源节点将所述拆分数据发送到至少一个目标数据库集群的至少一个目标节点中。
[0225]
在一种可能的设计中,所述待拆分数据库集群包括至少一个主从关系节点,所述主从关系节点包括:主节点以及依附于所述主节点的至少一个从节点,所述数据源节点包括所述主从关系节点中的至少一个所述从节点。
[0226]
在一种可能的设计中,所述拆分模块804,具体用于根据所述待拆分数据中预设关键字段对应的预设拆分参数,确定所述拆分数据。
[0227]
可选的,所述预设拆分参数包括:拆分区间范围以及在所述拆分区间范围内的至少一个拆分值,所述拆分模块804,具体用于:
[0228]
保持数据表的结构不变,根据所述数据表中的所述预设关键字段对应的所述拆分区间范围以及所述拆分值,确定所述拆分数据,所述拆分数据具备与所述数据表相同的所述结构,所述待拆分数据中包括至少一个所述数据表。
[0229]
在一种可能的设计中,所述拆分模块804,还具体用于:
[0230]
为每个所述目标节点创建一个写入队列;
[0231]
利用读取协程从所述数据源节点中读取所述拆分数据,并插入所述写入队列中;
[0232]
利用写入协程从所述写入队列中依次将所述拆分数据复制到对应所述目标节点中。
[0233]
在一种可能的设计中,所述拆分模块804,还用于将所述数据源节点从所述待拆分数据库集群中摘除,以使所述数据源节点中的数据总量保持不变。
[0234]
在一种可能的设计中,所述拆分模块804,还用于:
[0235]
将所述数据源节点重新接入所述待拆分数据库集群中;
[0236]
将更新后的待拆分数据发送给所述数据源节点;
[0237]
根据预设拆分方式对所述待拆分数据再次进行拆分,以确定新的拆分数据;
[0238]
通过所述数据源节点,以过滤复制的方式将所述新的拆分数据发送给所述目标节点,所述过滤复制的方式用于滤除在所述目标节点中已经存在的拆分数据。
[0239]
可选的,所述预设要求包括:所述数据源节点为只读节点。
[0240]
进一步可选的,所述只读节点为所述主从关系节点中只读类型的从节点。
[0241]
在一种可能的设计中,所述待拆分数据准备模块803,用于根据所述待拆分数据的属性特征,将满足预设条件的第一待拆分数据按预设发送方式发送给所述数据源节点,所述待拆分数据包括所述第一待拆分数据。
[0242]
可选的,所述待拆分数据准备模块803,具体用于:
[0243]
将第二待拆分数据以及第三待拆分数据按预设顺序发送给所述数据源节点,所述第二待拆分数据的所述属性特征大于或等于预设特征阈值,所述第三待拆分数据的所述属性特征小于所述预设特征阈值;
[0244]
所述第一待拆分数据包括所述第二待拆分数据以及所述第三待拆分数据。
[0245]
可选的,所述待拆分数据准备模块803,具体用于:
[0246]
先将所述第二待拆分数据和所述第三待拆分数据两者中的其中一个发送给所述数据源节点;
[0247]
在通过所述数据源节点将所述第二待拆分数据或者所述第三待拆分数据对应的拆分数据发送给所述目标节点之后,再将另一个发送给所述数据源节点。
[0248]
在一种可能的设计中,所述待拆分数据准备模块803,用于将所述待拆分数据按预设属性特征的要求进行排列,以确定待拆分数据队列;
[0249]
所述待拆分数据准备模块803,还用于根据所述待拆分数据队列的排列顺序,将所述待拆分数据分批次发送给所述数据源节点;其中,
[0250]
在上一批次的数据在所述数据源节点中完成拆分,并且通过所述数据源节点将拆分数据发送到所述目标节点之后,再将下一批次的数据发送给所述数据源节点。
[0251]
在一种可能的设计中,所述数据源节点的数量为至少两个时,所述待拆分数据准备模块803,用于根据所述待拆分数据的属性特征,将所述待拆分数据分发给不同的所述数据源节点。
[0252]
可选的,所述属性特征包括:第一属性特征和第二属性特征,所述待拆分数据准备模块803,用于将第四待拆分数据发送给第一数据源节点,所述第四待拆分数据的第一属性特征满足第一特征要求;
[0253]
所述待拆分数据准备模块803,还用于将第五待拆分数据发送给第二数据源节点,所述第五待拆分数据的第二属性特征满足第二特征要求;
[0254]
所述待拆分数据包括:所述第四待拆分数据以及所述第五待拆分数据,所述数据源节点包括:所述第一数据源节点以及所述第二数据源节点。
[0255]
在一种可能的设计中,所述数据拆分装置还包括:
[0256]
校验模块805,用于校验所述目标节点中的数据是否已经正确复制;
[0257]
若是,则
[0258]
切换模块806,用于将所述待拆分数据库集群的部分或全部服务切换到所述目标数据库集群中;
[0259]
若否,则
[0260]
所述拆分模块804,还用于修正对应的问题数据。
[0261]
值得说明的是,图8所示实施例提供的装置,可以执行上述任一方法实施例中所提供的方法,其具体实现原理、技术特征、专业名词解释以及技术效果类似,在此不再赘述。
[0262]
图9为本技术实施例提供的一种电子设备的结构示意图。如图9所示,该电子设备900,可以包括:至少一个处理器901和存储器902。图9示出的是以一个处理器为例的电子设备。
[0263]
存储器902,用于存放程序。具体地,程序可以包括程序代码,程序代码包括计算机
操作指令。
[0264]
存储器902可能包含高速ram存储器,也可能还包括非易失性存储器(non

volatile memory),例如至少一个磁盘存储器。
[0265]
处理器901用于执行存储器902存储的计算机执行指令,以实现以上各方法实施例所述的方法。
[0266]
其中,处理器901可能是一个中央处理器(central processing unit,简称为cpu),或者是特定集成电路(application specific integrated circuit,简称为asic),或者是被配置成实施本技术实施例的一个或多个集成电路。
[0267]
可选地,存储器902既可以是独立的,也可以跟处理器901集成在一起。当所述存储器902是独立于处理器901之外的器件时,所述电子设备900,还可以包括:
[0268]
总线903,用于连接所述处理器901以及所述存储器902。总线可以是工业标准体系结构(industry standard architecture,简称为isa)总线、外部设备互连(peripheral component,pci)总线或扩展工业标准体系结构(extended industry standard architecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等,但并不表示仅有一根总线或一种类型的总线。
[0269]
可选的,在具体实现上,如果存储器902和处理器901集成在一块芯片上实现,则存储器902和处理器901可以通过内部接口完成通信。
[0270]
本技术实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以包括:u盘、移动硬盘、只读存储器(read

only memory,rom)、随机存取存储器(random access memory,ram)、磁盘或者光盘等各种可以存储程序代码的介质,具体的,该计算机可读存储介质中存储有程序指令,程序指令用于上述各方法实施例中的方法。
[0271]
本技术实施例还提供一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述各方法实施例中的方法。
[0272]
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本技术的其它实施方案。本技术旨在涵盖本技术的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本技术的一般性原理并包括本技术未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本技术的真正范围和精神由本技术的权利要求书指出。
[0273]
应当理解的是,本技术并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本技术的范围仅由所附的权利要求书来限制。
[0274]
最后应说明的是:以上各实施例仅用以说明本技术的技术方案,而非对其限制;尽管参照前述各实施例对本技术进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本技术各实施例技术方案的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献