一种动态分库的实现方法与流程

专利2024-12-30  19



1.本技术属于计算机技术领域,具体涉及一种动态分库的实现方法。


背景技术:

2.随着计算机及信息技术的发展,各类信息管理系统被广泛应用,极大的提升了人们的生产生活效率,这类系统的实现中往往涉及数据库系统,以用于对应用中的业务数据进行管理。
3.而实际中,有时应用(指适用于某场景下的具体系统)的表单业务类型和数据会呈现爆炸式增长,而且业务数据表的创建是动态生成的,应用的业务数据库表数量可能会达到上万、甚至几十万,如果这个应用的数据模型是以关系型数据库的单体库来构建,系统运维将面临巨大的挑战和风险。
4.例如,当应用的并发访问量增加时,由于单体数据库与应用的连接数是个常量值,将导致应用与数据库之间的连接耗尽而引发数据库崩溃,应用服务也将不可用;再例如,当需要对这个应用数据库下所有表基于某个维度进行数据统计时,需要遍历这个库下的所有表,因占用服务器更多的资源(如内存或cpu)进行计算,而数据库服务本身将无资源可利用,将导致应用服务无法访问该数据库服务;再例如,数据库的整体备份或归档也会由此变得及其低效,不仅面临备份或归档进程的随时中断,而且造成会极大资源的浪费(如可能当前只需要备份或归档某一业务类型的数据库表),因为很难进行有选择性的数据备份或归档。
5.由此,针对应用以动态模式创建业务数据表的情况,如何避免其在业务爆发增长时由于性能瓶颈所带来的系统风险,成为了一个亟待解决的技术问题。


技术实现要素:

