System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术涉及大数据仓库,特别涉及数据库动态切换方法、装置、设备及介质。
技术介绍
1、大数据仓库领域,是典型的读写分离、先写后读(查询)。根据数据存储(即数据库)的不同,编写不同的读写sql((structured query language,结构化查询语言),并且写是强依赖数据库。随着数仓建设的推进,基于性能或架构设计考虑,经常会遇到数据库迁移或切换的操作。例如:原先存储在hive数据库的数据,需要迁移或同步到clickhouse数据库,以便实现高效数据查询。迁移或同步,业界有成熟的方案,比如datax等。但是存量的查询(读)功能在做了数据迁移或同步后,基于性能等考虑,需要走新的数据库查询。为此要保持应用程序运行正常,需要将应用程序功能接口中的sql语句进行修改,从hive支持的sql语句,改成clickhouse支持的sql语句。即sql方言改写。将应用程序中的数据库驱动,从hive改成clickhouse。这种做法,对现有程序的侵入性和改动量较大。对于少量接口而言,这个工作还能接受。对于大量接口,随着接口数增加,每一个接口对应的查询sql的切换开发,都需要经过充分的测试和验证,这个改造适配工作会变得很庞大。而且每切换一个数据库,上述工作都需要重新来一遍,费时费力。并且当完成数据同步后,同样一份数据,存在于多个数据库,基于数据量或并发等考虑,需要动态切换到不同数据库查询,实现最大效率。现有的动态区切换数据库的方法准备多份sql方言,每种数据库对应一个sql方言。根据规则,动态选择数据库驱动执行对应的sql方言。对现在程序
2、综上,如何实现应用程序侧在查询数据时,保证查询sql不变,实现底层数据库的动态切换是本领域有待解决的技术问题。
技术实现思路
1、有鉴于此,本专利技术的目的在于提供数据库动态切换方法、装置、设备及介质,能够实现应用程序侧在查询数据时,保证查询sql不变,实现底层数据库的动态切换。其具体方案如下:
2、第一方面,本申请公开了一种数据库动态切换方法,包括:
3、拦截通过应用程序提交的sql语句,并解析所述sql语句,以得到依赖表和sql类型;
4、若所述sql类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;
5、基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述sql语句转化为目标数据库的目标sql语句;
6、连接所述目标数据库,以便所述目标数据库执行所述目标sql语句,并返回针对所述目标sql语句的目标数据至所述应用程序。
7、可选的,所述拦截通过应用程序提交的sql语句,并解析所述sql语句,以得到依赖表和sql类型,包括:
8、当应用程序启动并执行sql操作时,生成并向数据库提交针对所述sql操作的sql语句;
9、通过预设sql执行拦截器拦截所述应用程序提交的所述sql语句,并解析所述sql语句,以得到依赖表和sql类型。
10、可选的,所述得到依赖表和sql类型之后,还包括:
11、判断所述sql类型是否为查询操作类型,以得到相应的判断结果;
12、若所述判断结果为所述sql类型不是查询操作类型,则退出所述预设sql执行拦截器的拦截进程,并通过与所述sql语句对应的原始数据库执行所述sql语句,以返回针对所述sql语句的结果数据至所述应用程序。
13、可选的,所述判断所述sql类型是否为查询操作类型,以得到相应的判断结果之后,还包括:
14、若所述判断结果为所述sql类型为查询操作类型,则从存储路由表中查询是否存在与所述依赖表对应的数据库信息;
15、若不存在,则退出所述预设sql执行拦截器的拦截进程,并通过与所述sql语句对应的原始数据库执行所述sql语句,以返回针对所述sql语句的结果数据至所述应用程序;
16、若存在,则对从所述存储路由表中查询的与所述依赖表对应的数据库信息对应的待匹配数据库进行判断;
17、若仅有一个所述待匹配数据库,则将所述待匹配数据库作为目标数据库,并执行连接所述目标数据库,以便所述目标数据库执行所述目标sql语句,并返回针对所述目标sql语句的目标数据至所述应用程序的步骤;
18、若存在两个以上所述待匹配数据库,则获取包含所述依赖表和对应的待匹配数据库信息的存储路由表。
19、可选的,所述若所述sql类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表之前,还包括:
20、当数据写入各个所述待匹配数据库时,按照路由编号、数据表、存储所述数据表的所述待匹配数据库、所述待匹配数据库的优先级、所述待匹配数据库当前并发数量生成或更新所述存储路由表。
21、可选的,所述基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述sql语句转化为目标数据库的目标sql语句,包括:
22、按照待匹配数据库的优先级从高到低的顺序逐一匹配所述存储路由表中的所述待匹配数据库的当前并发数量是否小于预设目标并发数量,直至匹配出相应的目标数据库;
23、将所述目标数据库对应的数据库信息作为目标数据库信息,并通过预设sql执行拦截器基于所述目标数据库信息将所述sql语句转化为所述目标数据库的目标sql语句。
24、可选的,所述连接所述目标数据库,以便所述目标数据库执行所述目标sql语句,并返回针对所述目标sql语句的目标数据至所述应用程序,包括:
25、通过预设sql执行拦截器从数据库连接池中获取目标数据库,并连接所述目标数据库,以便所述目标数据库执行目标sql语句,并返回针对所述目标sql语句的目标数据至所述应用程序。
26、第二方面,本申请公开了一种数据库动态切换装置,包括:
27、语句拦截模块,用于拦截通过应用程序提交的sql语句,并解析所述sql语句,以得到依赖表和sql类型;
28、表获取模块,用于若所述sql类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表;
29、信息匹配模块,用于基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述sql语句转化为目标数据库的目标sql语句;
30、数据返回模块,用于连接所述目标数据库,以便所述目标数据库执行所述目标sql语句,并返回针对所述目标sql语句的目标数据至所述应用程序。
31、第三方面,本申请公开了一种电子设备,包括:
32、存储器,用于保存计算机程序;
33、处理器,用于执行所述计算机程序,以实现前述公开的数据库动态切换方法的步骤。
34、第四方面,本申请公开了一本文档来自技高网...
【技术保护点】
1.一种数据库动态切换方法,其特征在于,包括:
2.根据权利要求1所述的数据库动态切换方法,其特征在于,所述拦截通过应用程序提交的SQL语句,并解析所述SQL语句,以得到依赖表和SQL类型,包括:
3.根据权利要求2所述的数据库动态切换方法,其特征在于,所述得到依赖表和SQL类型之后,还包括:
4.根据权利要求3所述的数据库动态切换方法,其特征在于,所述判断所述SQL类型是否为查询操作类型,以得到相应的判断结果之后,还包括:
5.根据权利要求4所述的数据库动态切换方法,其特征在于,所述若所述SQL类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表之前,还包括:
6.根据权利要求4所述的数据库动态切换方法,其特征在于,所述基于预设匹配规则从所述存储路由表中匹配出目标数据库信息,以便将所述SQL语句转化为目标数据库的目标SQL语句,包括:
7.根据权利要求1至6任一项所述的数据库动态切换方法,其特征在于,所述连接所述目标数据库,以便所述目标数据库执行所述目标SQL语句,并返回针对所述目标S
8.一种数据库动态切换装置,其特征在于,包括:
9.一种电子设备,其特征在于,包括:
10.一种计算机可读存储介质,其特征在于,用于存储计算机程序;其中,所述计算机程序被处理器执行时实现如权利要求1至7任一项所述的数据库动态切换方法的步骤。
...【技术特征摘要】
1.一种数据库动态切换方法,其特征在于,包括:
2.根据权利要求1所述的数据库动态切换方法,其特征在于,所述拦截通过应用程序提交的sql语句,并解析所述sql语句,以得到依赖表和sql类型,包括:
3.根据权利要求2所述的数据库动态切换方法,其特征在于,所述得到依赖表和sql类型之后,还包括:
4.根据权利要求3所述的数据库动态切换方法,其特征在于,所述判断所述sql类型是否为查询操作类型,以得到相应的判断结果之后,还包括:
5.根据权利要求4所述的数据库动态切换方法,其特征在于,所述若所述sql类型为查询操作类型,则获取包含所述依赖表和多个对应的数据库信息的存储路由表之前,还包括:
6....
【专利技术属性】
技术研发人员:刘志超,李尼科,周雁鸣,潘斌,谭磊,陈梦晨,
申请(专利权)人:湖南长银五八消费金融股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。