一种MySQL表空间下租户自动更新的方法及装置与流程

专利查询5月前  47


一种mysql表空间下租户自动更新的方法及装置
技术领域
1.本发明涉及大数据技术领域,可应用于保险领域,尤其是一种mysql表空间下租户自动更新的方法及装置。


背景技术:

2.企业服务门户是为不同企业客户提供公司端业务数据的经办管理系统,主要业务涉及补充医疗基金、员工福利情况、健康管理数据和企业年金数据等。
3.在系统层,以单系统实例为不同企业提供可定制化的服务,构成一个多租户的运行环境,每个企业相当于一个租户,每个租户可根据需求对租用的系统,或者表空间进行个性化配置,也可以使用运营方提供的统一配置,该技术可以实现多个租户之间共享系统实例,同时又可以实现租户系统实例的个性化定制,保证系统共性的部分被共享,个性的部分被单独隔离。
4.在存储层,通常使用的底层库是mysql,可以实现租户表空间之间隔离,保证了用户信息的安全性与隐私性,因为在表空间池中,运行了若干租户对应的表空间,每一个表空间关联了若干业务,其中,如果想对某一个业务进行更新时,需要获取关联该业务的表空间,并单独对每一个关联该业务的表空间进行更新,随之而来的问题是,当表空间池中租户过多时,更新业务的时间成本和人力成本高。


技术实现要素:

