本发明涉及计算机,特别涉及一种多种数据库混合使用的代理方法及装置。
背景技术:
1、随着近些年来互联网和云计算的快速发展和普及,互联网业务数据量日渐庞大,很多服务端软件依赖的数据库从关系型数据库到文档型数据库,从单一数据库到多种数据库进行混合使用。
2、目前多数据库混合使用,绝大部分是通过orm框架来实现不同数据库的驱动,从而达到多数据库使用的目的。但是orm有其自己的局限性:其一,不同的orm适配不同类型的数据库,比如nosql数据库的orm是很难在关系型数据库中使用的。其二,orm无法达到定义一种数据结构,各字段的数据源自不同数据库。只能通过代码来进行实现。
3、还有一种办法是通过数据库代理中间件来解决。但目前数据库代理中间件通常面向的是数据库分库分表的代理层应用,解决的是海量数据情况的分库分表问题,而不是不同数据库的数据聚合问题,其简化了大数据量下单数据库操作的复杂度,并没有降低多种数据来源下操作的复杂度。
技术实现思路
1、有鉴于此,本发明实施例的目的在于提供一种多种数据库混合使用的代理方法及装置,能够实现从不同的数据库进行查询并进行不同数据类型的关联和组合,解决了目前混用数据库无法进行统一管理的问题。
2、第一方面,本发明实施例提供了一种多种数据库混合使用的代理方法,其中,包括:
3、采集多种数据库的信息,确定各项数据表的数据库来源和各项数据表对应的数据库信息,得到数据表配置。
4、接收数据表查询请求,在数据表配置中找到待查询的一个或多个数据库,启动对应数据库的连接通信,对数据库进行连接初始化动作。
5、接收用于调用数据表的查询语句,使用预设的语法规则对所述查询语句进行解构,在对应的一个或多个数据库中找到调用的数据表。
6、结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述各项数据表对应的数据库信息包括:
7、数据表对应的数据库类型。
8、数据表对应的数据库名。
9、数据表对应的数据库连接信息。
10、结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述启动对应数据库的连接通信,对数据库进行连接初始化动作,包括:
11、根据待查询的一个或多个数据库,启动对应的一个或多个数据库的socket通信端口。
12、根据所述数据表配置,获取待查询的一个或多个数据库的相关配置。
13、根据获取的相关配置,对待查询的一个或多个数据库进行连接初始化动作。
14、结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,接收用于调用数据表的查询语句后,根据当前网络连接的繁忙状态,判断是否进行对所述查询语句进行解构。
15、若网络连接超过阈值,则暂停对所述查询语句进行解构。
16、若网络连接未超过阈值,则继续对所述查询语句进行解构。
17、结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,所述使用预设的语法规则对所述查询语句进行解构,包括:
18、所述预设的语法规则采用mysql词法或语法规则。
19、使用mysql词法或语法规则对所述查询语句校验,若通过,则生成各项数据表节点之间运算关系的关系图。
20、在关系图的最底层级中找到需要调用的数据表,若没有找到,则返回所述查询语句不合法。
21、结合第一方面,本发明实施例提供了第一方面的第五种可能的实施方式,其中,所述在对应的一个或多个数据库中找到调用的数据表:
22、若所述查询语句查询的各数据表的节点属于同一个数据库,则直接通过mysql执行,得到调用的数据表。
23、若所述查询语句查询的各数据表的节点属于不同数据库,则对各节点分别进行mysql执行后,进行函数计算,得到调用的数据表结果集。
24、结合第一方面,本发明实施例提供了第一方面的第六种可能的实施方式,其中,所述函数计算包括:
25、根据各节点之间的运算关系进行笛卡尔积运算。
26、将运算后的节点数据进行标记,得到tmp节点。
27、将tmp节点进行向上递归运算,得到调用的数据表结果集。
28、结合第一方面,本发明实施例提供了第一方面的第七种可能的实施方式,其中,各项数据表节点之间的运算关系包括:
29、平级关联关系,所述平级关联关系包括各数据表节点之间的左联接(leftjoin)、右联接(rightjoin)和内部联接(join、innerjoin)。
30、指定连接关系,通过设置as关键字,临时在各数据表的节点之间生成指定tmp节点。
31、来源关系,通过设置from关键字,确定各数据表节点在数据库中对应的层级。
32、第二方面,本发明实施例还提供了一种多种数据库混合使用的代理装置,其中,包括:
33、配置中心模块,用于采集多种数据库的信息,确定各项数据表的数据库来源和各项数据表对应的数据库信息,得到数据表配置。
34、初始化模块,用于接收数据表查询请求,在数据表配置中找到待查询的一个或多个数据库,启动对应数据库的连接通信,对数据库进行连接初始化动作。
35、socket通信模块,用于接收调用数据表的查询语句。
36、语句解构模块,用于使用mysql词法或语法规则对所述查询语句进行解构,在对应的一个或多个数据库中找到调用的数据表。
37、节点管理模块,用于使用mysql词法或语法规则对所述查询语句校验,若通过,则生成各项数据表节点之间运算关系的关系图。
38、执行调用模块,用于若所述查询语句查询的各数据表的节点属于同一个数据库,则直接通过mysql执行,得到调用的数据表。
39、函数计算调用模块,用于若所述查询语句查询的各数据表的节点属于不同数据库,则对各节点分别进行mysql执行后,进行函数计算,得到调用的数据表结果集。
40、结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,所述函数计算调用模块包括:
41、笛卡尔积运算单元,用于根据各节点之间的运算关系进行笛卡尔积运算。
42、节点标记单元,用于将运算后的节点数据进行标记,得到tmp节点。
43、递归运算单元,用于将tmp节点进行向上递归运算,得到调用的数据表结果集。
44、本发明实施例的有益效果是:
45、本发明通过预定义查询语句中表的来源,可以执行不同数据库来源(连表使用不同数据库来源)的增删改查语句。语法采用mysql标准语法,减少使用成本和学习成本,也减少语法解析器和抽象语法树的实现成本。
46、本发明提供一种基于边车结构、采用配置中心方式、从不同的数据库进行查询并进行不同数据类型的关联和组合的数据库查询方法和装置(中间件),解决了目前混用数据库无法进行统一管理的问题。
47、本发明的语法解析方式采用mysql语法,支持市面上大多数的orm框架,并且配置中的数据库连接可以配置数据库中间件,使用成本低,支持配置的热更新。在简化混合数据库使用的同时,也没有增加程序的使用成本,同时保证了程序的扩展性。
48、本发明支持不同数据库的连接查询、子查询和嵌套查询,极大地简化了代码中,针对不同数据库的连接管理、数据拼接、嵌套查询的开发工作。在应用层面只要定义好数据来源,在配置中心配置好数据库的连接信息,即可像使用单数据库一样使用混合数据库,降低开发者的开发成本。