6.为至少在一定程度上克服相关技术中存在的问题,本技术提供一种动态分库的实现方法,具体实现了系统与多库数据源间的自动适配连接,解决了应用以动态模式创建业务数据表的情况下,如何避免其在业务爆发增长时由于性能瓶颈所带来的系统风险的技术问题。
7.为实现以上目的,本技术采用如下技术方案:
8.本技术提供一种动态分库的实现方法,该实现方法包括:
9.对系统前端创建的表单进行解析,提取表单中的业务关键字;
10.查询主库中的表库关系表,判断是否存在与所述业务关键字相对应的子库,
11.若存在,基于已存在的所述子库进行所述表单的建表操作,否则创建新库作为所述子库,并基于新建的所述子库进行所述表单的建表操作;
12.以及在进行所述表单的建表操作后,在所述表库关系表中维护所述表单与相对应子库的映射关系。
13.可选地,针对已存在的所述子库,所述进行所述表单的建表操作,具体包括:
14.适配系统与所述子库间的数据源连接通道,基于适配后的所述数据源连接通道在所述子库中创建所述表单对应的表结构信息。
15.可选地,针对新建的所述子库,所述进行所述表单的建表操作,具体包括:
16.创建系统与所述子库间的数据源连接通道,基于创建的所述数据源连接通道在所述子库中创建所述表单对应的表结构信息。
17.可选地,所述业务关键字包括创建表单的年份标识,创建表单的用户组织标识或创建表单的客户端标识。
18.可选地,针对用户在系统前端对目标表单的业务数据操作,从主库中查找所述目标表单与其对应的子库的映射关系;
19.基于查找到的映射关系,建立适配到对应子库的数据源连接通道,并基于所述数据源连接通道执行所述业务数据操作。
20.可选地,所述业务数据操作包括数据提交、数据查询、数据修改以及数据删除。
21.可选地,基于spring框架,采用工厂设计模式和适配器设计模式进行动态分库的实现。
22.本技术采用以上技术方案,至少具备以下有益效果:
23.本技术的技术方案中,对系统前端创建的表单进行解析,提取表单中的业务关键字;查询主库中的表库关系表,判断是否存在与该业务关键字相对应的子库,若存在,基于已存在的该子库进行表单的建表操作,否则创建新库作为该子库,并基于新建的该子库进行表单的建表操作;以及在进行表单的建表操作之后,在表库关系表中维护表单与相对应子库的映射关系。这种通过表单的业务关键字进行子库的隔离,并以子库方式自动进行扩库的实现方式,相比单数据库,可灵活方便完成应用业务数据的横向扩展,而且一定程度解决了应用性能瓶颈所带来的系统风险(比如单体数据库连接数的限制)。
24.本发明的其他优点、目标,和特征在某种程度上将在随后的说明书中进行阐述,并且在某种程度上,基于对下文的考察研究对本领域技术人员而言将是显而易见的,或者可以从本发明的实践中得到教导。
附图说明
25.附图用来提供对本技术的技术方案或现有技术的进一步理解,并且构成说明书的一部分。其中,表达本技术实施例的附图与本技术的实施例一起用于解释本技术的技术方案,但并不构成对本技术技术方案的限制。
26.图1为本技术一个实施例提供的动态分库的实现方法的流程示意图;
27.图2为本技术另一个实施例中表单库、表的创建过程的流程示意说明图;
28.图3为本技术一个实施例中实现表单的业务操作的流程示意说明图;
29.图4为本技术一个实施例中基于spring框架进行动态分库实现的算法逻辑示意说明图。
具体实施方式
30.为使本技术的目的、技术方案和优点更加清楚,下面将对本技术的技术方案进行详细的描述。显然,所描述的实施例仅仅是本技术一部分实施例,而不是全部的实施例。基
于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所得到的所有其它实施方式,都属于本技术所保护的范围。
31.如背景技术中所述,实际中,有时应用(指适用于某场景下的具体系统)的表单业务类型和数据会呈现爆炸式增长,而且业务数据表的创建是动态生成的,应用的业务数据库表数量可能会达到上万、甚至几十万,如果这个应用的数据模型是以关系型数据库的单体库来构建,系统运维将面临巨大的挑战和风险。
32.例如,当应用的并发访问量增加时,由于单体数据库与应用的连接数是个常量值,将导致应用与数据库之间的连接耗尽而引发数据库崩溃,应用服务也将不可用;再例如,当需要对这个应用数据库下所有表基于某个维度进行数据统计时,需要遍历这个库下的所有表,因占用服务器更多的资源(如内存或cpu)进行计算,而数据库服务本身将无资源可利用,将导致应用服务无法访问该数据库服务;再例如,数据库的整体备份或归档也会由此变得及其低效,不仅面临备份或归档进程的随时中断,而且造成会极大资源的浪费(如可能当前只需要备份或归档某一业务类型的数据库表),因为很难进行有选择性的数据备份或归档。
33.由此,针对应用以动态模式创建业务数据表的情况,如何避免其在业务爆发增长时由于性能瓶颈所带来的系统风险,成为了一个亟待解决的技术问题。
34.针对于此,为解决应用表单模型通过动态生成情景下,如何应对表单数量会存在海量增长趋势所带来的问题,本技术提供一种动态分库的实现方法,具体实现了业务横向可扩展的模式,同时也解决应用单体数据库存在的性能瓶颈。
35.如图1所示,在一实施例中,本技术提出的动态分库的实现方法,包括:
36.步骤s110,对系统前端创建的表单进行解析,提取表单中的业务关键字;
37.在本技术中业务关键字是用于数据库(子库)隔离的,基于不同的场景,这里的业务关键字包括创建表单的年份标识,创建表单的用户组织标识或创建表单的客户端标识(如不同的app),举例而言,该实施例中,业务关键字为创建表单的年份标识,该步骤中,实际实现中,用户从应用前端创建表单,并提交保存表单设计后,应用后端解析当前表单创建时间,提取年份值,以得到表单的业务关键字。
38.之后继续进行步骤s120,查询主库(主数据库)中的表库关系表,判断是否存在与业务关键字相对应的子库,本技术中的主库是相对于子库而言的,子库是用于存储管理实际的业务数据,主库是用于辅助维护管理子库的。
39.之后继续进行步骤s130,这里继续前文的举例,如提取的年份值(业务关键字)为2021,年份值对应的子库(例如db_2021)已经存在,则步骤s130中,基于已存在的子库(即db_2021)进行表单的建表操作,
40.而若提交的年份值是新的年份,如为2023(当前为2022),显然不存在该年份值对应的子库(db_2023),则步骤s130中,创建新库作为子库(即业务关键字2023所对应的子库db_2023),并基于新建的子库(db_2023)进行表单的建表操作;
41.这里再对步骤s130中建表操作进行一下说明,举例而言,步骤s130中,
42.针对已存在的该子库,进行表单的建表操作,具体包括:适配系统与子库间的数据源连接通道,基于适配的该数据源连接通道在该子库中创建表单对应的表结构信息;
43.针对新建的子库,进行表单的建表操作,具体包括:创建系统与子库间的数据源连
接通道,基于创建的该数据源连接通道在该子库中创建表单对应的表结构信息。
44.之后步骤s140,在进行步骤s130中表单的建表操作后,在主库的表库关系表中维护表单与相对应子库的映射关系,至此新表单的创建完成。
45.本技术的技术方案中,对系统前端创建的表单进行解析,提取表单中的业务关键字;查询主库中的表库关系表,判断是否存在与该业务关键字相对应的子库,若存在,基于已存在的该子库进行表单的建表操作,否则创建新库作为该子库,并基于新建的该子库进行表单的建表操作;以及在进行表单的建表操作之后,在表库关系表中维护表单与相对应子库的映射关系。这种通过表单的业务关键字进行子库的隔离,并以子库方式自动进行扩库的实现方式,相比单数据库,可灵活方便完成应用业务数据的横向扩展,而且一定程度解决了应用性能瓶颈所带来的系统风险(比如单体数据库连接数的限制)。
46.为便于理解本技术的技术方案,下面再以另一实施例对本技术的技术方案进行介绍说明。
47.该实施例中,本技术提出的动态分库的实现方法包括表单库(动态库)、表的创建以及表单的业务操作,其中,表单库、表的创建的方法流程如图2所示,其包括如下步骤:
48.1)用户从应用前端创建表单,并提交保存表单设计;
49.2)应用后端解析当前表单创建时间,提取年份值;
50.3)如果当前年份是新的年份,判断该年份值对应的库是否存在;
51.如果不存在,创建对应年份值的新库,例如db_2023,并创建应用与新库的适配数据源连接通道,在该新库下创建该表单对应的表结构信息,
52.4)最后在主库db_master的表库关系表中维护新建库与表的映射关系,至此,新库新表的创建流程完成;
53.而如果年份值对应的库已经存在,则适配应用与当前表单创建年份值对应的数据源连接通道,例如db_2022,在对应的年份库中创建该表单对应的表结构信息,
54.之后同样进行4)在主库db_master的表库关系表中维护该表与对应库的映射关系,至此,新表单的创建流程完成。
55.该实施例中,基于路由库表技术实现表单的业务操作(即动态分库的实现中表单的业务操作部分)具体如图3所示,该实施例中,基于路由库表技术实现表单的业务操作,具体包括:
56.用户从应用前端操作表单功能,针对用户在系统前端对目标表单的业务数据操作(举例而言,这里的业务数据操作包括数据提交、数据查询、数据修改以及数据删除等),从主库中查找目标表单与其对应的子库的映射关系,
57.之后基于查找到的映射关系,建立适配到对应子库的数据源连接通道,并基于该数据源连接通道执行业务数据操作(即执行与前端操作所对应的具体后台操作实现)。
58.最后,再从实际开发实现角度对本技术的技术方案进行一下说明,本技术中动态分库实现中的动态建库、建表以及动态路由库、表操作,对应用前端用户来说是透明、无感知的,但应用后端需要高度抽象、灵活、可扩展设计,既要保证应用业务的横向可发展,也要确保应用系统的灵活扩展和性能稳定。
59.在一实施例中,本技术基于spring框架,采用软件设计模式中工厂设计模式和适配器设计模式进行动态分库的实现。基于前文提到的设计准则,通过如图4所示的算法设计
完成其实现过程,其具体算法规则如下:
60.第一步,启动spring容器,在启动过程中,创建动态数据源管理工厂bean,该工厂管理多数据源bean的自动创建过程,实现多数据源的创建和使用解耦,即一次创建,可任意业务对象使用;同时方便多数据源对象的统一创建管理和维护。
61.第二步,spring容器启动过程中,完成第一步后,spring容器从主数据库db_master读取已存在多数据源信息,通过动态数据源管理工厂bean对每一个数据源动态创建一个数据源bean对象,该对象初始化时,加载对应数据源的具体配置信息,包括数据源名称、数据库驱动名称、访问数据库用户名及密码、数据库连接池参数配置信息;
62.第三步,用户创建表单,判断该表单创建时间的年份是否为新的年份,如果是新年份,创建新库数据源bean;如果仍然是当前年份,通过动态数据源适配器adaptor路由至对应的数据源,并执行步骤六;
63.第四步,通过动态数据源适配器adaptor加载新库数据源bean,建立与数据库的连接路由通道;
64.第五步,通过第四步建立的数据源连接通道,执行新库的创建sql语句,完成新库的创建;
65.第六步,在当前库的连接通道下下执行新表的创建sql语句,完成新表的创建;
66.第七步,用户对已存在表单进行业务数据操作,例如增、删、查、改等,通过动态数据源适配器adaptor从主数据库db_master读取改表单对应的数据源,然后建立与该数据源的连接路由通道,完成业务数据处理操作;
67.至此,整个动态建库、建表以及业务操作动态路由算法规则已完成。
68.本技术以应用动态创建表单数据模型,基于应用适配多数据源的设计思想,通过自动装载数据源、管理适配多数据源,例如以年份作为应用业务库表的隔离条件,保证业务库表创建逻辑的简洁、可靠,继而再通过多数据源适配器,使得前端业务操作能自动路由适配后端对应的库表,既能确保应用多数据源的操作变得灵活、透明,也保障了应用业务多领域的灵活可横向扩展。
69.本技术解决了应用单体库因海量表单增长而存在的业务扩展性差、系统性能严重瓶颈问题,通过动态自动扩库扩表,业务操作灵活适配到对应的库表,一方面使得应用业务领域自动横向扩展变得弹性可控,同时也可减少人工干预存在的可能操作失误风险;另一方面由于应用以多数据源的方式扩展了数据库连接通道,为提高应用的高并发访问存在的性能瓶颈提供了有利的优化途径。
70.以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人员在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