5.针对现有技术的上述问题,本文的目的在于,提供一种mysql表空间下租户自动更新的方法及装置,以解决现有技术中由于mysql表空间数据隔离,导致更新业务时,需要单独对每一个业务,或者关联该业务的表空间进行单独更新的技术问题,本文的具体技术方案如下:
6.一方面,本文提供一种mysql表空间下租户自动更新的方法,包括:
7.确定每种业务的mysql脚本的最大更新序号;
8.对于每种业务,扫描mysql表空间池内关联该业务的租户表空间,并对关联该业务的租户表空间执行mysql脚本更新;
9.判断每种业务的mysql脚本的当前执行序号与所述最大更新序号是否相同;
10.若相同,则确认该业务的mysql脚本更新完成;
11.其中,所述当前执行序号根据所述mysql表空间池执行该业务的mysql脚本升级次数确定。
12.作为本文的一个实施例,所述判断每种业务的mysql脚本的当前执行序号与所述最大更新序号是否相同,进一步包括:
13.若不相同,则获取当前执行序号与所述最大更新序号之间的关联该业务的租户表空间序号;
14.对所述租户表空间序号对应的租户表空间顺序执行mysql脚本更新。
15.作为本文的一个实施例,在所述确定每种业务的mysql脚本的最大更新序号之前,进一步包括:
16.定时监听所述mysql表空间池内空闲表空间的数量;
17.当所述空闲表空间的数量小于空闲阈值时,启动空间创建线程创建空闲表空间;
18.若所述空闲表空间的数量大于所述空闲阈值时,获取最新的mysql脚本。
19.作为本文的一个实施例,所述对关联该业务的租户表空间执行mysql脚本更新,进一步包括:
20.当关联该业务的租户表空间的mysql脚本更新成功时,在事务文件中变更该租户表空间更新后mysql脚本对应的索引;
21.当关联该业务的租户表空间的mysql脚本更新失败时,将所述事务文件回滚至更前的状态,并对所述租户表空间对应的下一个租户表空间执行mysql脚本更新;
22.其中,所述事务文件根据该业务的业务类型创建。
23.作为本文的一个实施例,所述方法还包括:
24.对单个租户表空间执行不同业务的mysql脚本更新时,使用单线程执行;
25.对多个租户表空间执行不同业务的mysql脚本更新时,使用多线程并行执行;
26.其中,线程数量小于租户表空间数量。
27.作为本文的一个实施例,所述对多个租户表空间执行不同业务的mysql脚本更新时,使用多线程并行执行,进一步包括:
28.使用排序算法对所述mysql表空间池内的租户进行排序;
29.根据排序结果,对所述mysql表空间池内的租户表空间执行多线程mysql脚本更新。
30.作为本文的一个实施例,所述方法还包括:
31.若一个业务为通用业务,则获取所述mysql表空间池内的租户表空间数量;
32.根据所述租户表空间数量依次对所述mysql表空间池内的租户表空间执行mysql脚本更新。
33.另一方面,本文还提供一种mysql表空间下租户自动更新的装置,包括:
34.序号确定单元,用于确定每种业务的mysql脚本的最大更新序号;
35.脚本执行单元,用于对于每种业务,扫描mysql表空间池内关联该业务的租户表空间,并对关联该业务的租户表空间执行mysql脚本更新;
36.序号判断单元,用于判断每种业务的mysql脚本的当前执行序号与所述最大更新序号是否相同;
37.指示发送单元,用于在当前执行序号与所述最大更新序号相同的情况下,发送该业务的mysql脚本升级完成指示;
38.其中,所述当前执行序号根据所述mysql表空间池执行该业务的mysql脚本升级次数确定。
39.另一方面,本文还提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现任意一项所述的mysql表空间下租户自动更新的方法。
40.另一方面,本文还提供一种计算机可读存储介质,所述计算机可读存储介质存储
有计算机程序,所述计算机程序被处理器执行时实现任意一项所述的mysql表空间下租户自动更新的方法。
41.采用上述技术方案,本文通过确定mysql表空间池中所有租户表空间的相同的业务,对该业务的mysql脚本进行统一升级,解决了在mysql表空间池下由于表空间数据隔离,需要单独对每一个租户关联的所有业务进行单独升级的问题,降低了mysql表空间池的开发运维成本,显著提高了多租户升级的可靠性和实效性。
42.为让本文的上述和其他目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附图式,作详细说明如下。
附图说明
43.为了更清楚地说明本文实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本文的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
44.图1示出了本文实施例一种mysql表空间下租户自动更新的整体系统图;
45.图2示出了本文实施例一种mysql表空间下租户自动更新的方法的步骤示意图;
46.图3示出了本文实施例一种mysql表空间下租户自动更新的方法的断点续传示意图;
47.图4示出了本文实施例一种mysql表空间下租户自动更新的装置示意图;
48.图5示出了本文实施例一种mysql表空间下租户自动更新的装置的详细示意图;
49.图6示出了本文实施例一种mysql表空间下租户自动更新的装置的算法单元示意图;
50.图7示出了本文实施例一种mysql表空间下租户自动更新的整体系统的数据流程图;
51.图8示出了本文实施例一种计算机设备示意图。
52.附图符号说明:
53.101、控制终端;
54.102、更新引擎;
55.103、数据库;
56.401、序号确定单元;
57.402、脚本执行单元;
58.403、序号判断单元;
59.404、指示发送单元;
60.501、监听单元;
61.502、线程启动单元;
62.503、脚本获取单元;
63.601、算法单元;
64.802、计算机设备;
65.804、处理器;
66.806、存储器;
67.808、驱动机构;
68.810、输入/输出模块;
69.812、输入设备;
70.814、输出设备;
71.816、呈现设备;
72.818、图形用户接口;
73.820、网络接口;
74.822、通信链路;
75.824、通信总线。
具体实施方式
76.下面将结合本文实施例中的附图,对本文实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本文一部分实施例,而不是全部的实施例。基于本文中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文保护的范围。
77.需要说明的是,本文的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本文的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、装置、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
78.需要说明的是,本技术所涉及的数据(包括但不限于用于分析的数据、存储的数据、展示的数据等),均为经用户授权或者经过各方充分授权的信息和数据。
79.企业服务门户作为企业服务系统的一种,主要涉及对企业租户提供b端服务,为租户提供的主要业务包括补充医疗基金、员工福利情况信息、员工健康管理信息和企业年金等。
80.由于金融保险类应用涉及到高风险和高安全性的要求,所以在存储各个租户的数据时,需要在数据库中创建独立的表空间来进行数据的隔离,因为一个租户可能购买了若干种业务,当某一类的业务升级时,需要运维人员去查询企业服务门户的后台数据,将购买了该业务的租户查询出来,并在数据库中确定购买了该业务的租户对应的表空间,每一个购买了业务的租户,其在数据库中的租户表空间和购买的业务之间即产生了关联,然后,对每一个关联了该业务的表空间单独进行更新,当企业服务门户中租户较少时,的确可以通过这种单独维护升级的方式进行更新,但是当企业服务门户中租户较多,达到几千上万时,显然这种单独维护更新的方式效率不高,十分消耗人力物力。
81.通过上述分析得出,在运维企业服务门户时,单独对每一个租户表空间进行维护时,对于少量租户购买企业服务门户产品时,是容易做到的。
82.但是当大量的租户购买企业服务门户产品时,当业务更新时,单独的进行租户表
空间维护是十分困难且效率低下的。
83.所以需要一种方法,可以获取到企业服务门户对应的mysql表空间池内所有的业务的信息,并可以根据该信息,遍历的对关联该业务的所有租户表空间执行更新操作。
84.需要说明的是,本文采用的更新方式是使用mysql脚本执行某种业务的更新,在该业务的路径中的对应位置,用新版本的mysql脚本替换掉旧版本的mysql脚本,用同样的方式,还可以将restful接口或者java类写入到mysql脚本中,或者与mysql脚本协同、关联执行业务的升级、更新或者降级,例如使用mysql脚本和restful接口可以实现调用企业服务门户之外的数据,重定向到企业服务门户内,并将这些数据导入到租户表空间内,实现业务的更新。
85.如图1所示一种mysql表空间下租户自动更新的整体系统图,包括:控制终端101、更新引擎102和数据库103;
86.需要说明的是mysql表空间为虚拟的空间,相当于一个容器,而租户在购买了本文的企业服务门户产品时,即可将该该租户与mysql表空间建立对应关系,当在运维人员对租户购买的产品或者业务进行运维时,相当于对租户购买的mysql表空间中的业务进行运维,而为了方便说明,将租户购买的mysql表空间简称为租户表空间。
87.控制终端101可以实现新租户的生成,例如当有企业购买企业服务门户的服务时,可以通过控制终端101输入企业相关的信息,当输入完成后,控制终端101向数据库103发送指令,数据库103将企业信息与空闲表空间进行关联,并向更新引擎102调用若干mysql脚本,通过这种方式,启动空闲表空间,并对该租户进行服务。
88.控制终端101还可以实现mysql脚本的生成,例如企业服务门户的运维人员需要对某种业务进行更新时,根据更新要求在控制终端101书写完成mysql脚本后,暂存在更新引擎102中,因为运维人员可能在一天内对若干种业务进行更新,所以更新引擎102中可以暂存若干mysql脚本,当到达预设的时间时,更新引擎102释放所有的mysql脚本,并对应的发送至企业服务门户对应的mysql表空间池,即数据库103,需要说明的是,mysql表空间池作为虚拟的数据库103,其可能是由若干组服务器创建的,也可以是一台服务器创建的,本文对于mysql表空间池的实际载体不做限定。
89.在企业服务门户中,存在一些需要租户付费购买的业务,也存在一些必须的通用业务,也就是说租户不需要付费也可以享受,且这些基础项目会影响到租户的信息安全,或者是一些必不可少的基础文件时,当需要对通用业务更新时,需要对企业服务门户内的所有租户进行更新,无论客户是否知晓,都需要在后台遍历执行。
90.通过上述整体系统,可以实现生成mysql脚本,并可以实现企业服务门户的新用户创建,在更新通用业务时,可以对企业服务门户所有的租户的mysql表空间进行更新,在更新某种类型的业务时,可以统一对关联该业务的mysql表空间进行更新,大大提升了运维效率,降低了人工成本。
91.在进行mysql表空间池内业务更新时,受到mysql作为底层逻辑需要进行数据隔离的影响,在进行业务更新时,需要单独对关联该业务的每一个租户表空间进行更新,费事费力,且容易出错,极大的影响了业务更新的效率。
92.为了解决上述问题,本文实施例提供了一种mysql表空间下租户自动更新的方法,能够对关联某一业务的所有租户表空间进行统一更新,提升了更新的效率,且不易出错。
93.图2是本文实施例提供的一种mysql表空间下租户自动更新的方法的步骤示意图,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或装置产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行。具体的如图2所示,所述方法可以包括:
94.步骤201、确定每种业务的mysql脚本的最大更新序号。
95.步骤202、对于每种业务,扫描mysql表空间池内关联该业务的租户表空间,并对关联该业务的租户表空间执行mysql脚本更新。
96.步骤203、判断每种业务的mysql脚本的当前执行序号与所述最大更新序号是否相同。
97.步骤204、若相同,则确认该业务的mysql脚本更新完成。
98.通过上述方法,根据最大更新序号实现了获取mysql表空间池内关联某一业务的所有租户表空间,并根据最大更新序号和最大执行序号的对照关系,遍历执行mysql脚本更新,提升了mysql表空间池内业务升级的效率。
99.需要说明的是,在本文中,最大更新序号在生成该mysql脚本已经被运维人员输入至mysql脚本的某些字段里,运维人员通过查询控制终端101中待更新业务关联的mysql表空间,便可得到最大更新序号,且不同种类业务的最大更新序号可以是不相同的,通过最大更新序号,可以得知该mysql脚本需要对多少个租户表空间进行更新。
100.扫描关联某业务的租户表空间可以通过更新引擎102完成,当更新引擎102完成扫描后,将扫描信息发送至控制终端101,这样就获取到目标租户表空间,然后对扫描得到的所有租户表空间都执行mysql脚本更新。
101.在执行对所有的目标租户表空间mysql脚本更新时,为了确保可以对所有的目标租户表空间进行更新,且不重不落,所以需要确定该业务的mysql脚本是否执行完成,前执行序号根据所述mysql表空间池执行该业务的mysql脚本更新次数确定,当mysql表空间池的租户表空间执行一次mysql脚本更新时,将当前执行序号自增至1,当执行到第二个租户表空间的mysql脚本升级时,将当前执行序号自增至2,通过不断执行mysql脚本升级,便可不断的自增当前执行序号。
102.在当前执行序号与最大更新序号相同的情况下,该业务更新完成,若出现当前执行序号大于最大更新序号的情况,则说明有租户表空间重复的执行了mysql脚本更新,但是因为该mysql脚本为最新版本,所以对于业务的运行是不会产生影响的,但是当出现当前执行序号小于最大更新序号的情况,说明了有至少一个租户表空间未执行mysql脚本更新,因为该租户表空间未执行mysql脚本更新,所以该租户的业务版本落后,可能会导致出现业务使用异常,引起严重的后果。
103.作为本文的一个实施例,步骤203确判断每种业务的mysql脚本的当前执行序号与所述最大更新序号是否相同,进一步包括:
104.若不相同,则获取当前执行序号与最大更新序号之间的关联该业务的租户表空间序号。
105.对所述租户表空间序号对应的租户表空间顺序执行mysql脚本更新。
106.在本步骤中,为了解决存在租户表空间的业务的版本落后,可能引起重大经济损
失,或者安全异常的问题,提出了解决方案。
107.本文的对于租户表空间的mysql脚本的更新是存在规律的,当出现当前执行序号小于最大更新序号的情况,获取当前的mysql脚本更新的执行数据,或者mysql脚本更新的现场数据,计算当前的租户表空间序号与最大执行序号的差值,例如最大更新序号为100,而当前执行序号为70,显然在70-100之间存在未执行mysql脚本更新的租户表空间,例如租户表空间序号为88和99的租户表空间也关联了该业务,那么就按照由小到大的顺序,依次对租户表空间序号88、99和100的租户表空间执行mysql脚本更新。
108.作为本文的一个实施例,步骤201确定每种业务的mysql脚本的最大更新序号之前,进一步包括:
109.定时监听mysql表空间池内空闲表空间的数量。
110.当空闲表空间的数量小于空闲阈值时,启动空间创建线程创建空闲表空间。
111.若空闲表空间的数量大于所述空闲阈值时,获取最新的mysql脚本。
112.为了保证企业服务门户的正常运行,可以接纳新租户,或者在更改租户的租户表空间时,亦或者进行数据冗余备份的情况下,租户表空间对应的mysql表空间池不会因为突然的负载而产生超出运行负荷而崩溃,本文需要根据租户表空间的数量预留出来若干空闲表空间,需要说明的是,该空闲表空间仅仅为未被写入数据的虚拟空间,或者是可以建立企业信息和表空间对应关系的虚拟空间,并不是不可以运行,或者在接收指令无法响应的空间,该空闲表空间可以是已经运行有通用业务,但是并未购买付费业务的虚拟空间,也可以是通用业务和付费业务都未运行的虚拟空间。
113.所以在进行业务更新时,需要优先确保mysql表空间池的正常运行,当mysql表空间池内的空闲数量无法达到预设的空闲阈值时,暂停当前的更新请求,将mysql脚本搁置,启动mysql表空间池内专门的空间创建线程,创建空闲表空间,当创建完成空闲表空间后,空闲表空间数量大于空闲阈值,才可以向mysql表空间池发送最新的mysql脚本。
114.需要说明的是,空闲阈值是用户设定,可以是固定值,例如10个,也可以是以mysql表空间池内mysql表空间数量为基础,将空闲阈值设定为占比mysql表空间数量,例如mysql表空间数量为1000,空闲阈值为mysql表空间数量的10%,即100个,本文对空闲阈值的预设方式不做限定,本领域技术人员可以根据需要自行设定。
115.需要说明的是,mysql表空间池运行于数据库103上,可以将数据库103作为一块服务器,当空间创建线程创建空闲表空间时,可以是空间创建线程向数据库103发送指令,将未上电的硬盘进行上电,激活成为空闲表空间,也可以通过逻辑上的将某些数据的运行空间划分到mysql表空间池下的方式,实现创建空闲表空间。
116.作为本文的一个实施例,如图3所示一种mysql表空间下租户自动更新的方法的断点续传示意图,步骤202对关联该业务的租户表空间执行mysql脚本更新,进一步包括:
117.步骤301、当关联该业务的租户表空间的mysql脚本更新成功时,在事务文件中变更该目标租户表空间更新后mysql脚本对应的索引。
118.步骤302、当关联该业务的租户表空间的mysql脚本更新失败时,将所述事务文件回滚至更前的状态,并对所述目标租户表空间对应的下一个租户表空间执行mysql脚本更新。
119.需要说明的是,所述事务文件根据该业务的业务类型创建。
120.在本步骤中,为了避免在执行mysql脚本更新时,由于异常现象,例如数据库103失电,或者更新引擎102的异常而引起的mysql脚本更新中断现象,导致出现业务更新失败,或者无法继续更新的问题,所提出了基于mysql的断点续传方法。
121.如表1所示一种mysql表空间下租户自动更新的方法的事务文件示意表,以某种业务a举例,在对mysql表空间池内的租户表空间进行该业务的更新时,若有1-10的表空间序号的租户表空间需要进行更新,当执行到表空间序号为1的租户表空间时,若执行完成,则在业务a对应的事务文件中,将空间序号为1的租户表空间的索引标志位更新为是,若在执行空间序号为2的租户表空间的mysql脚本更新时,突然出现异常,导致中断更新过程时,当处理完成异常现象,由表空间序号从大到小的顺序回滚事务文件,当查询到出现是标志位的租户表空间时,在本表1中为表空间序号为1的租户表空间,那么就在事务文件中查询表空间序号为1的租户表空间的下一个租户表空间,在本表1中是表空间序号为2的租户表空间,并由表空间序号为2的租户表空间继续执行业务a的mysql脚本更新。
122.表1
[0123][0124]
作为本文的一个实施例,所述的mysql表空间下租户自动更新的方法,还包括:
[0125]
对单个租户表空间执行不同业务的mysql脚本更新时,使用单线程执行。
[0126]
对多个租户表空间执行不同业务的mysql脚本更新时,使用多线程并行执行。
[0127]
其中,线程数量小于租户表空间数量。
[0128]
在本步骤中,为了不影响企业服务门户正常业务的运行,所以在执行mysql脚本更新过程,对于线程的调用是十分有限的,所以为了兼顾mysql脚本更新效率和企业服务门户正常运行,规定了线程调用的方式。
[0129]
因为在每个租户表空间中,都可能关联若干种不同的业务,所以为了平衡资源的利用,当一个租户同时升级两个业务时,为了方便说明,将一个线程记作第一线程,将另一个线程记作第二线程,不可以同时调用两个进程,当出现调用两个线程的情况,将第一线程的mysql脚本排序到第二线程的mysql脚本后,当第二线程的mysql脚本更新完成后,再执行后续的mysql脚本。
[0130]
在不同的租户表空间内,可以采用多线程并行执行的方式,但是需要说明的是,为了企业服务门户的正常运行,mysql脚本更新过程所占用的线程数量远远小于租户空间表数量,例如租户空间表数量为1000,而mysql脚本更新过程所占用的线程数量仅仅有10,所以需要一种优秀的方式,提升mysql脚本更新的效率。
[0131]
作为本文的一个实施例,步骤所述对多个租户表空间执行不同业务的mysql脚本更新时,使用多线程并行执行,进一步包括:
[0132]
使用排序算法对所述mysql表空间池内的租户进行排序。
[0133]
根据排序结果,对所述mysql表空间池内的租户表空间执行多线程mysql脚本更新。
[0134]
在本步骤中,可采用的排序算法可以包括mru算法,采用mru(most recently used)最近常用算法计算mysql表空间池内,使用mysql表空间池频率最高的用户,即活跃度高的用户,按照mru算法得到的结果,将租户表空间进行排序,例如第一活跃度为表空间序号为2的租户表空间,第二活跃度为表空间序号为10的租户表空间,
……
,最低活跃度为表空间序号为70的租户表空间,那么在进行多线程并行升级时,若只有两个线程,将第一活跃度的表空间序号为2的租户表空间和第二活跃度的表空间序号为10的租户表空间优先进行mysql脚本更新,最后更新最低活跃度的表空间序号为70的租户表空间。
[0135]
通过这种方式,可以令企业服务门户优先的服务器忠诚的活跃用户,避免用户的流失,提升了产品的竞争力。
[0136]
作为本文的一个实施例,所述的mysql表空间下租户自动更新的方法,所述方法还包括:
[0137]
若一个业务为通用业务,则获取所述mysql表空间池内的租户表空间数量。
[0138]
根据所述租户表空间数量依次对所述mysql表空间池内的租户表空间执行mysql脚本更新。
[0139]
在本步骤中,为了更好的服务租户,本文的企业服务门户不仅具有付费的业务,也包含了若干种免费的业务,其中免费的业务里还具有安全性业务或基础性业务,所以这些安全性业务或基础性业务可以统称为通用业务,即每一个租户表空间都关联了通用业务,当需要对通用业务进行更新时,需要获取当前mysql表空间池内所有的表空间数量,可以包含空闲表空间,也可以不包含,当获取完成后,需要对所有的租户表空间内的通用业务执行mysql脚本更新。
[0140]
作为本文的一个实施例,所述的mysql表空间下租户自动更新的方法,所述方法还包括:
[0141]
还可以根据指定租户表空间序号的mysql脚本升级对该租户表空间序号的租户表空间执行更新。
[0142]
所以本文不仅仅可以批量的对关联某一业务的租户表空间进行mysql脚本更新,还可以针对性的对特定的租户表空间进行mysql脚本更新,当然,该特定的mysql脚本是根据该租户表空间的需求进行定制化创建的。
[0143]
通过上述方法,可以实现多租户mysql表空池的自动扩容,还可以解决特定租户的特定更新需求,可以实现多租户表空间环境下,租户表空间更新时断点恢复的问题,并可以在并行执行mysql脚本更新过程中,提升更新效率,可以按照按mru算法优先更新使用频度高的租户。
[0144]
如图4所示一种mysql表空间下租户自动更新的装置示意图,包括:
[0145]
序号确定单元401,用于确定每种业务的mysql脚本的最大更新序号;
[0146]
脚本执行单元402,用于对于每种业务,扫描mysql表空间池内关联该业务的租户表空间,并对关联该业务的租户表空间执行mysql脚本更新;
[0147]
序号判断单元403,用于判断每种业务的mysql脚本的当前执行序号与所述最大更新序号是否相同;
[0148]
指示发送单元404,用于在当前执行序号与所述最大更新序号相同的情况下,发送该业务的mysql脚本更新完成指示。
[0149]
通过上述装置,可以方便快捷的确定mysql表空间池内某种业务关联的租户表空间的数量,并将其作为最大更新序号,将以往需要先确定单一的租户表空间内的关联的所有业务,并在业务更新时,对每一个关联该业务的租户表空间进行更新,并且通过该装置,还可以在确认完成那些租户表空间关联待更新业务后,遍历执行该业务,直至所有的关联该业务的租户表空间都执行更新过程。
[0150]
如图5所示一种mysql表空间下租户自动更新的装置的详细示意图,所述mysql表空间下租户自动更新的装置还包括:
[0151]
监听单元501,用于定时监听所述mysql表空间池内空闲表空间的数量。
[0152]
线程启动单元502,用于当所述空闲表空间的数量小于空闲阈值时,启动空间创建线程创建空闲表空间。
[0153]
脚本获取单元503,用于若所述空闲表空间的数量大于所述空闲阈值时,获取最新的mysql脚本。
[0154]
需要说明的是,该监听单元501预设有定时任务,例如将每天的24:00作为监听单元501的定时任务,当在每天的24:00,自动更新的装置自我唤醒,开始监听当前的空闲表空间数量,该监听单元501可以设置于更新引擎102中,当监听单元501监听完成空闲表空间数量后,将空闲表空间数量发送至线程启动单元502,并向脚本获取单元发送使能信号。
[0155]
线程启动单元502获取空闲表空间数量,并与预设的空闲阈值进行对比,若当前的空闲表空间数量小于空闲阈值,则启动空间创建线程创建空闲表空间,该空间创建线程可以与线程启动单元502绑定,且只能由线程启动单元502启动,每当空闲表空间数量大于空闲阈值时,即可向脚本获取单元503发送使能信号。
[0156]
脚本获取单元503,该单元的作用相当于防火墙,即需要同时接收到监听单元501的使能信号和线程启动单元502的使能信号时,该脚本获取单元503才可以获取外界的mysql脚本,同样采用这样的方法,防止不法人员篡改mysql表空间内的各种业务数据,避免造成大量的财务损失。
[0157]
如图6所示一种mysql表空间下租户自动更新的装置的算法单元示意图,包括:
[0158]
算法单元601,用于使用算法对对mysql表空间池内的租户进行排序。
[0159]
需要说明的是该算法可以为mru算法,将mysql表空间池内的租户进行活跃度排序,可以令租户对产品的依赖度升高,同样该算法还可以为lru算法((least recently used)最近最少使用算法,将mysql表空间池内的租户进行活跃度排序,优先升级活跃度最低的,使用频率最少的用于,可以避免用户的脱离,吸引用户增加业务。
[0160]
当算法单元601对mysql表空间池内的租户排序完成后,将排序结果发送至线程启动单元502,线程启动单元502对所述mysql表空间池内的租户表空间执行多线程mysql脚本更新。
[0161]
如图7所示一种mysql表空间下租户自动更新的整体系统的数据流程图,包括:
[0162]
步骤701、通过控制终端101写入若干mysql脚本,并发送至更新引擎102。
[0163]
步骤702、当触发定时任务时,更新引擎102判断空闲表空间是否满足空闲阈值,若不满足,则执行步骤703,若满足,则执行步骤704。
[0164]
步骤703、启动空间创建线程,创建空闲表空间,并在创建完成执行步骤704。
[0165]
步骤704、接收所有的mysql脚本,并确定该脚本对应哪种业务。
[0166]
步骤705、更新引擎102扫描数据库103内关联该业务的所有业务表空间,确定最大更新序号。
[0167]
步骤706、更新引擎102根据该最大更新序号,按规律对关联该业务的所有租户表空间执行mysql脚本更新。
[0168]
通过上述步骤,实现了mysql脚本书写和mysql脚本执行的分离,且执行mysql脚本时,可以根据mysql脚本想要更新的业务,遍历执行更新,相比于现有的单独对租户表空间更新,大大提升了更新效率。
[0169]
通过技术手段解决多租户复杂业务场景下手工运维租户表空间复杂度高易出错的问题,保证租户表空间更新的最终一致性。
[0170]
如图8所示,为本文实施例提供的一种计算机设备,所述计算机设备802可以包括一个或多个处理器804,诸如一个或多个中央处理单元(cpu),每个处理单元可以实现一个或多个硬件线程。计算机设备802还可以包括任何存储器806,其用于存储诸如代码、设置、数据等之类的任何种类的信息。非限制性的,比如,存储器806可以包括以下任一项或多种组合:任何类型的ram,任何类型的rom,闪存设备,硬盘,光盘等。更一般地,任何存储器都可以使用任何技术来存储信息。进一步地,任何存储器可以提供信息的易失性或非易失性保留。进一步地,任何存储器可以表示计算机设备802的固定或可移除部件。在一种情况下,当处理器804执行被存储在任何存储器或存储器的组合中的相关联的指令时,计算机设备802可以执行相关联指令的任一操作。计算机设备802还包括用于与任何存储器交互的一个或多个驱动机构808,诸如硬盘驱动机构、光盘驱动机构等。
[0171]
计算机设备802还可以包括输入/输出模块810(i/o),其用于接收各种输入(经由输入设备812)和用于提供各种输出(经由输出设备814))。一个具体输出机构可以包括呈现设备816和相关联的图形用户接口(gui)818。在其他实施例中,还可以不包括输入/输出模块810(i/o)、输入设备812以及输出设备814,仅作为网络中的一台计算机设备。计算机设备802还可以包括一个或多个网络接口820,其用于经由一个或多个通信链路822与其他设备交换数据。一个或多个通信总线824将上文所描述的部件耦合在一起。
[0172]
通信链路822可以以任何方式实现,例如,通过局域网、广域网(例如,因特网)、点对点连接等、或其任何组合。通信链路822可以包括由任何协议或协议组合支配的硬连线链路、无线链路、路由器、网关功能、名称服务器等的任何组合。
[0173]
对应于图2-图3中的方法,本文实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法的步骤。
[0174]
本文实施例还提供一种计算机可读指令,其中当处理器执行所述指令时,其中的程序使得处理器执行如图2-图3所示的方法。
[0175]
应理解,在本文的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本文实施例的实施过程构成任何限定。
[0176]
还应理解,在本文实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,
表示可以存在三种关系。例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0177]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本文的范围。
[0178]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0179]
在本文所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
[0180]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本文实施例方案的目的。
[0181]
另外,在本文各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0182]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本文的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本文各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0183]
本文中应用了具体实施例对本文的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本文的方法及其核心思想;同时,对于本领域的一般技术人员,依据本文的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本文的限制。

