基于均衡负载的分库方法及装置与流程

未命名 07-20 阅读:89 评论:0


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.在一个实施例中,所述分配模块包括:
44.确定时间段个数单元,用于根据各个时间段的平均更新行数和所述合并后的数据表组在各个时间段的更新行数,确定各个时间段内该合并后的数据表组的更新行数与对应的平均更新行数的比值,统计所述比值大于预设的第一倍数的目标时间段个数;
45.确定数据表组单元,用于将各个合并后的数据表组中目标时间段个数最少的,确定为目标数据表组,将所述未分配数据库实例的数据表组分配至所述目标数据表组中已分配数据库实例的数据表组所在的数据库实例,完成各个数据表的分库。
46.在一个实施例中,所述排序单元,还具体用于:
47.若存在目标时间段个数相同的多组待比较数据表组,则统计每组待比较数据表组对应的所述比值超出预设的第二倍数的时间段个数,所述预设的第二倍数小于预设的第一倍数;
48.根据所述比值超出预设的第二倍数的时间段个数从多到少对待比较数据表组进行排序。
49.在一个实施例中,所述获取模块,包括:
50.获取单元,用于获取全量的结构化查询语言脚本和各个数据表的表统计信息;
51.解析单元,用于根据所述全量的结构化查询语言脚本和预设的结构化查询语言解析器,得到各个数据表对应的表连接关系信息。
52.第三方面,本技术提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现所述的基于均衡负载的分库方法。
53.第四方面,本技术提供一种计算机可读存储介质,其上存储有计算机指令,所述指令被执行时实现所述的基于均衡负载的分库方法。
54.由上述技术方案可知,本技术提供一种基于均衡负载的分库方法及装置。其中,该方法包括:获取多个数据表对应的表统计信息和表连接关系信息;基于各个数据表的表统计信息和表连接关系信息进行负载均衡处理,确定各个数据表各自对应的数据库实例并将各个数据表分配至各自对应的数据库实例,完成各个数据表的分库,能够提高数据表分库的自动化程度和准确性,进而能够缓解数据库的读写压力;具体地,能够解决人工分库耗费人力并且准确性低的问题,使用者不局限于对业务特别熟悉的开发人员,只需要知道少量信息即可进行分库分表的分析;相较于人工判断哪些表负载较大更加精确,表分配到各个数据库实例的效果会更好;能够避免将有表连接关系的表分配到不同数据库实例的情况,大大降低分库分表后sql因为找不到表而报错的风险。
附图说明
55.为了更清楚地说明本技术实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
56.图1是本技术实施例中的基于均衡负载的分库方法的第一流程示意图;
57.图2是本技术实施例中的基于均衡负载的分库方法的第二流程示意图;
58.图3是本技术实施例中的基于均衡负载的分库方法的第三流程示意图;
59.图4是本技术实施例中的基于均衡负载的分库方法的第四流程示意图;
60.图5是本技术实施例中的基于均衡负载的分库装置的结构示意图;
61.图6是本技术实施例中的分库模块的结构示意图;
62.图7是本技术具体应用实例中的基于均衡负载的分库装置的结构示意图;
63.图8是本技术具体应用实例中的基于均衡负载的分库方法的流程示意图;
64.图9是本技术具体应用实例中的应用均衡负载算法过程的流程示意图;
65.图10为本技术实施例的电子设备的系统构成示意框图。
具体实施方式
66.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本技术实施例中的附图,对本技术实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本技术保护的范围。
67.为了便于对本方案的理解,下面对与本方案相关的技术内容进行说明。
68.分库指的是将原来存放在单个库中的数据,拆分到多个库中存放。分表指的是将
原来存在单个表中的数据,拆分到多个表中。本发明主要是针对的是分库。
69.数据库实例,实际上就是数据库服务器引擎,每个数据库服务器引擎实例各有一套不为其他实例共享的系统及用户数据库,可以分布在不同的服务器上。
70.负载,这里指的是对数据库的使用压力,包括读压力和写压力。
71.为了解决上述现有技术中存在的问题,本技术实施例提供一种基于均衡负载的分库方法及装置,可以利用sql来获取mysql数据库中的统计信息,最终根据统计信息来分析负载情况,并根据负载情况将所有表分配到各个数据库实例中,实现各个数据库实例的负载均衡。
72.需要说明的是,本技术公开的基于均衡负载的分库方法及装置可用于金融技术领域,也可用于除金融技术领域之外的任意领域,本技术公开的基于均衡负载的分库方法及装置的应用领域不做限定。
73.具体通过下述各个实施例进行说明。
74.为了提高数据表分库的自动化程度和准确性,进而缓解数据库的读写压力,本实施例提供一种执行主体是基于均衡负载的分库装置的基于均衡负载的分库方法,该基于均衡负载的分库装置包括但不限于服务器,如图1所示,该方法具体包含有如下内容:
75.步骤100:获取多个数据表对应的表统计信息和表连接关系信息。
76.具体地,可以获取一金融交易系统对应的多个数据表的表统计信息和表连接关系信息;所述表统计信息可以包括:数据表在多个时间段的更新行数,还可以包括数据表在多个时间段的查询行数;所述表连接关系信息可以表示存在表连接关系的数据表;例如,一条sql查询语句中需要关联join多个数据表完成数据查询,那么可以将所述多个数据表确定为存在表连接关系的数据表。
77.步骤200:基于各个数据表的表统计信息和表连接关系信息进行负载均衡处理,确定各个数据表各自对应的数据库实例并将各个数据表分配至各自对应的数据库实例,完成各个数据表的分库。
78.为了进一步提高数据表分库的可靠性,如图2所示,在一个实施例中,步骤200包括:
79.步骤201:根据各个数据表的表连接关系信息,将各个数据表划分多组数据表组,每组数据表组包括:存在表连接关系的多个数据表或者不存在表连接关系的唯一的数据表。
80.举例来说,金融交易系统对应的数据表包括:数据表a、b、c、d、e和f,假设,数据表a、b、c之间存在表连接关系,数据表d、e和f均与其他数据表不存在表连接关系,那么可以将数据表划分为四组数据表组,分别为由数据表a、b、c组成的数据表组1,由数据表d组成的数据表组2,由数据表e组成的数据表组3,由数据表f组成的数据表组4。
81.步骤202:判断所述数据表组的组数是否小于等于数据库实例个数,若是,则将各个数据表组分配至不同的数据库实例。
82.具体地,所述数据库实例个数可以预先存储在基于均衡负载的分库装置本地。
83.在上述举例中,假设数据库实例个数为5,则可以随机选取其中4个数据库实例,将上述四组数据表组分配至这4个数据库实例中。
84.为了避免将存在表连接关系的表分配到不同数据库实例,进一步提高数据表分库
的可靠性,如图3所示,在一个实施例中,所述的基于均衡负载的分库方法,还包括:
85.步骤203:若所述数据表组的组数大于数据库实例个数,则根据各个数据表的表统计信息中在多个时间段的更新行数,得到各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数。
86.在上述举例中,假设数据库实例个数为3,数据表a、b、c、d、e和f在时间段k1的更新行数依次为x1、x2、x3、x4、x5、x6,在时间段k2的更新行数依次为y1、y2、y3、y4、y5、y6,那么时间段k1的平均更新行数为(x1+x2+x3+x4+x5+x6)/6,时间段k2的平均更新行数为(y1+y2+y3+y4+y5+y6)/6,数据表组1在时间段k1的更新行数为(x1+x2+x3),在时间段k2的更新行数为(y1+y2+y3),依次类推。
87.步骤204:根据各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数对数据表组进行排序,将排序后的数据表组从首位开始依次分配至各个数据库实例中。
88.为了进一步提高数据表组排序的可靠性,作为优选,步骤204所述的根据各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数对数据表组进行排序可以包括:步骤2041:根据各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数,确定各个时间段内该组数据表组的更新行数与对应的平均更新行数的比值,统计所述比值大于预设的第一倍数的目标时间段个数;步骤2042:根据每组数据表组的目标时间段个数从多到少对数据表组进行排序。
89.具体地,所述预设的第一倍数可以根据实际情况设置,本技术对此不作限制。
90.在上述举例中,时间段k1平均更新行数为(x1+x2+x3+x4+x5+x6)/6,数据表组1的更新行数为(x1+x2+x3),在时间段k1该数据表组的更新行数超出对应的平均更新行数的倍数为6(x1+x2+x3)/(x1+x2+x3+x4+x5+x6),假设6(x1+x2+x3)/(x1+x2+x3+x4+x5+x6)大于预设的第一倍数,则数据表组1的目标时间段个数加1,依次类推,可以确定数据表组1至4各自的目标时间段的总数;假设数据表组的目标时间段个数从多到少依次为数据表组1、数据表组3、数据表组2、数据表组4,那么可以将数据表组1、数据表组3、数据表组2分别配置至不同的数据库实例中。
91.步骤205:将未分配数据库实例的数据表组分别与各个已分配数据库实例的数据表组合并,得到合并后的数据表组。
92.在上述举例中,将数据表组4分别与数据表组1、数据表组3、数据表组2合并,得到由数据表a、b、c、f组成的数据表组5,由数据表d、f组成的数据表组6,由数据表e、f组成的数据表组7。
93.步骤206:根据各个时间段的平均更新行数和所述合并后的数据表组在各个时间段的更新行数,确定所述未分配数据库实例的数据表组对应的数据库实例并将其分配至该数据库实例,完成各个数据表的分库。
94.为了避免将访问量很大的数据表都分配到同一个数据库实例当中,进一步缓解数据库的性能压力,如图4所示,在一个实施例中,步骤206包括:
95.步骤2061:根据各个时间段的平均更新行数和所述合并后的数据表组在各个时间段的更新行数,确定各个时间段内该合并后的数据表组的更新行数与对应的平均更新行数的比值,统计所述比值大于预设的第一倍数的目标时间段个数。
96.在上述举例中,时间段k1平均更新行数为(x1+x2+x3+x4+x5+x6)/6,时间段k1数据表组5的更新行数为(x1+x2+x3+x6),假设6(x1+x2+x3+x6)/(x1+x2+x3+x4+x5+x6)大于预设的第一倍数,则数据表组1超出对应的平均更新行数的预设的第一倍数的时间段个数加1,依次类推,可以确定数据表组5超出对应的平均更新行数的预设的第一倍数的时间段个数。
97.步骤2062:将各个合并后的数据表组中目标时间段个数最少的,确定为目标数据表组,将所述未分配数据库实例的数据表组分配至所述目标数据表组中已分配数据库实例的数据表组所在的数据库实例,完成各个数据表的分库。
98.在上述举例中,假设数据表组5更新行数超出对应的平均更新行数的预设的第一倍数的时间段个数最少,那么可以将数据表组4分配至数据表组1所在的数据库实例。
99.为了进一步提高数据表组排序的可靠性,在一个实施例中,步骤2042还包括:
100.若存在目标时间段个数相同的多组待比较数据表组,则统计每组待比较数据表组对应的所述比值超出预设的第二倍数的时间段个数,所述预设的第二倍数小于预设的第一倍数;根据所述比值超出预设的第二倍数的时间段个数从多到少对待比较数据表组进行排序。
101.具体地,若存在目标时间段个数相同的多组待比较数据表组,则可以获取每组待比较数据表组的更新行数超出对应的平均更新行数的预设的第二倍数的时间段个数;根据更新行数超出对应的平均更新行数的预设的第二倍数的时间段个数从多到少对待比较数据表组进行排序。待比较数据表组可以表示目标时间段个数相同的数据表组。
102.具体地,所述待比较数据表组可以表示目标时间段个数相同的多个数据表组;所述预设的第二倍数可以根据实际情况进行设置,本技术对此不作限制。可以通过调整预设的第二倍数,实现待比较数据表组进行排序;若多次调整预设的第二倍数,仍存在所述比值超出预设的第二倍数的时间段个数相同的待比较数据表组时,可以根据各个时间段的平均查询行数和待比较数据表组在各个时间段的查询行数,完成待比较数据表组的分库。
103.为了进一步提高获得表连接关系信息的效率和准确性,在一个实施例中,步骤100包括:
104.步骤001:获取全量的结构化查询语言脚本和各个数据表的表统计信息。
105.具体地,所述全量的结构化查询语言脚本可以是金融交易系统的configuration对象的全量sql。
106.步骤002:根据所述全量的结构化查询语言脚本和预设的结构化查询语言解析器,得到各个数据表对应的表连接关系信息。
107.具体地,所述预设的结构化查询语言解析器可以是sql解析器。
108.从软件层面来说,为了提高数据表分库的自动化程度和准确性,进而缓解数据库的读写压力,本技术提供一种用于实现所述基于均衡负载的分库方法中全部或部分内容的基于均衡负载的分库装置的实施例,参见图5,所述基于均衡负载的分库装置具体包含有如下内容:
109.获取模块01,用于获取多个数据表对应的表统计信息和表连接关系信息;
110.分库模块02,用于基于各个数据表的表统计信息和表连接关系信息进行负载均衡处理,确定各个数据表各自对应的数据库实例并将各个数据表分配至各自对应的数据库实例,完成各个数据表的分库。
111.如图6所示,在一个实施例中,所述分库模块包括:
112.划分单元21,用于根据各个数据表的表连接关系信息,将各个数据表划分多组数据表组,每组数据表组包括:存在表连接关系的多个数据表或者不存在表连接关系的唯一的数据表;
113.判断单元22,用于判断所述数据表组的组数是否小于等于数据库实例个数,若是,则将各个数据表组分配至不同的数据库实例。
114.在一个实施例中,所述的基于均衡负载的分库装置,还包括:
115.获得模块,用于若所述数据表组的组数大于数据库实例个数,则根据各个数据表的表统计信息中在多个时间段的更新行数,得到各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数;
116.排序模块,用于根据各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数对数据表组进行排序,将排序后的数据表组从首位开始依次分配至各个数据库实例中;
117.合并模块,用于将未分配数据库实例的数据表组分别与各个已分配数据库实例的数据表组合并,得到合并后的数据表组;
118.分配模块,用于根据各个时间段的平均更新行数和所述合并后的数据表组在各个时间段的更新行数,确定所述未分配数据库实例的数据表组对应的数据库实例并将其分配至该数据库实例,完成各个数据表的分库。
119.在一个实施例中,所述排序模块包括:
120.确定单元,用于根据各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数,确定各个时间段内该组数据表组的更新行数与对应的平均更新行数的比值,统计所述比值大于预设的第一倍数的目标时间段个数;
121.排序单元,用于根据每组数据表组的目标时间段个数从多到少对数据表组进行排序。
122.在一个实施例中,所述分配模块包括:
123.确定时间段个数单元,用于根据各个时间段的平均更新行数和所述合并后的数据表组在各个时间段的更新行数,确定各个时间段内该合并后的数据表组的更新行数与对应的平均更新行数的比值,统计所述比值大于预设的第一倍数的目标时间段个数;
124.确定数据表组单元,用于将各个合并后的数据表组中目标时间段个数最少的,确定为目标数据表组,将所述未分配数据库实例的数据表组分配至所述目标数据表组中已分配数据库实例的数据表组所在的数据库实例,完成各个数据表的分库。
125.在一个实施例中,所述排序单元,还具体用于:
126.若存在目标时间段个数相同的多组待比较数据表组,则统计每组待比较数据表组对应的所述比值超出预设的第二倍数的时间段个数,所述预设的第二倍数小于预设的第一倍数;
127.根据所述比值超出预设的第二倍数的时间段个数从多到少对待比较数据表组进行排序。
128.在一个实施例中,所述获取模块,包括:
129.获取单元,用于获取全量的结构化查询语言脚本和各个数据表的表统计信息;
130.解析单元,用于根据所述全量的结构化查询语言脚本和预设的结构化查询语言解析器,得到各个数据表对应的表连接关系信息。
131.本说明书提供的基于均衡负载的分库装置的实施例具体可以用于执行上述基于均衡负载的分库方法的实施例的处理流程,其功能在此不再赘述,可以参照上述基于均衡负载的分库方法实施例的详细描述。
132.为了进一步说明本方案,如图7所示,本技术提供一种基于均衡负载的分库装置的应用实例,具体描述如下:
133.分库分表均衡负载系统10,作为分库分表均衡负载统计的发起方,以及对整个流程的管控。
134.应用服务器20,核心程序均在此服务器上运行。分库分表均衡负载系统和应用服务器结合实现的功能可以相当于上述基于均衡负载的分库装置实现的功能。
135.应用数据库30,存放应用程序所有表的信息,包括需要的表统计信息。
136.系统数据库40,存放采集到的数据,用于后续的数据统计。应用数据库和系统数据库可以部署在应用服务器中,也可以部署在不同的独立服务器中。
137.注入程序50,由分库分表均衡负载系统下发到应用服务器上的程序,里面包含了所有核心内容。
138.注入程序中的采集数据模块60,该模块用于定时采集应用数据库上所有表统计的信息,主要是各个表读和写的行数。然后将采集信息写入到系统数据库上。当采集完成后唤醒数据统计模块。
139.注入程序中的数据统计模块70,根据收集的信息进行分析统计,最终分析出各个表在不同数据库实例的分布情况,尽可能达到负载均衡。
140.注入程序中的采集sql模块80,从应用程序的jvm中获取configuration对象,可通过该对象得到全量sql,将sql存入到系统数据库。
141.应用程序jvm90,运行着应用程序的逻辑,并存储了所有sql信息。
142.为了进一步说明本方案,结合上述应用实例中的基于均衡负载的分库装置,如图8所示,本技术提供一种基于均衡负载的分库方法的应用实例,具体描述如下:
143.步骤s11,分库分表均衡负载系统将注入程序注入到应用服务器;即,在分库分表均衡负载系统中输入应用服务器连接信息、应用数据库连接信息、采集时长、均衡负载的数据库实例个数等信息后,将注入程序注入到应用服务器上。
144.步骤s12,注入程序中的sql采集模块将采集程序注入应用程序的jvm中,jvm中含有应用全量的sql信息。
145.步骤s13,获取mybatis的configuration对象的全量sql。
146.步骤s14,根据采集的sql,统计哪些表存在表连接关系;即,根据步骤s13获取的sql,可以统计到哪些表会存在表连接关系。存在表连接关系的表不能分配到不同的数据库实例,否则会影响分库分表后的sql执行。
147.步骤s15,将统计到的表连接关系存入系统数据库;即,将步骤s14统计到的所有表连接关系存入分库分表均衡负载系统数据库中,便于数据统计模块获取。
148.步骤s16,注入程序中的数据采集模块定时采集应用数据库的表统计信息,表中统计有表的更新行数(增删改)和查询行数。
149.步骤s17,将当前时间点采集到的表统计信息存入系统数据库;即,将步骤s16每个时间节点采集的信息都存入系统数据库,便于数据统计模块获取。
150.步骤s18,判断是否超出采集截止时间;即,判断是否需要继续采集表统计信息,若超出采集截止时间,跳出采集循环。
151.步骤s19,注入程序的数据统计模块从系统数据库获取采集的表连接关系和表统计信息数据;即,采集表统计信息结束后,唤醒注入程序中的数据统计模块,该模块首先获取前面采集到的表连接关系和表统计信息数据。
152.步骤s110,利用步骤s19获取到的信息,通过均衡负载算法,得到表在指定数据库实例个数的分布情况。
153.步骤s111,将结果返回分库分表均衡负载系统;即,将步骤s110分析出的结果返回给分库分表均衡负载系统,用于展现分析的结果。
154.具体地,如图9所示,应用均衡负载算法的过程具体包含有:
155.步骤s21,根据表连接关系进行分组groupi;即,由于存在表连接关系的表不能分配到不同的数据库实例中,所以需要先将存在表连接关系的表分到同一个组中,其他独立的表自成一组。最终形成多个组(group1,group2,..,groupi)。判断组数是否超出需要分配到数据库实例的数量n,若是,则执行步骤s22,否则,执行步骤s211。
156.步骤s22,统计每个组每个时间段的更新行数groupi_uj和查询行数groupi_sj;即,后时间点的表统计信息减去前时间点的表统计信息,可得到该时间段的更新行数和查询行数,可通过这个方法算出每个组每个时间段的更新行数groupi_uj和查询行数groupi_sj。
157.步骤s23,统计平均每个时间段的更新行数avg_ui和查询行数avg_si;即,可根据步骤s22统计的信息和时间段的个数算出平均每个时间段的更新行数avg_ui和查询行数avg_si。
158.步骤s24,统计每个组的groupi_out2avg、groupi_out1.5avg和groupi_out1avg;即,根据超出平均值2倍groupi_out2avg、1.5倍groupi_out1.5avg、1倍groupi_out1avg的时间段的个数(包括更新和查询)来衡量负载情况。
159.步骤s25,依次利用groupi_out2avg、groupi_out1.5avg、groupi_out1avg对各个组进行排序;即,超出平均值2倍的时间段个数比较多,证明存在某些时间段负载比较大,优先比较,若相等,再比较1.5倍和1倍的情况。最终给各个组进行排序。
160.步骤s26,将前n个组依次分配到n个数据库实例(result1,result2,...,resultn)。判断k≤group_num(k从n+1开始取值),若是,则执行步骤s27,否则执行步骤s211。
161.步骤s27,排序的第k个组分别与result1,result2,...,resultn对应每个时间段的更新行数和查询行数相加tmpn_uj=groupk_uj+resultn_uj,tmpn_sj=groupk_sj+resultn_sj;即,剩下没有分布到数据库实例中的组依次分析要分配到哪个数据库实例。该组分别与result1,result2,...,resultn,对应的时间段的更新行数和查询行数相加,得到新的每个时间段tmpn_uj的更新行数和查询行数tmp_sj。
162.步骤s28,统计tmp1,tmp2,...,tmpn的tmpn_out2avg、tmpn_out1.5avg和tmpn_out1avg;即,根据tmpn_uj和tmp_sj,统计出超出平均值2倍tmpn_out2avg、1.5倍tmpn_
out1.5avg、1倍tmpn_out1avg的时间段的个数。
163.步骤s29,依次比较tmpn_out2avg、tmpn_out1.5avg、tmpn_out1avg,找出最小值所在数据库实例resultn;即,依次比较出平均值2倍tmpn_out2avg、1.5倍tmpn_out1.5avg、1倍tmpn_out1avg的时间段的个数,得到最小值,从而得到最小值所在数据库实例resultn。
164.步骤s210,将groupk分布到resultn,resultn=result+groupk;即将该组加到步骤s29找出的resultn中。k=k+1,再次判断k≤group_num(k从n+1开始取值),若是,则执行步骤s27,否则执行步骤s211。
165.步骤s211,所有的组都分配完后,输出表分布情况result1,result2,...,resultn。
166.从硬件层面来说,为了提高数据表分库的自动化程度和准确性,进而缓解数据库的读写压力,本技术提供一种用于实现所述基于均衡负载的分库方法中的全部或部分内容的电子设备的实施例所述电子设备具体包含有如下内容:
167.处理器(processor)、存储器(memory)、通信接口(communications interface)和总线;其中,所述处理器、存储器、通信接口通过所述总线完成相互间的通信;所述通信接口用于实现所述基于均衡负载的分库装置以及用户终端等相关设备之间的信息传输;该电子设备可以是台式计算机、平板电脑及移动终端等,本实施例不限于此。在本实施例中,该电子设备可以参照实施例用于实现所述基于均衡负载的分库方法的实施例及用于实现所述基于均衡负载的分库装置的实施例进行实施,其内容被合并于此,重复之处不再赘述。
168.图10为本技术实施例的电子设备9600的系统构成的示意框图。如图10所示,该电子设备9600可以包括中央处理器9100和存储器9140;存储器9140耦合到中央处理器9100。值得注意的是,该图10是示例性的;还可以使用其他类型的结构,来补充或代替该结构,以实现电信功能或其他功能。
169.在本技术一个或多个实施例中,基于均衡负载的分库功能可以被集成到中央处理器9100中。其中,中央处理器9100可以被配置为进行如下控制:
170.步骤100:获取多个数据表对应的表统计信息和表连接关系信息。
171.步骤200:基于各个数据表的表统计信息和表连接关系信息进行负载均衡处理,确定各个数据表各自对应的数据库实例并将各个数据表分配至各自对应的数据库实例,完成各个数据表的分库。
172.从上述描述可知,本技术的实施例提供的电子设备,能够提高数据表分库的自动化程度和准确性,进而缓解数据库的读写压力。
173.在另一个实施方式中,基于均衡负载的分库装置可以与中央处理器9100分开配置,例如可以将基于均衡负载的分库装置配置为与中央处理器9100连接的芯片,通过中央处理器的控制来实现基于均衡负载的分库功能。
174.如图10所示,该电子设备9600还可以包括:通信模块9110、输入单元9120、音频处理器9130、显示器9160、电源9170。值得注意的是,电子设备9600也并不是必须要包括图10中所示的所有部件;此外,电子设备9600还可以包括图10中没有示出的部件,可以参考现有技术。
175.如图10所示,中央处理器9100有时也称为控制器或操作控件,可以包括微处理器或其他处理器装置和/或逻辑装置,该中央处理器9100接收输入并控制电子设备9600的各
个部件的操作。
176.其中,存储器9140,例如可以是缓存器、闪存、硬驱、可移动介质、易失性存储器、非易失性存储器或其它合适装置中的一种或更多种。可储存上述与失败有关的信息,此外还可存储执行有关信息的程序。并且中央处理器9100可执行该存储器9140存储的该程序,以实现信息存储或处理等。
177.输入单元9120向中央处理器9100提供输入。该输入单元9120例如为按键或触摸输入装置。电源9170用于向电子设备9600提供电力。显示器9160用于进行图像和文字等显示对象的显示。该显示器例如可为lcd显示器,但并不限于此。
178.该存储器9140可以是固态存储器,例如,只读存储器(rom)、随机存取存储器(ram)、sim卡等。还可以是这样的存储器,其即使在断电时也保存信息,可被选择性地擦除且设有更多数据,该存储器的示例有时被称为eprom等。存储器9140还可以是某种其它类型的装置。存储器9140包括缓冲存储器9141(有时被称为缓冲器)。存储器9140可以包括应用/功能存储部9142,该应用/功能存储部9142用于存储应用程序和功能程序或用于通过中央处理器9100执行电子设备9600的操作的流程。
179.存储器9140还可以包括数据存储部9143,该数据存储部9143用于存储数据,例如联系人、数字数据、图片、声音和/或任何其他由电子设备使用的数据。存储器9140的驱动程序存储部9144可以包括电子设备的用于通信功能和/或用于执行电子设备的其他功能(如消息传送应用、通讯录应用等)的各种驱动程序。
180.通信模块9110即为经由天线9111发送和接收信号的发送机/接收机9110。通信模块(发送机/接收机)9110耦合到中央处理器9100,以提供输入信号和接收输出信号,这可以和常规移动通信终端的情况相同。
181.基于不同的通信技术,在同一电子设备中,可以设置有多个通信模块9110,如蜂窝网络模块、蓝牙模块和/或无线局域网模块等。通信模块(发送机/接收机)9110还经由音频处理器9130耦合到扬声器9131和麦克风9132,以经由扬声器9131提供音频输出,并接收来自麦克风9132的音频输入,从而实现通常的电信功能。音频处理器9130可以包括任何合适的缓冲器、解码器、放大器等。另外,音频处理器9130还耦合到中央处理器9100,从而使得可以通过麦克风9132能够在本机上录音,且使得可以通过扬声器9131来播放本机上存储的声音。
182.上述描述可知,本技术的实施例提供的电子设备,能够提高数据表分库的自动化程度和准确性,进而缓解数据库的读写压力。
183.本技术的实施例还提供能够实现上述实施例中的基于均衡负载的分库方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的基于均衡负载的分库方法的全部步骤,例如,所述处理器执行所述计算机程序时实现下述步骤:
184.步骤100:获取多个数据表对应的表统计信息和表连接关系信息。
185.步骤200:基于各个数据表的表统计信息和表连接关系信息进行负载均衡处理,确定各个数据表各自对应的数据库实例并将各个数据表分配至各自对应的数据库实例,完成各个数据表的分库。
186.从上述描述可知,本技术实施例提供的计算机可读存储介质,能够提高数据表分
库的自动化程度和准确性,进而缓解数据库的读写压力。
187.本技术中上述方法的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。相关之处参见方法实施例的部分说明即可。
188.本领域内的技术人员应明白,本技术的实施例可提供为方法、系统、或计算机程序产品。因此,本技术可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本技术可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
189.本技术是参照根据本技术实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
190.这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
191.这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
192.本技术中应用了具体实施例对本技术的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本技术的方法及其核心思想;同时,对于本领域的一般技术人员,依据本技术的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本技术的限制。