技术特征:
1.一种动态分库的实现方法,其特征在于,包括:对系统前端创建的表单进行解析,提取表单中的业务关键字;查询主库中的表库关系表,判断是否存在与所述业务关键字相对应的子库,若存在,基于已存在的所述子库进行所述表单的建表操作,否则创建新库作为所述子库,并基于新建的所述子库进行所述表单的建表操作;以及在进行所述表单的建表操作后,在所述表库关系表中维护所述表单与相对应子库的映射关系。2.根据权利要求1所述的实现方法,其特征在于,针对已存在的所述子库,所述进行所述表单的建表操作,具体包括:适配系统与所述子库间的数据源连接通道,基于适配后的所述数据源连接通道在所述子库中创建所述表单对应的表结构信息。3.根据权利要求2所述的实现方法,其特征在于,针对新建的所述子库,所述进行所述表单的建表操作,具体包括:创建系统与所述子库间的数据源连接通道,基于创建的所述数据源连接通道在所述子库中创建所述表单对应的表结构信息。4.根据权利要求3所述的实现方法,其特征在于,所述业务关键字包括创建表单的年份标识,创建表单的用户组织标识或创建表单的客户端标识。5.根据权利要求1所述的实现方法,其特征在于,针对用户在系统前端对目标表单的业务数据操作,从主库中查找所述目标表单与其对应的子库的映射关系;基于查找到的映射关系,建立适配到对应子库的数据源连接通道,并基于所述数据源连接通道执行所述业务数据操作。6.根据权利要求5所述的实现方法,其特征在于,所述业务数据操作包括数据提交、数据查询、数据修改以及数据删除。7.根据权利要求1至6中任一项所述的实现方法,其特征在于,基于spring框架,采用工厂设计模式和适配器设计模式进行动态分库的实现。

技术总结
本申请涉及一种动态分库的实现方法,属于计算机技术领域,本申请的实现方法包括:对系统前端创建的表单进行解析,提取表单中的业务关键字;查询主库中的表库关系表,判断是否存在与所述业务关键字相对应的子库,若存在,基于已存在的所述子库进行所述表单的建表操作,否则创建新库作为所述子库,并基于新建的所述子库进行所述表单的建表操作;以及在进行所述表单的建表操作后,在所述表库关系表中维护所述表单与相对应子库的映射关系。本申请可灵活方便完成应用业务数据的横向扩展,而且一定程度解决了应用性能瓶颈所带来的系统风险。度解决了应用性能瓶颈所带来的系统风险。度解决了应用性能瓶颈所带来的系统风险。


技术研发人员:梁强 潘胜逖 栾润峰
受保护的技术使用者:北京金和网络股份有限公司
技术研发日:2022.06.29
技术公布日:2022/11/1
转载请注明原文地址: https://tieba.8miu.com/read-11248.html

最新回复(0)