技术特征:
1.一种mysql表空间下租户自动更新的方法,其特征在于,包括:确定每种业务的mysql脚本的最大更新序号;对于每种业务,扫描mysql表空间池内关联该业务的租户表空间,并对关联该业务的租户表空间执行mysql脚本更新;判断每种业务的mysql脚本的当前执行序号与所述最大更新序号是否相同;若相同,则确认该业务的mysql脚本更新完成;其中,所述当前执行序号根据所述mysql表空间池执行该业务的mysql脚本更新次数确定。2.根据权利要求1所述的mysql表空间下租户自动更新的方法,其特征在于,所述判断每种业务的mysql脚本的当前执行序号与所述最大更新序号是否相同,进一步包括:若不相同,则获取当前执行序号与所述最大更新序号之间的关联该业务的租户表空间序号;对所述租户表空间序号对应的租户表空间顺序执行mysql脚本更新。3.根据权利要求1所述的mysql表空间下租户自动更新的方法,其特征在于,在所述确定每种业务的mysql脚本的最大更新序号之前,进一步包括:定时监听所述mysql表空间池内空闲表空间的数量;当所述空闲表空间的数量小于空闲阈值时,启动空间创建线程创建空闲表空间;若所述空闲表空间的数量大于所述空闲阈值时,获取最新的mysql脚本。4.根据权利要求1所述的mysql表空间下租户自动更新的方法,其特征在于,所述对关联该业务的租户表空间执行mysql脚本更新,进一步包括:当关联该业务的租户表空间的mysql脚本更新成功时,在事务文件中变更该租户表空间更新后mysql脚本对应的索引;当关联该业务的租户表空间的mysql脚本更新失败时,将所述事务文件回滚至更前的状态,并对所述租户表空间对应的下一个租户表空间执行mysql脚本更新;其中,所述事务文件根据该业务的业务类型创建。5.根据权利要求1所述的mysql表空间下租户自动更新的方法,其特征在于,所述方法还包括:对单个租户表空间执行不同业务的mysql脚本更新时,使用单线程执行;对多个租户表空间执行不同业务的mysql脚本更新时,使用多线程并行执行;其中,线程数量小于租户表空间数量。6.根据权利要求5所述的mysql表空间下租户自动更新的方法,其特征在于,所述对多个租户表空间执行不同业务的mysql脚本更新时,使用多线程并行执行,进一步包括:使用排序算法对所述mysql表空间池内的租户进行排序;根据排序结果,对所述mysql表空间池内的租户表空间执行多线程mysql脚本更新。7.根据权利要求1所述的mysql表空间下租户自动更新的方法,其特征在于,所述方法还包括:若一个业务为通用业务,则获取所述mysql表空间池内的租户表空间数量;根据所述租户表空间数量依次对所述mysql表空间池内的租户表空间执行mysql脚本更新。
8.一种mysql表空间下租户自动更新的装置,其特征在于,包括:序号确定单元,用于确定每种业务的mysql脚本的最大更新序号;脚本执行单元,用于对于每种业务,扫描mysql表空间池内关联该业务的租户表空间,并对关联该业务的租户表空间执行mysql脚本更新;序号判断单元,用于判断每种业务的mysql脚本的当前执行序号与所述最大更新序号是否相同;指示发送单元,用于在当前执行序号与所述最大更新序号相同的情况下,发送该业务的mysql脚本更新完成指示;其中,所述当前执行序号根据所述mysql表空间池执行该业务的mysql脚本升级次数确定。9.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1-7任意一项所述的mysql表空间下租户自动更新的方法。10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1-7任意一项所述的mysql表空间下租户自动更新的方法。

技术总结
本文提供了一种MySQL表空间下租户自动更新的方法及装置,包括:确定每种业务的MySQL脚本的最大更新序号;对于每种业务,扫描MySQL表空间池内关联该业务的租户表空间,并对关联该业务的租户表空间执行MySQL脚本更新;判断每种业务的MySQL脚本的当前执行序号与最大更新序号是否相同;若相同,则确认该业务的MySQL脚本升级完成;实现了通过确定MySQL表空间池中所有租户表空间的相同的业务,对该业务的MySQL脚本进行统一升级,解决了在MySQL表空间池下由于表空间数据隔离,需要单独对每一个租户关联的所有业务进行单独升级的问题,降低了MySQL表空间池的开发运维成本,提高了多租户升级的可靠性。升级的可靠性。升级的可靠性。


技术研发人员:史宗耀 汤泽 景娜 韩沙日拉
受保护的技术使用者:泰康养老保险股份有限公司
技术研发日:2021.11.26
技术公布日:2022/3/8

最新回复(0)