技术特征:
1.一种基于均衡负载的分库方法,其特征在于,包括:获取多个数据表对应的表统计信息和表连接关系信息;基于各个数据表的表统计信息和表连接关系信息进行负载均衡处理,确定各个数据表各自对应的数据库实例并将各个数据表分配至各自对应的数据库实例,完成各个数据表的分库。2.根据权利要求1所述的基于均衡负载的分库方法,其特征在于,所述基于各个数据表的表统计信息和表连接关系信息进行负载均衡处理,确定各个数据表各自对应的数据库实例并将各个数据表分配至各自对应的数据库实例,包括:根据各个数据表的表连接关系信息,将各个数据表划分多组数据表组,每组数据表组包括:存在表连接关系的多个数据表或者不存在表连接关系的唯一的数据表;判断所述数据表组的组数是否小于等于数据库实例个数,若是,则将各个数据表组分配至不同的数据库实例。3.根据权利要求2所述的基于均衡负载的分库方法,其特征在于,还包括:若所述数据表组的组数大于数据库实例个数,则根据各个数据表的表统计信息中在多个时间段的更新行数,得到各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数;根据各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数对数据表组进行排序,将排序后的数据表组从首位开始依次分配至各个数据库实例中;将未分配数据库实例的数据表组分别与各个已分配数据库实例的数据表组合并,得到合并后的数据表组;根据各个时间段的平均更新行数和所述合并后的数据表组在各个时间段的更新行数,确定所述未分配数据库实例的数据表组对应的数据库实例并将其分配至该数据库实例,完成各个数据表的分库。4.根据权利要求3所述的基于均衡负载的分库方法,其特征在于,所述根据各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数对数据表组进行排序,包括:根据各个时间段的平均更新行数和每组数据表组在各个时间段的更新行数,确定各个时间段内该组数据表组的更新行数与对应的平均更新行数的比值,统计所述比值大于预设的第一倍数的目标时间段个数;根据每组数据表组的目标时间段个数从多到少对数据表组进行排序。5.根据权利要求3所述的基于均衡负载的分库方法,其特征在于,所述根据各个时间段的平均更新行数和所述合并后的数据表组在各个时间段的更新行数,确定所述未分配数据库实例的数据表组对应的数据库实例并将其分配至该数据库实例,完成各个数据表的分库,包括:根据各个时间段的平均更新行数和所述合并后的数据表组在各个时间段的更新行数,确定各个时间段内该合并后的数据表组的更新行数与对应的平均更新行数的比值,统计所述比值大于预设的第一倍数的目标时间段个数;将各个合并后的数据表组中目标时间段个数最少的,确定为目标数据表组,将所述未分配数据库实例的数据表组分配至所述目标数据表组中已分配数据库实例的数据表组所在的数据库实例,完成各个数据表的分库。
6.根据权利要求4所述的基于均衡负载的分库方法,其特征在于,所述根据每组数据表组的目标时间段个数从多到少对数据表组进行排序,还包括:若存在目标时间段个数相同的多组待比较数据表组,则统计每组待比较数据表组对应的所述比值超出预设的第二倍数的时间段个数,所述预设的第二倍数小于预设的第一倍数;根据所述比值超出预设的第二倍数的时间段个数从多到少对待比较数据表组进行排序。7.根据权利要求1所述的基于均衡负载的分库方法,其特征在于,所述获取多个数据表对应的表统计信息和表连接关系信息,包括:获取全量的结构化查询语言脚本和各个数据表的表统计信息;根据所述全量的结构化查询语言脚本和预设的结构化查询语言解析器,得到各个数据表对应的表连接关系信息。8.一种基于均衡负载的分库装置,其特征在于,包括:获取模块,用于获取多个数据表对应的表统计信息和表连接关系信息;分库模块,用于基于各个数据表的表统计信息和表连接关系信息进行负载均衡处理,确定各个数据表各自对应的数据库实例并将各个数据表分配至各自对应的数据库实例,完成各个数据表的分库。9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至7任一项所述的基于均衡负载的分库方法。10.一种计算机可读存储介质,其上存储有计算机指令,其特征在于,所述指令被执行时实现权利要求1至7任一项所述的基于均衡负载的分库方法。

技术总结
本申请提供了一种基于均衡负载的分库方法及装置,可用于金融领域或其他领域,该方法包括:获取多个数据表对应的表统计信息和表连接关系信息;基于各个数据表的表统计信息和表连接关系信息进行负载均衡处理,确定各个数据表各自对应的数据库实例并将各个数据表分配至各自对应的数据库实例,完成各个数据表的分库。本申请能够提高数据表分库的自动化程度和准确性,进而能够缓解数据库的读写压力。进而能够缓解数据库的读写压力。进而能够缓解数据库的读写压力。


技术研发人员:卢智彬 容达锋 苏健涛 汤仲淳
受保护的技术使用者:中国工商银行股份有限公司
技术研发日:2023.04.19
技术公布日:2023/7/18
版权声明

本文仅代表作者观点,不代表航家之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

航空之家 https://www.aerohome.com.cn/

飞机超市 https://mall.aerohome.com.cn/

航空资讯 https://news.aerohome.com.cn/

分享:

扫一扫在手机阅读、分享本文

相关推荐