CN115237889A - 数据库切换方法及装置、存储介质、计算机设备 - Google Patents
数据库切换方法及装置、存储介质、计算机设备 Download PDFInfo
- Publication number
- CN115237889A CN115237889A CN202210925462.9A CN202210925462A CN115237889A CN 115237889 A CN115237889 A CN 115237889A CN 202210925462 A CN202210925462 A CN 202210925462A CN 115237889 A CN115237889 A CN 115237889A
- Authority
- CN
- China
- Prior art keywords
- database
- thread
- data
- data transfer
- transfer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及数据处理技术领域,公开了一种数据库切换方法及装置、存储介质、计算机设备,该方法包括:确定源数据库、主库线程及目标数据库,其中,源数据库包括源代码,根据源数据库以及目标数据库建立备库线程,通过备库线程,建立源代码对应的代理类;通过主库线程,监听源数据库的运行事务,若运行事务中包括数据转移事务,则获取数据转移事务中目标数据库的接口信息及配置信息;根据代理类、接口信息、配置信息以及目标数据库,通过备库线程自动拼接数据转移查询语句;通过备库线程执行数据转移查询语句,查询代理类对应的转移数据,并将转移数据转移至所述目标数据库。本申请实现了对业务零侵入的更换业务系统数据库。
Description
技术领域
本申请涉及数据处理技术领域,尤其是涉及到一种数据库切换方法及装置、存储介质、计算机设备。
背景技术
互联网正值发展高峰期,传统的Oracle系统数据库已经越来越难以适应业务和数据井喷式发展的情形,公司每年不得不在笨重的Oracle系统数据库上投入大量的人力成本以及运维成本,云计算的飞速发展促使着笨重的Oracle系统数据库将逐步被轻量级的数据库所取代。这不仅是历史发展的必然趋势,也顺应当今时代发展的潮流。为此,技术中心区域切换Oracle系统数据库既与公司未来的战略发展相契合,也与互联网发展的趋势相匹配,其必然性与必要性不言而喻。
核心信息系统的正常运转是整个科技中心正常运转的前提,所有域都依赖核心信息系统提供的服务。核心信息系统的任意一处改动都有可能对其他域都有影响,稍有不慎将极有可能造成雪崩级的灾难,因此对于切换Oracle系统数据库的相关技术与方案,需要一种对业务零侵入的更换业务系统数据库的方法。
发明内容
有鉴于此,本申请提供了一种数据库切换方法及装置、存储介质、计算机设备,实现了对业务零侵入的更换业务系统数据库。
根据本申请的一个方面,提供了一种数据库切换方法,包括:
确定源数据库、主库线程及目标数据库,其中,所述源数据库包括源代码,根据所述源数据库以及所述目标数据库建立备库线程,通过所述备库线程,建立所述源代码对应的代理类;
通过所述主库线程,监听所述源数据库的运行事务,若所述运行事务中包括数据转移事务,则获取所述数据转移事务中目标数据库的接口信息及配置信息;
根据所述代理类、所述接口信息、所述配置信息以及所述目标数据库,通过所述备库线程自动拼接数据转移查询语句;
通过所述备库线程执行所述数据转移查询语句,查询所述代理类对应的转移数据,并将所述转移数据转移至所述目标数据库。
可选地,所述通过所述备库线程,建立所述源代码对应的代理类,包括:
通过所述备库线程获取源代码类型,依据所述源代码类型建立所述源代码对应的工厂类,其中所述工厂类包含所述源代码类型,并将所述工厂类注入IOC(Inversion ofControl,控制反转)容器,由所述IOC容器生成所述工厂类对应的代理类;
根据所述源代码类型在所述IOC容器中调取所述工厂类对应的代理类。
可选地,所述监听所述源数据库的运行事务之后,所述方法还包括:
记录全部所述运行事务,并识别所述运行事务的内容;
根据所述运行事务的内容,将所述运行事务中非数据转移事务分配于所述主库线程,并将所述数据转移事务分配于备库线程。
可选地,所述根据所述代理类、所述接口信息、所述配置信息以及所述目标数据库,通过所述备库线程自动拼接数据转移查询语句,包括:
根据所述代理类及所述目标数据库,获取目标查询语句模板;
将所述代理类、所述接口信息、所述配置信息以及所述目标数据库转换为标准格式的转移参数,并将所述转移参数拼接到所述目标查询语句模板中获得所述数据转移查询语句。
可选地,所述通过所述备库线程执行所述数据转移查询语句,查询所述代理类对应的转移数据,并将所述转移数据转移至所述目标数据库,包括:
在所述目标数据库中执行所述数据转移查询语句,查询所述代理类对应的转移数据;
将所述转移数据转移至所述目标数据库中。
可选地,所述将所述转移数据转移至所述目标数据库之后,所述方法还包括:
识别所述目标数据库中是否包含代理类表;
若不包含,则在所述目标数据库中建立代理类表;
若包含,则通过所述备库线程比对所述代理类表及所述转移数据,确定所述数据转移是否完毕。
可选地,所述通过所述备库线程比对所述代理类表及所述转移数据,确定所述数据转移是否完毕之后,所述方法还包括:
若所述数据转移完毕,则清理所述数据转移占用的所述备库线程。
根据本申请的另一方面,提供了一种数据库切换装置,所述装置包括:
数据确定模块,确定源数据库、主库线程及目标数据库,其中,所述源数据库包括源代码,根据所述源数据库以及所述目标数据库建立备库线程,通过所述备库线程,建立所述源代码对应的代理类;
数据获取模块,通过所述主库线程,监听所述源数据库的运行事务,若所述运行事务中包括数据转移事务,则获取所述数据转移事务中目标数据库的接口信息及配置信息;
数据拼接模块,根据所述代理类、所述接口信息、所述配置信息以及所述目标数据库,通过所述备库线程自动拼接数据转移查询语句;
数据转移模块,通过所述备库线程执行所述数据转移查询语句,查询所述代理类对应的转移数据,并将所述转移数据转移至所述目标数据库。
可选地,所述数据确定模块,还用于:
通过所述备库线程获取源代码类型,依据所述源代码类型建立所述源代码对应的工厂类,其中所述工厂类包含所述源代码类型,并将所述工厂类注入IOC(Inversion ofControl,控制反转)容器,由所述IOC容器生成所述工厂类对应的代理类;
根据所述源代码类型在所述IOC容器中调取所述工厂类对应的代理类。
可选地,所述装置还包括:数据分配模块,用于:
记录全部所述运行事务,并识别所述运行事务的内容;
根据所述运行事务的内容,将所述运行事务中非数据转移事务分配于所述主库线程,并将所述数据转移事务分配于备库线程。
可选地,所述数据拼接模块,还用于:
根据所述代理类及所述目标数据库,获取目标查询语句模板;
将所述代理类、所述接口信息、所述配置信息以及所述目标数据库转换为标准格式的转移参数,并将所述转移参数拼接到所述目标查询语句模板中获得所述数据转移查询语句。
可选地,所述数据转移模块,还用于:
在所述目标数据库中执行所述数据转移查询语句,查询所述代理类对应的转移数据;
将所述转移数据转移至所述目标数据库中。
可选地,所述装置还包括:数据检测模块,用于:
识别所述目标数据库中是否包含代理类表;
若不包含,则在所述目标数据库中建立代理类表;
若包含,则通过所述备库线程比对所述代理类表及所述转移数据,确定所述数据转移是否完毕。
可选地,所述装置还包括数据清理模块,用于:
若所述数据转移完毕,则清理所述数据转移占用的所述备库线程。
依据本申请又一个方面,提供了一种存储介质,其上存储有计算机程序,所述程序被处理器执行时实现上述数据库切换方法。
依据本申请再一个方面,提供了一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述数据库切换方法。
借由上述技术方案,本申请提供的一种数据库切换方法及装置、存储介质、计算机设备,首先确定源数据库、主库线程及目标数据库,其中,前述源数据库包括源代码,根据前述源数据库以及前述目标数据库建立备库线程,通过前述备库线程,建立前述源代码对应的代理类。接着,通过前述主库线程,监听前述源数据库的运行事务,若前述运行事务中包括数据转移事务,则获取前述数据转移事务中目标数据库的接口信息及配置信息。然后根据前述代理类、前述接口信息、前述配置信息以及前述目标数据库,通过前述备库线程自动拼接数据转移查询语句。最后通过前述备库线程执行前述数据转移查询语句,查询前述代理类对应的转移数据,并将前述转移数据转移至前述目标数据库。为此,利用在备库线程上操作数据库转移的流程,不影响主库线程上业务的正常运行,实现了对业务零侵入的更换业务系统数据库。
上述说明仅是本申请技术方案的概述,为了能够更清楚了解本申请的技术手段,而可依照说明书的内容予以实施,并且为了让本申请的上述和其它目的、特征和优点能够更明显易懂,以下特举本申请的具体实施方式。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1示出了本申请实施例提供的一种数据库切换方法的流程示意图;
图2示出了本申请实施例提供的另一种数据切换方法的流程示意图;
图3示出了本申请实施例提供的一种数据库切换装置的结构示意图;
图4示出了本申请实施例提供的另一种数据库切换装置的结构示意图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本申请。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
在本实施例中提供了一种数据库切换方法,如图1所示,该方法包括:
步骤101,确定源数据库、主库线程及目标数据库,其中,所述源数据库包括源代码,根据所述源数据库以及所述目标数据库建立备库线程,通过所述备库线程,建立所述源代码对应的代理类。
在本申请上述实施例中,首先确定需要进行切换的源数据库、用于运行源数据库的主库线程以及用于存储转移数据的目标数据库。然后通过Spring开源框架获取前述源数据库的源代码,同时根据前述源数据库及前述目标数据库建立对应的备库流程,用于运行与数据库切换相关的流程,以保证不影响前述主库流程运行的业务。接着利用前述备库线程建立前述源代码对应的代理类,通过调用前述代理类来实现后续的数据库切换的相关操作,不影响源数据库的正常运行。
在本申请实施例中,可选地,步骤101中通过所述备库线程,建立所述源代码对应的代理类,包括:
步骤101-1,通过所述备库线程获取源代码类型,依据所述源代码类型建立所述源代码对应的工厂类,其中所述工厂类包含所述源代码类型,并将所述工厂类注入IOC(Inversion of Control,控制反转)容器,由所述IOC容器生成所述工厂类对应的代理类;
步骤101-2,根据所述源代码类型在所述IOC容器中调取所述工厂类对应的代理类。
在上述实施例中,通过前述备库线程首先获取前述源代码类型,然后根据前述源代码类型建立前述源代码对应的工厂类,此时,前述工厂类包括前述源代码类型,接着将包含前述源代码类型的工厂类注入IOC(Inversion of Control,控制反转)容器中,再接着,由前述IOC容器直接生成前述工厂类对应的代理类。
然后可以根据前述源代码类型直接调用前述工厂类对应的代理类,为后续的数据转移做准备工作。
步骤102,通过所述主库线程,监听所述源数据库的运行事务,若所述运行事务中包括数据转移事务,则获取所述数据转移事务中目标数据库的接口信息及配置信息。
在本申请上述实施例中,监听前述源数据库在前述主库线程中的运行事务,如果监听出前述运行事务中包括数据转移事务,那么获取前述数据转移事务中的目标数据库的接口信息以及配置信息,准备启动数据转移事务。
步骤103,根据所述代理类、所述接口信息、所述配置信息以及所述目标数据库,通过所述备库线程自动拼接数据转移查询语句。
在本实施例中,通过在步骤101中确定的前述代理类及前述目标数据库,和步骤102中获取到的目标数据库的接口信息及配置信息,自动化拼接数据查询语句,用于查询出需要进行数据转移的数据,从而继续进行后续的数据转移的操作。整个过程通过备库线程实现,能够不影响源数据库及主库线程的运行,具有零侵入性。
步骤104,通过所述备库线程执行所述数据转移查询语句,查询所述代理类对应的转移数据,并将所述转移数据转移至所述目标数据库。
在本申请实施例中,通过前述备库线程执行步骤103中获取到的前述数据转移查询语句,为此通过查询操作查询前述代理类对应的需要进行数据转移的转移数据,然后将前述查询得到的转移数据转移至步骤101确定的目标数据库中,由此通过备库线程,在不影响主库线程业务的正常运行下,将源数据库转移至目标数据库中,整个过程实现了对业务的零侵入。
通过应用本实施例的技术方案,确定源数据库、主库线程及目标数据库,其中,源数据库包括源代码,根据源数据库以及目标数据库建立备库线程,通过备库线程,建立源代码对应的代理类;通过主库线程,监听源数据库的运行事务,若运行事务中包括数据转移事务,则获取数据转移事务中目标数据库的接口信息及配置信息;根据代理类、接口信息、配置信息以及目标数据库,通过备库线程自动拼接数据转移查询语句;通过备库线程执行数据转移查询语句,查询代理类对应的转移数据,并将转移数据转移至所述目标数据库。为此,在不改变源数据库及主库线程的情况下,以代理模式及监听模式,实现了对业务零侵入的更换业务系统数据库。
进一步的,作为上述实施例具体实施方式的细化和扩展,为了完整说明本实施例的具体实施过程,提供了另一种数据库切换方法,如图2所示,该方法包括:
步骤201,确定源数据库、主库线程及目标数据库,其中,所述源数据库包括源代码,根据所述源数据库以及所述目标数据库建立备库线程,通过所述备库线程,建立所述源代码对应的代理类。
在本实施例中,首先确定需要进行转移数据库的源数据库、用于前述源数据库执行事务的主库线程以及用于存储转移数据的目标数据库,其中,前述源数据库中包括源代码,前述源代码可以使用spring开源框架获取,然后根据前述确定的源数据库以及目标数据库建立对应的备库线程,用于执行后续的数据转移操作,从而保证主库线程的正常运行。最后通过前述建立的备库线程,建立前述源代码对应的代理类,用于数据转移。
步骤202,通过所述主库线程,监听所述源数据库的运行事务。
步骤203,记录全部所述运行事务,并识别所述运行事务的内容。
步骤204,根据所述运行事务的内容,将所述运行事务中非数据转移事务分配于所述主库线程,并将所述数据转移事务分配于备库线程。
接着,开始监听前述源数据库在前述主库线程中的运行事务,并记录全部运行事务,然后识别记录的全部运行事务中的内容。
如果识别出前述运行事务为非数据转移运行事务,那么则将该运行事务分配于主库线程运行,如果识别出该运行事务为数据转移事务,那么则将该运行事务分配于备库线程运行,为此通过建立两条事务运行线程,即主库线程与备库线程,同时增加了识别分配机制,可以使原系统的原主流业务在主库线程中正常运行,而数据转移事务则使用备库线程运行,实现了对业务的零侵入式数据转移,同时具有高效性。
步骤205,若所述运行事务中包括数据转移事务,则获取所述数据转移事务中目标数据库的接口信息及配置信息。
再接着,如果通过步骤203中,识别出前述运行事务包括数据转移事务,那么则获取前述数据转移事务中目标数据库的接口信息及配置信息,用于数据转移。
步骤206,根据所述代理类及所述目标数据库,获取目标查询语句模板;将所述代理类、所述接口信息、所述配置信息以及所述目标数据库转换为标准格式的转移参数,并将所述转移参数拼接到所述目标查询语句模板中获得所述数据转移查询语句。
在上述实施例中,具体的,首先根据步骤201中建立的代理类以及确定目标数据库,获取目标查询语句,然后将前述步骤201中建立的代理类、步骤205中获取的接口信息及配置信息、步骤201中确定的目标数据库,统一转换为标准格式的转移参数,最后将前述转移参数拼接到前述目标查询语句模板中,从而获得前述数据转移查询语句,即前述数据转移查询语句以前述目标查询语句模板为依据所得,用于查询前述代理类对应的需要进行数据转移的数据。
步骤207,在所述目标数据库中执行所述数据转移查询语句,查询所述代理类对应的转移数据;将所述转移数据转移至所述目标数据库中。
在上述实施中,具体的,在步骤201中确定的目标数据库中,通过备库线程执行步骤206获得的数据转移查询语句,查询前述代理类对应得转移数据,并将前述转移数据转移至前述目标数据库。
步骤208,识别所述目标数据库中是否包含代理类表。
步骤209,若不包含,则在所述目标数据库中建立代理类表。
步骤210,若包含,则通过所述备库线程比对所述代理类表及所述转移数据,确定所述数据转移是否完毕。
步骤211,若所述数据转移完毕,则清理所述数据转移占用的所述备库线程。
在上述实施例中,具体的,当前述转移数据转移至目标数据库之后,开始识别前述目标数据库中是否包含代理类表。如果识别出前述目标数据库中不包含代理类表,那么则在前述目标数据库中建立代理类表。如果识别出前述目标数据库中包含代理类表,那么则通过备库线程比对前述代理类表以及前述目标数据库,以此来判断前述数据转移工作是否完毕。如果前述数据转移工作已完毕,则开始清理前述备库线程,即清理前述备库线程所占用的资源,为此将备库线程完全清理,保留完整的主库线程继续运行主流业务,整个过程是实现了零侵入式。
通过应用本实施例的技术方案,基于原有的源数据库及主库线程,灵活并巧妙的运行设计模式的方法论,通过建立源代码对应的代理类,启动事务监听事件,同时通过目标查询语句模板获得查询语句,综合实现数据转移的需求,即以代理模式、观察者模式为主,模板模式及组合模式为辅,在项目启动末期基于原有的数据接口动态的生成多种操作不同源数据库的代理类,为后续数据库切换的读写操作创造了必要条件。同时引入了源数据库与目标数据库的概念,在数据转移过程中,对于上游发起的读写操作与未进行数据转移时的效果、性能、流程一致。同时目标数据库的操作均在异步的备库线程中,极大的保证了主库线程的高效,实现了对业务零侵入式更换数据库的方式。
在一种具体实施方式中,首先启动spring开源框架项目,然后由BeanFactoryPostProcessor(后置处理器)扫描指定包路径,如果接口上存在@DbSwitch(异构数据库迁移同步工具)注解,则将该接口的工厂类,设为基础属性注入IOC(Inversion ofControl,控制反转)容器。
接着,在DAL(Data Access Layer,数据访问层)中存在afterproperties方法,去数据库查数据再缓存到JVM(JavaVirtualMachine,Java虚拟机)内存的用法,此时,组件正常流程还没有将代理类和mybatis被代理类联系起来。此时提前去IOC容器中按照类型找被代理类,需要防止触发其他工厂类也被提前触发getObject(),然后塞入逻辑数据库管理容器中能够,使得代理可以提前生效。
当IOC容器启动完成,发送ContextRefreshedEvent,组件监听事件,因此被触发。此时获取所有的工厂类,按照工厂类的类型去取IOC容器中此类型所有的mybatis代理类,塞入逻辑数据库容器,并且检查OPS(Open Pluggable Specification,开放式可插拔规范)配置和逻辑数据库容器中的逻辑数据库类型、数量是否相匹配,检测不通过在启动阶段报错误。对全局事务裸数据库OPS配置做检查,保证OPS配置项有值且能被识别。
再接着,业务开始运行,业务需要执行被代理接口的SQL(Structured QueryLanguage,结构化查询语言数据库)语句,主动配置了动态数据源,通过主动配置动态数据源到事务管理器,来实现切换事务整体在哪个数据库执行,注意只有用到事务才需要配置动态数据源。Spring事务从源数据库取连接的时候,动态数据源会检测当前事务入口和Spring事务类型,如果是注解式事务会打日志提醒计时换成编程式事务。源数据库从OPS获取当前事务入口名所对应的OPS配置数据库类型,根据OPS配置实现动态代理数据源。如果事务没有单独的配置,则使用全局事务数据源配置。同时,保证启动阶段检测过全局事务数据源配置一定有值且值有意义。注册事务监听器到当前线程中。
然后根据接口类型获取它对应的数据库配置,根据数据库配置分配好源数据库和目标数据库mybatis代理对象的引用。如果在事务中直接从线程上下文获取源数据库的类型,那么源数据库执行SQL,源数据库如果发生异常,将JDK(Java Development Kit,Java语言软件开发工具包)动态代理包装的异常解开后抛出。
如果检测到当前线程中存在spring事务,则不到目标数据库中执行SQL,异步发送spring事件,内容包括表名、SQL语句、事务入口等。
接下来,目前只监听事务结束事件,事务运行结束后,清理组件占用的线程资源。对于required_new,nested事务,传播行为涉及的挂起和恢复,并不理会;因为会员当前没有使用这两种传播行为,此为他们都不会跨库,所以不需要理会。
最后,根据接口配置,从OPS取值决定要不要操作目标数据库库。首先检测SQL的类型,如果是insert,delete,update,则使用写线程池去目标数据库执行,如果是select则使用读线程池去目标数据库执行,目标数据库执行拿到结果,如果接口方法刚好是void(无类型)返回类型,则直接返回。所有的返回结果都转换为JSON(JavaScript ObjectNotation,,JS对象简谱)数据,转换过程中设置字段排序。如果返回结果中有需要忽略对比的值,比如创建时间,更新时间字段,使用fastjson(java类库)注解在对应DO字段上标注,这样对应字段就不会被序列化,用字符串方式对比差异,如果写操作影响行数有差异则直接异步发送spring事件。如果读操作有差异,先塞入异步对比队列三分钟后再对比,如果再对比结果有差异,异步发送spring事件,事件内容:表名,SQL语句,查询条件,源数据库及目标数据库类型等。最后,返回SQL执行结果。
进一步的,作为图1方法的具体实现,本申请实施例提供了一种数据切换装置,如图3所示,该装置包括:
数据确定模块31,确定源数据库、主库线程及目标数据库,其中,所述源数据库包括源代码,根据所述源数据库以及所述目标数据库建立备库线程,通过所述备库线程,建立所述源代码对应的代理类;
数据获取模块32,通过所述主库线程,监听所述源数据库的运行事务,若所述运行事务中包括数据转移事务,则获取所述数据转移事务中目标数据库的接口信息及配置信息;
数据拼接模块33,根据所述代理类、所述接口信息、所述配置信息以及所述目标数据库,通过所述备库线程自动拼接数据转移查询语句;
数据转移模块34,通过所述备库线程执行所述数据转移查询语句,查询所述代理类对应的转移数据,并将所述转移数据转移至所述目标数据库。
可选地,所述数据确定模块31,还用于:
通过所述备库线程获取源代码类型,依据所述源代码类型建立所述源代码对应的工厂类,其中所述工厂类包含所述源代码类型,并将所述工厂类注入IOC(Inversion ofControl,控制反转)容器,由所述IOC容器生成所述工厂类对应的代理类;
根据所述源代码类型在所述IOC容器中调取所述工厂类对应的代理类。
可选地,所述数据拼接模块33,还用于:
根据所述代理类及所述目标数据库,获取目标查询语句模板;
将所述代理类、所述接口信息、所述配置信息以及所述目标数据库转换为标准格式的转移参数,并将所述转移参数拼接到所述目标查询语句模板中获得所述数据转移查询语句。
可选地,所述数据转移模块34,还用于:
在所述目标数据库中执行所述数据转移查询语句,查询所述代理类对应的转移数据;
将所述转移数据转移至所述目标数据库中。
进一步的,作为图1方法的具体实现,本申请实施例提供了另一种数据切换装置,如图4所示,该装置包括:
数据确定模块41,确定源数据库、主库线程及目标数据库,其中,所述源数据库包括源代码,根据所述源数据库以及所述目标数据库建立备库线程,通过所述备库线程,建立所述源代码对应的代理类;
数据获取模块42,通过所述主库线程,监听所述源数据库的运行事务,若所述运行事务中包括数据转移事务,则获取所述数据转移事务中目标数据库的接口信息及配置信息;
数据拼接模块43,根据所述代理类、所述接口信息、所述配置信息以及所述目标数据库,通过所述备库线程自动拼接数据转移查询语句;
数据转移模块44,通过所述备库线程执行所述数据转移查询语句,查询所述代理类对应的转移数据,并将所述转移数据转移至所述目标数据库。
数据分配模块45,记录全部所述运行事务,并识别所述运行事务的内容;
根据所述运行事务的内容,将所述运行事务中非数据转移事务分配于所述主库线程,并将所述数据转移事务分配于备库线程。
数据检测模块46,识别所述目标数据库中是否包含代理类表;若不包含,则在所述目标数据库中建立代理类表;若包含,则通过所述备库线程比对所述代理类表及所述转移数据,确定所述数据转移是否完毕。
数据清理模块47,若所述数据转移完毕,则清理所述数据转移占用的所述备库线程。
可选地,所述数据确定模块41,还用于:
通过所述备库线程获取源代码类型,依据所述源代码类型建立所述源代码对应的工厂类,其中所述工厂类包含所述源代码类型,并将所述工厂类注入IOC(Inversion ofControl,控制反转)容器,由所述IOC容器生成所述工厂类对应的代理类;
根据所述源代码类型在所述IOC容器中调取所述工厂类对应的代理类。
可选地,所述数据拼接模块43,还用于:
根据所述代理类及所述目标数据库,获取目标查询语句模板;
将所述代理类、所述接口信息、所述配置信息以及所述目标数据库转换为标准格式的转移参数,并将所述转移参数拼接到所述目标查询语句模板中获得所述数据转移查询语句。
可选地,所述数据转移模块44,还用于:
在所述目标数据库中执行所述数据转移查询语句,查询所述代理类对应的转移数据;
将所述转移数据转移至所述目标数据库中。
需要说明的是,本申请实施例提供的一种数据库切换装置所涉及各功能单元的其他相应描述,可以参考图1至图2方法中的对应描述,在此不再赘述。
基于上述如图1至图2所示方法,相应的,本申请实施例还提供了一种存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述如图1至图2所示的数据库切换方法。
基于这样的理解,本申请的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施场景所述的方法。
基于上述如图1至图2所示的方法,以及图3至图4所示的虚拟装置实施例,为了实现上述目的,本申请实施例还提供了一种计算机设备,具体可以为个人计算机、服务器、网络设备等,该计算机设备包括存储介质和处理器;存储介质,用于存储计算机程序;处理器,用于执行计算机程序以实现上述如图1至图2所示的数据库切换方法。
可选地,该计算机设备还可以包括用户接口、网络接口、摄像头、射频(RadioFrequency,RF)电路,传感器、音频电路、WI-FI模块等等。用户接口可以包括显示屏(Display)、输入单元比如键盘(Keyboard)等,可选用户接口还可以包括USB接口、读卡器接口等。网络接口可选的可以包括标准的有线接口、无线接口(如蓝牙接口、WI-FI接口)等。
本领域技术人员可以理解,本实施例提供的一种计算机设备结构并不构成对该计算机设备的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。
存储介质中还可以包括操作系统、网络通信模块。操作系统是管理和保存计算机设备硬件和软件资源的程序,支持信息处理程序以及其它软件和/或程序的运行。网络通信模块用于实现存储介质内部各组件之间的通信,以及与该实体设备中其它硬件和软件之间通信。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本申请可以借助软件加必要的通用硬件平台的方式来实现,也可以通过硬件实现首先确定源数据库、主库线程及目标数据库,其中,前述源数据库包括源代码,根据前述源数据库以及前述目标数据库建立备库线程,通过前述备库线程,建立前述源代码对应的代理类。接着,通过前述主库线程,监听前述源数据库的运行事务,若前述运行事务中包括数据转移事务,则获取前述数据转移事务中目标数据库的接口信息及配置信息。然后根据前述代理类、前述接口信息、前述配置信息以及前述目标数据库,通过前述备库线程自动拼接数据转移查询语句。最后通过前述备库线程执行前述数据转移查询语句,查询前述代理类对应的转移数据,并将前述转移数据转移至前述目标数据库。为此,利用在备库线程上操作数据库转移的流程,不影响主库线程上业务的正常运行,实现了对业务零侵入的更换业务系统数据库。
本领域技术人员可以理解附图只是一个优选实施场景的示意图,附图中的模块或流程并不一定是实施本申请所必须的。本领域技术人员可以理解实施场景中的装置中的模块可以按照实施场景描述进行分布于实施场景的装置中,也可以进行相应变化位于不同于本实施场景的一个或多个装置中。上述实施场景的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本申请序号仅仅为了描述,不代表实施场景的优劣。以上公开的仅为本申请的几个具体实施场景,但是,本申请并非局限于此,任何本领域的技术人员能思之的变化都应落入本申请的保护范围。
Claims (10)
1.一种数据库切换方法,其特征在于,所述方法包括:
确定源数据库、主库线程及目标数据库,其中,所述源数据库包括源代码,根据所述源数据库以及所述目标数据库建立备库线程,通过所述备库线程,建立所述源代码对应的代理类;
通过所述主库线程,监听所述源数据库的运行事务,若所述运行事务中包括数据转移事务,则获取所述数据转移事务中目标数据库的接口信息及配置信息;
根据所述代理类、所述接口信息、所述配置信息以及所述目标数据库,通过所述备库线程自动拼接数据转移查询语句;
通过所述备库线程执行所述数据转移查询语句,查询所述代理类对应的转移数据,并将所述转移数据转移至所述目标数据库。
2.根据权利要求1所述的方法,其特征在于,所述通过所述备库线程,建立所述源代码对应的代理类,包括:
通过所述备库线程获取源代码类型,依据所述源代码类型建立所述源代码对应的工厂类,其中所述工厂类包含所述源代码类型,并将所述工厂类注入IOC(Inversion ofControl,控制反转)容器,由所述IOC容器生成所述工厂类对应的代理类;
根据所述源代码类型在所述IOC容器中调取所述工厂类对应的代理类。
3.根据权利要求1所述的方法,其特征在于,所述监听所述源数据库的运行事务之后,所述方法还包括:
记录全部所述运行事务,并识别所述运行事务的内容;
根据所述运行事务的内容,将所述运行事务中非数据转移事务分配于所述主库线程,并将所述数据转移事务分配于备库线程。
4.根据权利要求1所述的方法,其特征在于,所述根据所述代理类、所述接口信息、所述配置信息以及所述目标数据库,通过所述备库线程自动拼接数据转移查询语句,包括:
根据所述代理类及所述目标数据库,获取目标查询语句模板;
将所述代理类、所述接口信息、所述配置信息以及所述目标数据库转换为标准格式的转移参数,并将所述转移参数拼接到所述目标查询语句模板中获得所述数据转移查询语句。
5.根据权利要求4所述的方法,其特征在于,所述通过所述备库线程执行所述数据转移查询语句,查询所述代理类对应的转移数据,并将所述转移数据转移至所述目标数据库,包括:
在所述目标数据库中执行所述数据转移查询语句,查询所述代理类对应的转移数据;
将所述转移数据转移至所述目标数据库中。
6.根据权利要求1所述的方法,其特征在于,所述将所述转移数据转移至所述目标数据库之后,所述方法还包括:
识别所述目标数据库中是否包含代理类表;
若不包含,则在所述目标数据库中建立代理类表;
若包含,则通过所述备库线程比对所述代理类表及所述转移数据,确定所述数据转移是否完毕。
7.根据权利要求6所述的方法,其特征在于,所述通过所述备库线程比对所述代理类表及所述转移数据,确定所述数据转移是否完毕之后,所述方法还包括:
若所述数据转移完毕,则清理所述数据转移占用的所述备库线程。
8.一种数据库切换装置,其特征在于,所述装置包括:
数据确定模块,确定源数据库、主库线程及目标数据库,其中,所述源数据库包括源代码,根据所述源数据库以及所述目标数据库建立备库线程,通过所述备库线程,建立所述源代码对应的代理类;
数据获取模块,通过所述主库线程,监听所述源数据库的运行事务,若所述运行事务中包括数据转移事务,则获取所述数据转移事务中目标数据库的接口信息及配置信息;
数据拼接模块,根据所述代理类、所述接口信息、所述配置信息以及所述目标数据库,通过所述备库线程自动拼接数据转移查询语句;
数据转移模块,通过所述备库线程执行所述数据转移查询语句,查询所述代理类对应的转移数据,并将所述转移数据转移至所述目标数据库。
9.一种存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至7中任一项所述数据库切换的方法。
10.一种计算机设备,包括存储介质、处理器及存储在存储介质上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述数据库切换的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210925462.9A CN115237889A (zh) | 2022-08-03 | 2022-08-03 | 数据库切换方法及装置、存储介质、计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210925462.9A CN115237889A (zh) | 2022-08-03 | 2022-08-03 | 数据库切换方法及装置、存储介质、计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115237889A true CN115237889A (zh) | 2022-10-25 |
Family
ID=83677386
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210925462.9A Pending CN115237889A (zh) | 2022-08-03 | 2022-08-03 | 数据库切换方法及装置、存储介质、计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115237889A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116302845A (zh) * | 2023-05-17 | 2023-06-23 | 建信金融科技有限责任公司 | 事务运行方式的确定方法、装置、电子设备及存储介质 |
-
2022
- 2022-08-03 CN CN202210925462.9A patent/CN115237889A/zh active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116302845A (zh) * | 2023-05-17 | 2023-06-23 | 建信金融科技有限责任公司 | 事务运行方式的确定方法、装置、电子设备及存储介质 |
CN116302845B (zh) * | 2023-05-17 | 2023-08-15 | 建信金融科技有限责任公司 | 事务运行方式的确定方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107122368B (zh) | 一种数据校验方法、装置及电子设备 | |
US8719784B2 (en) | Assigning runtime artifacts to software components | |
CN110162512B (zh) | 一种日志检索方法、装置及存储介质 | |
CN111177165B (zh) | 数据一致性检测的方法、装置及设备 | |
US10838977B2 (en) | Key-value replication with consensus protocol | |
CN110737720A (zh) | 一种db2数据库数据同步方法、装置、系统 | |
CN106095483A (zh) | 服务的自动化部署方法及装置 | |
CN115934855A (zh) | 一种全链路字段级血缘解析方法、系统、设备及存储介质 | |
US9461884B2 (en) | Information management device and computer-readable medium recorded therein information management program | |
CN106681867A (zh) | 一种测试方法及装置 | |
CN110083581A (zh) | 一种日志追溯的方法、装置、存储介质及计算机设备 | |
CN115576600A (zh) | 基于代码变更的差异处理方法、装置、终端及存储介质 | |
CN115827436A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN115237889A (zh) | 数据库切换方法及装置、存储介质、计算机设备 | |
JP2023553220A (ja) | マルチインスタンスプロセスのためのプロセスマイニング | |
CN116467975B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN108228611B (zh) | 单据信息抄写方法和装置 | |
WO2023197851A1 (zh) | 异常组件的识别方法、装置、设备、存储介质及程序产品 | |
US8819494B2 (en) | Automatically changing parts in response to tests | |
JP2007249949A (ja) | フォーマットする試験結果の文脈を提供する変数値を格納する装置 | |
CN105447012B (zh) | 一种用于数据库的写入互斥方法及装置 | |
CN110058995A (zh) | 一种可避免数据库类型的干扰的数据库测试方法以及系统 | |
US20230086564A1 (en) | System and method for automatic discovery of candidate application programming interfaces and dependencies to be published | |
CN115373757A (zh) | 一种Promethues分片模式下集群监控数据缺失的解决方法和装置 | |
CN114860432A (zh) | 一种内存故障的信息确定方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |