基于动态多数据源的数据库适配装置及方法与流程

文档序号:29495180发布日期:2022-04-06 14:58阅读:497来源:国知局
基于动态多数据源的数据库适配装置及方法与流程

1.本发明涉及数据库技术领域,具体地说是基于动态多数据源的数据库适配装置及方法。


背景技术:

2.在业务系统多元化的情况下,对数据处理、数据应用的需求和系统越来越多,对接动态多数据源需解决数据库语法不一致,驱动动态加载、驱动动态扩展的问题,开发过程复杂且易出错。
3.orm(object relational mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用xml格式,并且存放在专门的对象一映射文件中。主要为持久化类与表的映射关系,运行时将对象持久化到数据库中。利用该技术可以不用sql直接编码,能够通过操作对象直接操作数据库,屏蔽底层数据库的差异。该技术最大作用可将复杂sql屏蔽,但是解决不了复杂sql多数据源运行的问题。
4.springboot多数据源配置,可解决多数据源、动态数据源的问题。系统应用的多数据源需在配置文件中进行数据源的配置,并可配置对应的路由。该技术适合业务系统多数据源固定的情况或读写分离的业务场景,基于多源数据(数据应用过程中,数据来源于多种类型数据库)动态配置、动态扩展的情况该技术无法支持。
5.如何解决动态对接多源数据(数据处理应用过程中,数据来源于多种类型数据库)执行开发复杂度高的问题,是需要解决的技术问题。


技术实现要素:

6.本发明的技术任务是针对以上不足,提供基于动态多数据源的数据库适配装置及方法,来解决如何解决动态对接多源数据执行开发复杂度高的技术问题。
7.第一方面,本发明的基于动态多数据源的数据库适配装置,用于封装底层数据库差异,所述装置包括:
8.内存数据库,所述内存数据库用于存储数据源信息,所述数据源信息包括数据源编码和数据源具体信息,所述数据源具体信息包括数据库类型和数据库连接信息;
9.数据库关键字库,所述数据库关键字库用于存储已适配数据库类型的所有关键字;
10.语法差异库,所述语法差异库用于存储语法差异,所述语法差异为关系型数据库之间语法内容的差异;
11.语法适配器,所述语法适配器与所述内存数据库、数据库关键字库以及语法差异库交互,用于接收由sql语句和数据库信息组成的参数,所述数据库信息为数据库编码或数据源具体信息,用于基于数据库信息获取数据库类型,并基于数据库类型对sql语句进行语法解析和转换,得到适配sql语句;
12.sql执行器,所述sql执行器与所述语法适配器交互,用于基于数据库类型加载驱
动对应的数据库,数据库执行适配sql语句后输出执行结果。
13.作为优选,所述语法差异的内容包括:
14.分页差异,所述分页差异为不同数据库之间的分页语法;
15.字段映射,所述字段映射为不同数据库不同字段类型映射,字段映射用于ddl语句执行,支撑数据库表创建;
16.函数差异,所述函数差异为各类数据库内置函数映射信息,函数信息用于查询sql执行;
17.所述语法差异的内容分别以库表的形式存储于语法差异库中。
18.作为优选,所述语法适配器用于通过如下步骤得到适配sql语句:
19.基于数据库关键字库中已适配数据库类型的所有关键字,对sql语句进行语句关键字解析,得到解析后sql语句;
20.如果数据库信息为数据源编码,则从内存数据库中查询对应的数据库类型,如果数据库信息为数据源具体信息,则读取数据库类型;
21.基于数据库类型从语法差异库中查询对应的sql语句模板;
22.基于解析后sql语句对sql语句模板进行变量替换,得到适配sql语句。
23.作为优选,所述sql执行器用于通过如步骤实现基于数据库类型加载驱动对应的数据库:
24.如果接收的数据库信息为数据源编码,从内存数据库中查询对应的数据库连接信息,如果接收的数据库信息为数据源具体信息,则读取数据库连接信息;
25.基于数据库连接信息,判断连接池中是否存在连接;
26.如果存在,将适配后sql语句加载至对应数据库,以便于对应数据库执行适配sql语句后输出执行结果;
27.如果不存在,基于数据库连接信息动态创建数据库驱动,并基于数据库驱动创建连接,建立连接后,将适配后sql语句加载至对应数据库,以便于对应数据库执行适配sql语句后输出执行结果。
28.作为优选,所述装置适配有数据服务接口,所述数据服务接口保存于数据库配置表中,用于基于多源数据库表配置查询接口的出参、入参、请求方式以及请求url信息,并用于基于出参及入参生成对应的sql语句;
29.所述装置启动时,基于数据源信息调用对应的数据服务接口,并将数据服务接口信息加载至内存数据库中,在内存数据库中,key为请求url,value为对应的数据源信息或对应的数据源信息和sql语句,所述装置基于传入的url查询对应的sql语句和数据源信息,将所述sql语句和数据源信息作为接收参数。
30.第二方面,本发明的基于动态多数据源的数据库适配方法,应用于如第一方面任一项所述的基于动态多数据源的数据库适配装置,所述方法包括如下步骤:
31.在内存数据库中预存储数据源信息,所述数据源信息包括数据源编码和数据源具体信息,所述数据源具体信息包括数据库类型和数据库连接信息;
32.在数据库关键字库中预存储已适配数据库类型的所有关键字;
33.在语法差异库中预存储语法差异,所述语法差异为关系型数据库之间语法内容的差异;
34.接收由sql语句和数据库信息组成的参数,所述数据库信息为数据库编码或数据源具体信息,基于数据库信息获取数据库类型,并基于数据库类型对sql语句进行语法解析和转换,得到适配sql语句;
35.基于数据库类型加载驱动对应的数据库,数据库执行适配sql语句后输出执行结果。
36.作为优选,所述语法差异的内容包括:
37.分页差异,所述分页差异为不同数据库之间的分页语法;
38.字段映射,所述字段映射为不同数据库不同字段类型映射,字段映射用于ddl语句执行,支撑数据库表创建;
39.函数差异,所述函数差异为各类数据库内置函数映射信息,函数信息用于查询sql执行;
40.所述语法差异的内容均以库表的形式存储于语法差异库中。
41.作为优选,通过如下步骤得到适配sql语句:
42.基于数据库关键字库中已适配数据库类型的所有关键字,对sql语句进行语句关键字解析,得到解析后sql语句;
43.如果数据库信息为数据源编码,则从内存数据库中查询对应的数据库类型,如果数据库信息为数据源具体信息,则读取数据库类型;
44.基于数据库类型从语法差异库中查询对应的sql语句模板;
45.基于解析后sql语句对sql语句模板进行变量替换,得到适配sql语句。
46.作为优选,通过如步骤实现基于数据源编码加载驱动对应的数据库:
47.如果接收的数据库信息为数据源编码,从内存数据库中查询对应的数据库连接信息,如果接收的数据库信息为数据源具体信息,则读取数据库连接信息;
48.基于数据库连接信息,判断连接池中是否存在连接;
49.如果存在,将适配后sql语句加载至对应数据库,以便于对应数据库执行适配sql语句后输出执行结果;
50.如果不存在,基于数据库连接信息动态创建数据库驱动,并基于数据库驱动创建连接,建立连接后,将适配后sql语句加载至对应数据库,以便于对应数据库执行适配sql语句后输出执行结果。
51.作为优选,所述装置启动时,基于数据源信息调用对应的数据服务接口,并将数据服务接口信息加载至内存数据库中,在内存数据库中,key为请求url,value为对应的数据源信息或对应的数据源信息和sql语句,所述装置基于传入的url查询对应的sql语句和数据源信息,将所述sql语句和数据源信息作为接收参数;
52.所述数据服务接口保存于数据库配置表中,用于基于多源数据库表配置查询接口的出参、入参、请求方式以及请求url信息,并用于基于出参及入参生成对应的sql语句。
53.本发明的基于动态多数据源的数据库适配装置及方法具有以下优点:
54.1、梳理数据库语法内容,并将语法差异存储在语法差异库中,基于输入的sql语句和数据源编码或数据源具体信息,,查找对应的数据库类型,借助语法差异库,通过sql适配器对sql语句进行解析转换为适配sql语句,并通过sql执行器加载对应的数据库,从而数据库可执行适配sql语句,通过该装置可实现多种数据源的数据库适配;
55.2、sql执行器加载对应的数据库时,首先根据数据库连接信息判断连接池中是否存在连接,如果存在则直接加载驱动对应的数据库,如果不存在则根据数据库连接信息加载驱动并通过驱动加载对应的数据库,使用数据库连接池技术,提高数据库查询效率;
56.3、语法适配器、sql执行引擎松耦合设计,插件化组装使用,可单独加载语法适配器实现语法转换功能,也可单独加载sql执行引擎,作为数据库查询引擎或数据库持久化层,在实际应用过程中,可作为第三方jar进行引用使用,也可作为微服务单独运行。使用方式、运行方式灵活,应用场景多样。
附图说明
57.为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
58.下面结合附图对本发明进一步说明。
59.图1为是实施例1基于动态多数据源的数据库适配装置的结构框图;
60.图2为实施例1基于动态多数据源的数据库适配装置生成适配sql语句的流程框图;
61.图3为实施例1基于动态多数据源的数据库适配装置进行数据库连接的流程框图。
具体实施方式
62.下面结合附图和具体实施例对本发明作进一步说明,以使本领域的技术人员可以更好地理解本发明并能予以实施,但所举实施例不作为对本发明的限定,在不冲突的情况下,本发明实施例以及实施例中的技术特征可以相互结合。
63.本发明实施例提供基于动态多数据源的数据库适配装置及方法,用于解决如何解决动态对接多源数据执行开发复杂度高的技术问题的技术问题。
64.实施例1:
65.本发明基于动态多数据源的数据库适配装置,包括内存数据库、数据库关键字库、语法差异库、语法适配器以及sql执行器,内存数据库用于存储数据源信息,数据源信息包括数据源编码和数据源具体信息,数据源具体信息包括数据库类型和数据库连接信息;数据库关键字库用于存储已适配数据库类型的所有关键字;语法差异库用于存储语法差异,所述语法差异为关系型数据库之间语法内容的差异;语法适配器与所述内存数据库、数据库关键字库以及语法差异库交互,用于接收由sql语句和数据库信息组成的参数,所述数据库信息为数据库编码或数据源具体信息,用于基于数据库信息获取数据库类型,并基于数据库类型对sql语句进行语法解析和转换,得到适配sql语句;sql执行器与所述语法适配器交互,用于基于数据库类型加载驱动对应的数据库,数据库执行适配sql语句后输出执行结果。
66.本实施例中,语法适配器可接受参数为sql语句和数据库信息,数据库信息为数据源编码或数据源具体信息。
67.内存数据库中数据源信息为提前加载的,以减少内部运行耗时。数据源据具体信
息涉及数据库类型、数据库连接信息、数据库用户名、数据库密码及数据库部署服务器信息等。即本技术中接受的参数为sql语句和数据源信息。
68.语法差异库中语法差异为预先加载的,为语法适配器提供语法支撑。语法差异库包含数据库间语法内容差异,以数据库表方式存储,方便进行数据源扩展。语法差异内容包含分页、字段类型映射及函数。分页信息表存储不同数据库的分页语法,例如mysql语法:
69.select#body limit#offset,#pagesize
70.其中#body、#offset、#pagesize为不同位置参数。字段映射表存储不同数据库不同字段类型映射,字段映射主要用于ddl语句执行,支撑表创建。函数表存储各类数据库内置函数映射信息,函数信息用于查询sql执行。
71.语法适配器接受sql语句和数据库信息后,首先,基于语法差异库内容进行sql语法转换。具体为:语法适配器接收sql语句,进行语句关键字解析,本装置数据库关键字库需收录已适配数据库类型的所有关键字,基于关键字进行sql语法分析,提取语句的#body、#offset、#pagesize等参数信息。然后,基于数据库类型从语法差异库中查询对应的sql模板,如果接收的数据库信息为数据库编码,则需要基于数据库编码从内存数据库中查询对应的数据库类型,如果接收的数据库信息为数据源具体信息,则直接获取数据库类型。最后,根据解析的sql语句参数对sql模板进行变量替换,生成适配sql语句。
72.sql执行器根据传入数据源编码或者数据库类型获取对应加载驱动,动态加载驱动,执行适配后sql语句,输出执行结果。sql执行器中具体流程为:
73.如果数据库信息为数据源编码,则根据数据源编码从内存数据库中查询对应的数据库连接信息,如果是数据源具体信息,则直接获取数据源连接信息;
74.基于数据源连接信息,判断连接池中是否存在连接,如果不存在则加载驱动并基于驱动动态创建连接;
75.建立连接后,将适配sql语句传入数据库,数据库执行适配sql语句后,返回执行结果。
76.其中,该装置适配有数据服务接口,数据服务接口保存于数据库配置表中,数据服务接口基于多源数据库表配置查询接口的出参、入参、请求方式、请求url等信息,并根据出入参生成对应的数据库查询sql。数据服务接口发布后,用户申请使用,用户调用发布后的数据服务接口url,请求至网关,网关转发请求至本发明装置。
77.本装置启动时加载数据服务接口信息至内存数据库(redis数据库)中,redis中key为请求url,value为对应数据源信息和sql语句。本装置根据传入url获取查询sql和数据库信息,根据sql和数据库信息进行sql转换,生成适配数据库类型的sql,并加载对应数据库驱动,执行适配sql,返回查询结果信息。
78.该装置在使用中作为微服务部署,独立运行,并可部署负载集群,代理至nginx中,提高查询效率。
79.该装置中语法适配器、sql执行引擎松耦合设计,插件化组装使用,可单独加载语法适配器实现语法转换功能,也可单独加载sql执行引擎,作为数据库查询引擎或数据库持久化层。在实际应用过程中,可作为第三方jar进行引用使用,也可作为微服务单独运行。使用方式、运行方式灵活,应用场景多样。
80.实施例2:
81.本发明基于动态多数据源的数据库适配方法,应用于实施例1公开的基于动态多数据源的数据库适配装置,该方法包括如下步骤:
82.s100、在内存数据库中预存储数据源信息,数据源信息包括数据源编码和数据源具体信息,数据源具体信息包括数据库类型和数据库连接信息;
83.在数据库关键字库中预存储已适配数据库类型的所有关键字;
84.在语法差异库中预存储语法差异,语法差异为关系型数据库之间语法内容的差异;
85.s200、接收由sql语句和数据库信息组成的参数,数据库信息为数据库编码或数据源具体信息,基于数据库信息获取数据库类型,并基于数据库类型对sql语句进行语法解析和转换,得到适配sql语句;
86.s200、基于数据库类型加载驱动对应的数据库,数据库执行适配sql语句后输出执行结果。
87.语法适配器可接受参数为sql语句和数据库信息,数据库信息为数据源编码或数据源具体信息。
88.内存数据库中数据源信息为提前加载的,以减少内部运行耗时。数据源据具体信息涉及数据库类型、数据库连接信息、数据库用户名、数据库密码及数据库部署服务器信息等。即本技术中接受的参数为sql语句和数据源信息。
89.语法差异库中语法差异为预先加载的,为语法适配器提供语法支撑。语法差异库包含数据库间语法内容差异,以数据库表方式存储,方便进行数据源扩展。语法差异内容包含分页、字段类型映射及函数。分页信息表存储不同数据库的分页语法,例如mysql语法:
90.select#body limit#offset,#pagesize
91.其中#body、#offset、#pagesize为不同位置参数。字段映射表存储不同数据库不同字段类型映射,字段映射主要用于ddl语句执行,支撑表创建。函数表存储各类数据库内置函数映射信息,函数信息用于查询sql执行。
92.语法适配器接受sql语句和数据库信息后,首先,基于语法差异库内容进行sql语法转换。具体为:语法适配器接收sql语句,进行语句关键字解析,本装置数据库关键字库需收录已适配数据库类型的所有关键字,基于关键字进行sql语法分析,提取语句的#body、#offset、#pagesize等参数信息。然后,基于数据库类型从语法差异库中查询对应的sql模板,如果接收的数据库信息为数据库编码,则需要基于数据库编码从内存数据库中查询对应的数据库类型,如果接收的数据库信息为数据源具体信息,则直接获取数据库类型。最后,根据解析的sql语句参数对sql模板进行变量替换,生成适配sql语句。
93.sql执行器根据传入数据源编码或者数据库类型获取对应加载驱动,动态加载驱动,数据库执行适配sql语句后输出执行结果。sql执行器中具体流程为:
94.如果数据库信息为数据源编码,则根据数据源编码从内存数据库中查询对应的数据库连接信息,如果是数据源具体信息,则直接获取数据源连接信息;
95.基于数据源连接信息,判断连接池中是否存在连接,如果不存在则加载驱动并基于驱动动态创建连接;
96.建立连接后,将适配sql语句传入数据库,数据库执行适配sql语句后,输出执行结果。
97.本实施例中,基于多源数据库表发布数据服务接口中作为数据库执行引擎微服务单独运行使用。数据服务接口基于多源数据库表配置查询接口的出参、入参、请求方式、请求url等信息,并根据出入参生成对应的数据库查询sql,保存至数据库配置表中。接口发布后,用户申请使用。用户调用发布后的数据服务接口url,请求至网关,网关转发请求至本发明装置。
98.使用过程中,加载数据服务接口信息至内存数据库(redis数据库)中,redis中key为请求url,value为对应数据源信息和执行sql。实施例1公开的适配装置根据传入url获取查询sql和数据库信息,根据sql和数据库信息进行进行sql转换,生成适配数据库类型的sql,并加载对应数据库驱动,执行适配sql,返回查询结果信息。
99.上文通过附图和优选实施例对本发明进行了详细展示和说明,然而本发明不限于这些已揭示的实施例,基与上述多个实施例本领域技术人员可以知晓,可以组合上述不同实施例中的代码审核手段得到本发明更多的实施例,这些实施例也在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1