CN117421362A - 数据库动态切换方法、装置、设备及介质 - Google Patents

数据库动态切换方法、装置、设备及介质 Download PDF

Info

Publication number
CN117421362A
CN117421362A CN202311401901.7A CN202311401901A CN117421362A CN 117421362 A CN117421362 A CN 117421362A CN 202311401901 A CN202311401901 A CN 202311401901A CN 117421362 A CN117421362 A CN 117421362A
Authority
CN
China
Prior art keywords
database
sql
target
sql statement
application program
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
Application number
CN202311401901.7A
Other languages
English (en)
Inventor
刘志超
李尼科
周雁鸣
潘斌
谭磊
陈梦晨
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan Changyin May 8th Consumer Finance Co ltd
Original Assignee
Hunan Changyin May 8th Consumer Finance Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Hunan Changyin May 8th Consumer Finance Co ltd filed Critical Hunan Changyin May 8th Consumer Finance Co ltd
Priority to CN202311401901.7A priority Critical patent/CN117421362A/zh
Publication of CN117421362A publication Critical patent/CN117421362A/zh
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/28Databases characterised by their database models, e.g. relational or object models
    • G06F16/284Relational databases

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • Mathematical Physics (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请公开了数据库动态切换方法、装置、设备及介质,涉及大数据仓库技术领域,包括:拦截通过应用程序提交的SQL语句,解析SQL语句,得到依赖表和SQL类型;若SQL类型为查询操作类型,则获取包含依赖表和多个对应的数据库信息的存储路由表;基于预设匹配规则从存储路由表中匹配出目标数据库信息,以便将SQL语句转化为目标数据库的目标SQL语句;连接目标数据库,以便目标数据库执行目标SQL语句,返回针对目标SQL语句的目标数据至应用程序。通过一份应用程序中现有SQL语句能够通过存储路由表直接定位出当前最适匹配的目标数据库,实现数据库的动态切换,并自动转换为目标数据库的目标SQL语句,以获取相应的目标数据。

Description

数据库动态切换方法、装置、设备及介质
技术领域
本发明涉及大数据仓库技术领域,特别涉及数据库动态切换方法、装置、设备及介质。
背景技术
大数据仓库领域,是典型的读写分离、先写后读(查询)。根据数据存储(即数据库)的不同,编写不同的读写SQL((Structured Query Language,结构化查询语言),并且写是强依赖数据库。随着数仓建设的推进,基于性能或架构设计考虑,经常会遇到数据库迁移或切换的操作。例如:原先存储在hive数据库的数据,需要迁移或同步到clickhouse数据库,以便实现高效数据查询。迁移或同步,业界有成熟的方案,比如datax等。但是存量的查询(读)功能在做了数据迁移或同步后,基于性能等考虑,需要走新的数据库查询。为此要保持应用程序运行正常,需要将应用程序功能接口中的SQL语句进行修改,从hive支持的SQL语句,改成clickhouse支持的SQL语句。即SQL方言改写。将应用程序中的数据库驱动,从hive改成clickhouse。这种做法,对现有程序的侵入性和改动量较大。对于少量接口而言,这个工作还能接受。对于大量接口,随着接口数增加,每一个接口对应的查询sql的切换开发,都需要经过充分的测试和验证,这个改造适配工作会变得很庞大。而且每切换一个数据库,上述工作都需要重新来一遍,费时费力。并且当完成数据同步后,同样一份数据,存在于多个数据库,基于数据量或并发等考虑,需要动态切换到不同数据库查询,实现最大效率。现有的动态区切换数据库的方法准备多份SQL方言,每种数据库对应一个SQL方言。根据规则,动态选择数据库驱动执行对应的SQL方言。对现在程序的侵入性和改动量较大。对于大量接口,随着接口数增加,每一个接口对应的多种数据库查询sql,都需要经过充分的测试和验证,这个改造适配工作会变得很庞大。
综上,如何实现应用程序侧在查询数据时,保证查询SQL不变,实现底层数据库的动态切换是本领域有待解决的技术问题。
发明内容
有鉴于此,本发明的目的在于提供数据库动态切换方法、装置、设备及介质,能够实现应用程序侧在查询数据时,保证查询SQL不变,实现底层数据库的动态切换。其具体方案如下:
第一方面,本申请公开了一种数据库动态切换方法,包括:
拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型;
若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;
基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句;
连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。
可选的,所述拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型,包括:
当应用程序启动并执行SQL操作时,生成并向数据库提交针对所述SQL操作的SQL语句;
通过预设SQL执行拦截器拦截所述应用程序提交的所述SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型。
可选的,所述得到依赖表和SQL类型之后,还包括:
判断所述SQL类型是否为查询操作类型,以得到相应的判断结果;
若所述判断结果为所述SQL类型不是查询操作类型,则退出所述预设SQL执行拦截器的拦截进程,并通过与所述SQL语句对应的原始数据库执行所述SQL语句,以返回针对所述SQL语句的结果数据至所述应用程序。
可选的,所述判断所述SQL类型是否为查询操作类型,以得到相应的判断结果之后,还包括:
若所述判断结果为所述SQL类型为查询操作类型,则从存储路由表中查询是否存在与所述依赖表对应的数据库信息;
若不存在,则退出所述预设SQL执行拦截器的拦截进程,并通过与所述SQL语句对应的原始数据库执行所述SQL语句,以返回针对所述SQL语句的结果数据至所述应用程序;
若存在,则对从所述存储路由表中查询的与所述依赖表对应的数据库信息对应的待匹配数据库进行判断;
若仅有一个所述待匹配数据库,则将所述待匹配数据库作为目标数据库,并执行连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序的步骤;
若存在两个以上所述待匹配数据库,则获取包含所述依赖表和对应的待匹配数据库信息的存储路由表。
可选的,所述若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表之前,还包括:
当数据写入各个所述待匹配数据库时,按照路由编号、数据表、存储所述数据表的所述待匹配数据库、所述待匹配数据库的优先级、所述待匹配数据库当前并发数量生成或更新所述存储路由表。
可选的,所述基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句,包括:
按照待匹配数据库的优先级从高到低的顺序逐一匹配所述存储路由表中的所述待匹配数据库的当前并发数量是否小于预设目标并发数量,直至匹配出相应的目标数据库;
将所述目标数据库对应的数据库信息作为目标数据库信息,并通过预设SQL执行拦截器基于所述目标数据库信息将所述SQL语句转化为所述目标数据库的目标SQL语句。
可选的,所述连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序,包括:
通过预设SQL执行拦截器从数据库连接池中获取目标数据库,并连接所述目标数据库,以便所述目标数据库执行目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。
第二方面,本申请公开了一种数据库动态切换装置,包括:
语句拦截模块,用于拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型;
表获取模块,用于若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;
信息匹配模块,用于基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句;
数据返回模块,用于连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。
第三方面,本申请公开了一种电子设备,包括:
存储器,用于保存计算机程序;
处理器,用于执行所述计算机程序,以实现前述公开的数据库动态切换方法的步骤。
第四方面,本申请公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述公开的数据库动态切换方法的步骤。
可见,本申请公开了一种数据库动态切换方法,包括:拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型;若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句;连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。由此可见,通过在应用程序提交SQL语句后,直接拦截解析该SQL语句,对该SQL语句解析后的SQL类型进行判断,当类型为查询操作类型时,获取存储路由表,通过存储路由表动态匹配出的目标数据库的方式,获取目标数据库,然后将SQL语句转为该目标数据库的目标SQL语句,以便从该目标数据库中获取相应的目标数据。通过一份应用程序中现有的SQL语句能够通过存储路由表直接定位出当前最适匹配的目标数据库,实现数据库的动态切换,并自动转换为目标数据库的目标SQL语句,以获取相应的目标数据。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本申请公开的一种数据库动态切换方法流程图;
图2为本申请公开的一种具体的数据库动态切换方法流程图;
图3为本申请公开的一种数据库动态切换方法总体流程图;
图4为本申请公开的一种数据库动态切换装置结构示意图;
图5为本申请公开的一种电子设备结构图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
大数据仓库领域,是典型的读写分离、先写后读(查询)。根据数据存储(即数据库)的不同,编写不同的读写SQL,并且写是强依赖数据库。随着数仓建设的推进,基于性能或架构设计考虑,经常会遇到数据库迁移或切换的操作。例如:原先存储在hive数据库的数据,需要迁移或同步到clickhouse数据库,以便实现高效数据查询。迁移或同步,业界有成熟的方案,比如datax等。但是存量的查询(读)功能在做了数据迁移或同步后,基于性能等考虑,需要走新的数据库查询。为此要保持应用程序运行正常,需要将应用程序功能接口中的SQL语句进行修改,从hive支持的SQL语句,改成clickhouse支持的SQL语句。即SQL方言改写。将应用程序中的数据库驱动,从hive改成clickhouse。这种做法,对现有程序的侵入性和改动量较大。对于少量接口而言,这个工作还能接受。对于大量接口,随着接口数增加,每一个接口对应的查询sql的切换开发,都需要经过充分的测试和验证,这个改造适配工作会变得很庞大。而且每切换一个数据库,上述工作都需要重新来一遍,费时费力。并且当完成数据同步后,同样一份数据,存在于多个数据库,基于数据量或并发等考虑,需要动态切换到不同数据库查询,实现最大效率。现有的动态区切换数据库的方法准备多份SQL方言,每种数据库对应一个SQL方言。根据规则,动态选择数据库驱动执行对应的SQL方言。对现在程序的侵入性和改动量较大。对于大量接口,随着接口数增加,每一个接口对应的多种数据库查询sql,都需要经过充分的测试和验证,这个改造适配工作会变得很庞大。
为此,本发明提供了一种数据库动态切换方案,能够实现应用程序侧在查询数据时,保证查询SQL不变,实现底层数据库的动态切换。
参照图1所示,本发明实施例公开了一种数据库动态切换方法,包括:
步骤S11:拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型。
本实施例中,当应用程序启动并执行SQL操作时,生成并向数据库提交针对所述SQL操作的SQL语句;通过预设SQL执行拦截器拦截所述应用程序提交的所述SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型。可以理解的是,当应用程序启动并执行SQL操作时,生成并向数据库提交针对SQL操作的SQL语句,此时在应用程序内置的Javaagent立即启动,使得其中的SQL执行拦截器拦截SQL语句,然后对该SQL语句进行解析,得到依赖表和SQL类型。其中,生成的SQL语句为应用程序中现有的任一种SQL方言,无需同时生成多种方言。对该SQL语句进行解析,生成抽象语法树,得到依赖表和SQL类型的具体流程为:
对输入的SQL语句进行词法分析和语法分析,将其拆分成最小的语法单元,并构建一棵对应的抽象语法树。这棵树的节点可以表示SQL语句中的关键字、标识符、运算符、函数调用、表名、列名等语法元素,并且节点之间通过边来表示它们之间的关系。通过对抽象语法树的遍历和操作,可以进行语法检查、优化、转换等操作等,以获取依赖表和SQL类型。
本实施例中,Javaagent通过编译成Jar包,内置在应用程序中,并在应用程序的启动脚本中增加对该Jar包的依赖和配置。应用程序代码无任何修改,仅在启动脚本中增加Jar探针即可,实现了真正的无侵入。
本实施例中,得到依赖表和SQL类型之后,还包括:判断所述SQL类型是否为查询操作类型,以得到相应的判断结果;若所述判断结果为所述SQL类型不是查询操作类型,则退出所述预设SQL执行拦截器的拦截进程,并通过与所述SQL语句对应的原始数据库执行所述SQL语句,以返回针对所述SQL语句的结果数据至所述应用程序。可以理解的是,当得到依赖表和SQL类型之后,判断SQL类型是否为查询操作类型,并得到判断结果,若该判断结果不是Select操作类型,则表征当前的SQL语句不是查询语句,也许无需从数据库中读取数据,相应的退出Javaagent的拦截进程,然后通过与SQL语句对应的数据库执行该SQL语句,执行相应的进程反馈相应的结果数据至应用程序,其中,非查询操作类型的SQL类型具体可以包括但不限于:数据库操作类型、数据库定义类型、事务控制类型、数据控制类型等。
步骤S12:若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表。
本实施例中,判断所述SQL类型是否为查询操作类型,以得到相应的判断结果之后,还包括:若所述判断结果为所述SQL类型为查询操作类型,则从存储路由表中查询是否存在与所述依赖表对应的数据库信息;若不存在,则退出所述预设SQL执行拦截器的拦截进程,并通过与所述SQL语句对应的原始数据库执行所述SQL语句,以返回针对所述SQL语句的结果数据至所述应用程序;若存在,则获取包含所述依赖表和多个对应的数据库信息的存储路由表。可以理解的是,若为Select类型,则表征需要基于依赖表从相应的数据库中读相应的数据,因此需要进一步从存储路由表中查询是否存在与解析的依赖表对应的数据库信息,若不存在对应的数据库信息,表明此时的存储路由表中不存在与当前SQL语句对应的数据库信息,则退出Javaagent的拦截进程,通过与SQL语句对应的原始数据库执行SQL语句,以返回针对SQL语句的结果数据至所述应用程序。若存在,则获取包含依赖表、与依赖表对应的数据库信息的存储路由表。
步骤S13:基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句。
本实施例中,根据预设匹配规则从存储路由表中匹配出的目标数据库信息,需要注意的是,若存储路由表中只有一个数据库信息,则无需匹配。若存储路由表中有多个数据库信息,则需要根据数据库的优先级从高到低的匹配规则从多个数据库信息中匹配出优先级最高的且表征当前数据库资源最优的数据库信息作为目标数据库信息。当匹配出目标数据库信息后,将SQL语句转化为目标数据库的目标SQL语句,可以理解的是,目标SQL语句的方言为目标数据库的SQL方言。
步骤S14:连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。
本实施例中,通过预设SQL执行拦截器从数据库连接池中获取目标数据库,并连接所述目标数据库,以便所述目标数据库执行目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。可以理解的是,确定出目标数据库后,无需应用程序直接连接目标数据库,而是再次使用SQL执行拦截器从数据库连接池中获取目标数据库,以便该目标数据库执行本数据库方言的目标SQL语句,从目标数据库中读出目标数据并将该目标数据返回至应用程序。
可见,本申请公开了一种数据库动态切换方法,包括:拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型;若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句;连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。由此可见,通过在应用程序提交SQL语句后,直接拦截解析该SQL语句,对该SQL语句解析后的SQL类型进行判断,当类型为查询操作类型时,获取存储路由表,通过存储路由表动态匹配出的目标数据库的方式,获取目标数据库,然后将SQL语句转为该目标数据库的目标SQL语句,以便从该目标数据库中获取相应的目标数据。通过一份应用程序中现有的SQL语句能够通过存储路由表直接定位出当前最适匹配的目标数据库,实现数据库的动态切换,并自动转换为目标数据库的目标SQL语句,以获取相应的目标数据。
参照图2所示,本发明实施例公开了一种具体的数据库动态切换方法,相对于上一实施例,本实施例对技术方案作了进一步的说明和优化。具体的:
步骤S21:拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型。
步骤S22:若所述SQL类型为查询操作类型,则对从所述存储路由表中查询的与所述依赖表对应的数据库信息对应的待匹配数据库进行判断;若仅有一个所述待匹配数据库,则将所述待匹配数据库作为目标数据库,并执行连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序的步骤。
本实施例中,当SQL类型为Select查询操作类型时,对从存储路由表中查询的与依赖表对应的数据库信息对应的待匹配数据库进行判断,具体判断规则为判断存储路由表中的待匹配数据库的数量是否大于等于一个,若存储路由表中仅有一个待匹配数据库,则将待匹配数据库作为目标数据库,并执行连接所述目标数据库,以便目标数据库执行目标SQL语句,并返回针对目标SQL语句的目标数据至所述应用程序的步骤。
步骤S23:若存在两个以上所述待匹配数据库,则获取包含所述依赖表和对应的待匹配数据库信息的存储路由表。
本实施例中,若数据库数量判断结果为两个以上,则获取包含所述依赖表和对应的多个待匹配数据库信息的存储路由表。
本实施例中,所述若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表之前,还包括:当数据写入各个所述待匹配数据库时,按照路由编号、数据表、存储所述数据表的所述待匹配数据库、所述待匹配数据库的优先级、所述待匹配数据库当前并发数量生成或更新所述存储路由表。可以理解的是,在获取存储路由表之前,当数据写入待匹配数据库时,需要按照路由编号、数据表、存储数据表的待匹配数据库、待匹配数据库的优先级、待匹配数据库当前并发数量生成或更新存储路由表,存储路由表的示例如表一所示,
表一
需要注意的是,存储路由表路由编号、表、存储数据库、优先级、支持最大并发数。同时也需要构建预设匹配规则,即根据依赖表能够匹配到记录即匹配。匹配的结果按优先级倒序排列。优先级,即匹配出多个目标数据库时,各目标数据库的优先级。进一步的,存储路由表和预设匹配规则均为数据写入数据库时自动生成的,因此,根据表一可知,基于SQL语句中解析出来的依赖表ads.customer查询存储路由表时,可以得到路由编号R1和路由编号R2,R1中ads.customer表分别对应的数据库类型为mysql和clickhouse,然后数据库的详细地址为:jdbc:mysql://100.74.129.161:3307和jdbc:clickhouse://100.74.128.98:8123,各自的优先级分别为30和10,各自支持的最大并发数量为50000和100。
步骤S24:按照待匹配数据库的优先级从高到低的顺序逐一匹配所述存储路由表中的所述待匹配数据库的当前并发数量是否小于预设目标并发数量,直至匹配出相应的目标数据库。
本实施例中,按照待匹配数据库的优先级从高到低,逐个判断数据库并发是否支持(当前数据库并发数小于支持最大并发数),其中,不同类型的数据库所支持的最大并发数不同,具体则根据数据库人为设置的最大并发数和当前的系统资源共同决定。然后取最先支持并发的数据库,即最佳的目标数据库。如无匹配路由信息,则不做拦截。按输入的SQL语句到输入的数据库执行并返回结果数据。
步骤S25:将所述目标数据库对应的数据库信息作为目标数据库信息,并通过预设SQL执行拦截器基于所述目标数据库信息将所述SQL语句转化为所述目标数据库的目标SQL语句。
本实施例中,将匹配出的目标数据库对应的数据库信息作为目标数据库信息,以便SQL拦截器基于目标数据库信息将SQL语句转化为目标SQL语句,获取用于访问目标数据库的SQL方言。
步骤S26:连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。
其中,步骤S21、S26中更加详细的处理过程请参照前述实施例公开的内容,在此不再进行赘述。
由此可见,在拦截SQL语句时,转换SQL语句为何种目标数据库对应的SQL方言是不确定的,也即是否切换数据库以及切换到目标数据库是变化和不确定的,而是通过解析SQL语句得到依赖表,然后通过依赖表到存储路由表动态匹配得到目标数据库。而应用程序自身无目标数据库任何信息。目标数据库的相关信息,包括:数据库类型、支持最大并发数、优先级等,均存放于存储路由表,与应用程序是独立分开的。且应用程序自身无目标数据库连接层。目标数据库连接层,存放在JAVA探针中,与应用程序是独立分开的。目标数据库的确定由数据写入方确定,而非应用程序约定的方式确定。
参照图3所示,本发明提供了一种SQL查询语句自适应异构数据库执行方法,具体过程如下:
a、增加存储路由表,在大数据写应用向某一或某几个数据库写数据的时候将相关的记录更新表存储的数据库、行数及路由规则到存储路由表中,并且当大数据写应用存在新数据写入时,存储路由表即发起相应的更新操作,以保证存储路由表中的信息实时更新。
b、应用程序,也即大数据读应用仅写一份SQL语句,何种数据库的SQL方言均可,但需要注意的是此处的SQL语句特指应用程序中现有的SQL语句。
c、通过探针的方式将SQL拦截器依附到应用程序中,SQL拦截器运行时对SQL执行进行拦截。
d、SQL拦截器解析SQL语句,生成抽象语法树,得到SQL语句类型(仅含SELECT即查询否则为非查询)和依赖表(即待查询的表,SQL语句中的FROM和JOIN的表)。
e、SQL拦截器判断SQL语句类型是否为查询(SELECT),如否则进入f,如是则进入g。
f、退出拦截,由原数据库执行原SQL,得到结果数据,返回给应用程序,结束。
g、SQL拦截器根据依赖表,逐个到存储路由表中,匹配出目标数据库。如匹配多个,按照优先级从高到低,逐个判断数据库并发是否支持(当前数据库并发数小于支持最大并发数),取最先支持并发的目标数据库,即最佳的目标数据库。
h、SQL拦截器将原SQL转换成目标数据库SQL方言。
i、SQL拦截器从数据库连接池中获取目标数据库连接,并执行目标SQL语句,得到结果数据,返回给应用程序,结束。
可见,在大数据领域中,当数据同时存放在多份存储(数据库),通过数据写入方将相关数据库信息和依赖表的对应关系写入至存储路由表的方式方便了应用程序在读取时仅根据数据量和并发要求以及存储路由表实现动态的数据库切换,能够根据当前的SQL语句选择目标数据库,实现无感知的动态切换。
参照图4所示,本发明实施例还相应公开了一种数据库动态切换装置,包括:
语句拦截模块11,用于拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型;
表获取模块12,用于若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;
信息匹配模块13,用于基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句;
数据返回模块14,用于连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。
可见,本申请公开了拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型;若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句;连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。由此可见,通过在应用程序提交SQL语句后,直接拦截解析该SQL语句,对该SQL语句解析后的SQL类型进行判断,当类型为查询操作类型时,获取存储路由表,通过存储路由表动态匹配出的目标数据库的方式,获取目标数据库,然后将SQL语句转为该目标数据库的目标SQL语句,以便从该目标数据库中获取相应的目标数据。通过一份应用程序中现有的SQL语句能够通过存储路由表直接定位出当前最适匹配的目标数据库,实现数据库的动态切换,并自动转换为目标数据库的目标SQL语句,以获取相应的目标数据。
进一步的,本申请实施例还公开了一种电子设备,图5是根据一示例性实施例示出的电子设备20结构图,图中的内容不能认为是对本申请的使用范围的任何限制。
图5为本申请实施例提供的一种电子设备20的结构示意图。该电子设备20,具体可以包括:至少一个处理器21、至少一个存储器22、电源23、通信接口24、输入输出接口25和通信总线26。其中,所述存储器22用于存储计算机程序,所述计算机程序由所述处理器21加载并执行,以实现前述任一实施例公开的数据库动态切换方法中的相关步骤。另外,本实施例中的电子设备20具体可以为电子计算机。
本实施例中,电源23用于为电子设备20上的各硬件设备提供工作电压;通信接口24能够为电子设备20创建与外界设备之间的数据传输通道,其所遵循的通信协议是能够适用于本申请技术方案的任意通信协议,在此不对其进行具体限定;输入输出接口25,用于获取外界输入数据或向外界输出数据,其具体的接口类型可以根据具体应用需要进行选取,在此不进行具体限定。
其中,处理器21可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器21可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器21也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器21可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器21还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
另外,存储器22作为资源存储的载体,可以是只读存储器、随机存储器、磁盘或者光盘等,其上所存储的资源可以包括操作系统221、计算机程序222等,存储方式可以是短暂存储或者永久存储。
其中,操作系统221用于管理与控制电子设备20上的各硬件设备以及计算机程序222,以实现处理器21对存储器22中海量数据223的运算与处理,其可以是Windows Server、Netware、Unix、Linux等。计算机程序222除了包括能够用于完成前述任一实施例公开的由电子设备20执行的数据库动态切换方法的计算机程序之外,还可以进一步包括能够用于完成其他特定工作的计算机程序。数据223除了可以包括电子设备接收到的由外部设备传输进来的数据,也可以包括由自身输入输出接口25采集到的数据等。
进一步的,本申请还公开了一种计算机可读存储介质,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现前述公开的数据库动态切换方法。关于该方法的具体步骤可以参考前述实施例中公开的相应内容,在此不再进行赘述。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器RAM(Random Access Memory)、内存、只读存储器ROM(Read Only Memory)、电可编程EPROM(Electrically Programmable Read Only Memory)、电可擦除可编程EEPROM(ElectricErasable Programmable Read Only Memory)、寄存器、硬盘、可移动磁盘、CD-ROM(CompactDisc-Read Only Memory,紧凑型光盘只读储存器)、或技术领域内所公知的任意其它形式的存储介质中。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上对本发明所提供的数据库动态切换方法、装置、设备及介质进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (10)

1.一种数据库动态切换方法,其特征在于,包括:
拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型;
若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;
基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句;
连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。
2.根据权利要求1所述的数据库动态切换方法,其特征在于,所述拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型,包括:
当应用程序启动并执行SQL操作时,生成并向数据库提交针对所述SQL操作的SQL语句;
通过预设SQL执行拦截器拦截所述应用程序提交的所述SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型。
3.根据权利要求2所述的数据库动态切换方法,其特征在于,所述得到依赖表和SQL类型之后,还包括:
判断所述SQL类型是否为查询操作类型,以得到相应的判断结果;
若所述判断结果为所述SQL类型不是查询操作类型,则退出所述预设SQL执行拦截器的拦截进程,并通过与所述SQL语句对应的原始数据库执行所述SQL语句,以返回针对所述SQL语句的结果数据至所述应用程序。
4.根据权利要求3所述的数据库动态切换方法,其特征在于,所述判断所述SQL类型是否为查询操作类型,以得到相应的判断结果之后,还包括:
若所述判断结果为所述SQL类型为查询操作类型,则从存储路由表中查询是否存在与所述依赖表对应的数据库信息;
若不存在,则退出所述预设SQL执行拦截器的拦截进程,并通过与所述SQL语句对应的原始数据库执行所述SQL语句,以返回针对所述SQL语句的结果数据至所述应用程序;
若存在,则对从所述存储路由表中查询的与所述依赖表对应的数据库信息对应的待匹配数据库进行判断;
若仅有一个所述待匹配数据库,则将所述待匹配数据库作为目标数据库,并执行连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序的步骤;
若存在两个以上所述待匹配数据库,则获取包含所述依赖表和对应的待匹配数据库信息的存储路由表。
5.根据权利要求4所述的数据库动态切换方法,其特征在于,所述若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表之前,还包括:
当数据写入各个所述待匹配数据库时,按照路由编号、数据表、存储所述数据表的所述待匹配数据库、所述待匹配数据库的优先级、所述待匹配数据库当前并发数量生成或更新所述存储路由表。
6.根据权利要求4所述的数据库动态切换方法,其特征在于,所述基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句,包括:
按照待匹配数据库的优先级从高到低的顺序逐一匹配所述存储路由表中的所述待匹配数据库的当前并发数量是否小于预设目标并发数量,直至匹配出相应的目标数据库;
将所述目标数据库对应的数据库信息作为目标数据库信息,并通过预设SQL执行拦截器基于所述目标数据库信息将所述SQL语句转化为所述目标数据库的目标SQL语句。
7.根据权利要求1至6任一项所述的数据库动态切换方法,其特征在于,所述连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序,包括:
通过预设SQL执行拦截器从数据库连接池中获取目标数据库,并连接所述目标数据库,以便所述目标数据库执行目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。
8.一种数据库动态切换装置,其特征在于,包括:
语句拦截模块,用于拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型;
表获取模块,用于若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;
信息匹配模块,用于基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句;
数据返回模块,用于连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标SQL语句的目标数据至所述应用程序。
9.一种电子设备,其特征在于,包括:
存储器,用于保存计算机程序;
处理器,用于执行所述计算机程序,以实现如权利要求1至7任一项所述的数据库动态切换方法的步骤。
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的数据库动态切换方法的步骤。
CN202311401901.7A 2023-10-26 2023-10-26 数据库动态切换方法、装置、设备及介质 Pending CN117421362A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311401901.7A CN117421362A (zh) 2023-10-26 2023-10-26 数据库动态切换方法、装置、设备及介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311401901.7A CN117421362A (zh) 2023-10-26 2023-10-26 数据库动态切换方法、装置、设备及介质

Publications (1)

Publication Number Publication Date
CN117421362A true CN117421362A (zh) 2024-01-19

Family

ID=89522429

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311401901.7A Pending CN117421362A (zh) 2023-10-26 2023-10-26 数据库动态切换方法、装置、设备及介质

Country Status (1)

Country Link
CN (1) CN117421362A (zh)

Similar Documents

Publication Publication Date Title
CN107491485B (zh) 生成执行计划的方法、计划单元装置和分布式NewSQL数据库系统
US8661023B1 (en) Optimizing search query logic to speed retrieval
CN111339041A (zh) 文件解析入库、文件生成方法及装置
CN110457277A (zh) 业务处理性能分析方法、装置、设备及存储介质
CN112380180A (zh) 数据同步处理方法、装置、设备及存储介质
US10896180B2 (en) Statement parsing method for database statement
CN110825767A (zh) 数据查询方法、平台、设备及存储介质
US7103885B2 (en) Comment driven processing
CN110580189A (zh) 生成前端页面的方法、装置、计算机设备以及存储介质
CN113360519B (zh) 数据处理方法、装置、设备和存储介质
CN110554875A (zh) 代码转换方法及装置、电子设备、存储介质
CN111897891B (zh) 数据处理方法及装置
CN113434482A (zh) 数据迁移方法、装置、计算机设备及存储介质
CN113901083A (zh) 基于多解析器的异构数据源操作资源解析定位方法和设备
US10872085B2 (en) Recording lineage in query optimization
CN111427784A (zh) 一种数据获取方法、装置、设备及存储介质
CN114356964A (zh) 数据血缘构建方法、装置、存储介质及电子设备
US8433729B2 (en) Method and system for automatically generating a communication interface
US20020052908A1 (en) Information processing method and information
CN117931473A (zh) 编排方法、编排装置、电子设备、存储介质和程序产品
CN115827676A (zh) Sql子查询的执行方法、装置、终端设备以及介质
CN117421362A (zh) 数据库动态切换方法、装置、设备及介质
CN114064601B (zh) 存储过程转换方法、装置、设备和存储介质
JP2976891B2 (ja) リモートデータベースアクセス方法
CN114115908A (zh) 一种指令集生成、程序解析方法装置、设备以及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication