掌桥专利:专业的专利平台
掌桥专利
首页

一种多种数据库混合使用的代理方法及装置

文献发布时间:2023-06-19 19:35:22


一种多种数据库混合使用的代理方法及装置

技术领域

本发明涉及计算机技术领域,特别涉及一种多种数据库混合使用的代理方法及装置。

背景技术

随着近些年来互联网和云计算的快速发展和普及,互联网业务数据量日渐庞大,很多服务端软件依赖的数据库从关系型数据库到文档型数据库,从单一数据库到多种数据库进行混合使用。

目前多数据库混合使用,绝大部分是通过orm框架来实现不同数据库的驱动,从而达到多数据库使用的目的。但是ORM有其自己的局限性:其一,不同的ORM适配不同类型的数据库,比如NoSQL数据库的ORM是很难在关系型数据库中使用的。其二,ORM无法达到定义一种数据结构,各字段的数据源自不同数据库。只能通过代码来进行实现。

还有一种办法是通过数据库代理中间件来解决。但目前数据库代理中间件通常面向的是数据库分库分表的代理层应用,解决的是海量数据情况的分库分表问题,而不是不同数据库的数据聚合问题,其简化了大数据量下单数据库操作的复杂度,并没有降低多种数据来源下操作的复杂度。

发明内容

有鉴于此,本发明实施例的目的在于提供一种多种数据库混合使用的代理方法及装置,能够实现从不同的数据库进行查询并进行不同数据类型的关联和组合,解决了目前混用数据库无法进行统一管理的问题。

第一方面,本发明实施例提供了一种多种数据库混合使用的代理方法,其中,包括:

采集多种数据库的信息,确定各项数据表的数据库来源和各项数据表对应的数据库信息,得到数据表配置。

接收数据表查询请求,在数据表配置中找到待查询的一个或多个数据库,启动对应数据库的连接通信,对数据库进行连接初始化动作。

接收用于调用数据表的查询语句,使用预设的语法规则对所述查询语句进行解构,在对应的一个或多个数据库中找到调用的数据表。

结合第一方面,本发明实施例提供了第一方面的第一种可能的实施方式,其中,所述各项数据表对应的数据库信息包括:

数据表对应的数据库类型。

数据表对应的数据库名。

数据表对应的数据库连接信息。

结合第一方面,本发明实施例提供了第一方面的第二种可能的实施方式,其中,所述启动对应数据库的连接通信,对数据库进行连接初始化动作,包括:

根据待查询的一个或多个数据库,启动对应的一个或多个数据库的socket通信端口。

根据所述数据表配置,获取待查询的一个或多个数据库的相关配置。

根据获取的相关配置,对待查询的一个或多个数据库进行连接初始化动作。

结合第一方面,本发明实施例提供了第一方面的第三种可能的实施方式,其中,接收用于调用数据表的查询语句后,根据当前网络连接的繁忙状态,判断是否进行对所述查询语句进行解构。

若网络连接超过阈值,则暂停对所述查询语句进行解构。

若网络连接未超过阈值,则继续对所述查询语句进行解构。

结合第一方面,本发明实施例提供了第一方面的第四种可能的实施方式,其中,所述使用预设的语法规则对所述查询语句进行解构,包括:

所述预设的语法规则采用MySQL词法或语法规则。

使用MySQL词法或语法规则对所述查询语句校验,若通过,则生成各项数据表节点之间运算关系的关系图。

在关系图的最底层级中找到需要调用的数据表,若没有找到,则返回所述查询语句不合法。

结合第一方面,本发明实施例提供了第一方面的第五种可能的实施方式,其中,所述在对应的一个或多个数据库中找到调用的数据表:

若所述查询语句查询的各数据表的节点属于同一个数据库,则直接通过MySQL执行,得到调用的数据表。

若所述查询语句查询的各数据表的节点属于不同数据库,则对各节点分别进行MySQL执行后,进行函数计算,得到调用的数据表结果集。

结合第一方面,本发明实施例提供了第一方面的第六种可能的实施方式,其中,所述函数计算包括:

根据各节点之间的运算关系进行笛卡尔积运算。

将运算后的节点数据进行标记,得到tmp节点。

将tmp节点进行向上递归运算,得到调用的数据表结果集。

结合第一方面,本发明实施例提供了第一方面的第七种可能的实施方式,其中,各项数据表节点之间的运算关系包括:

平级关联关系,所述平级关联关系包括各数据表节点之间的左联接(leftjoin)、右联接(rightjoin)和内部联接(join、innerjoin)。

指定连接关系,通过设置as关键字,临时在各数据表的节点之间生成指定tmp节点。

来源关系,通过设置from关键字,确定各数据表节点在数据库中对应的层级。

第二方面,本发明实施例还提供了一种多种数据库混合使用的代理装置,其中,包括:

配置中心模块,用于采集多种数据库的信息,确定各项数据表的数据库来源和各项数据表对应的数据库信息,得到数据表配置。

初始化模块,用于接收数据表查询请求,在数据表配置中找到待查询的一个或多个数据库,启动对应数据库的连接通信,对数据库进行连接初始化动作。

socket通信模块,用于接收调用数据表的查询语句。

语句解构模块,用于使用MySQL词法或语法规则对所述查询语句进行解构,在对应的一个或多个数据库中找到调用的数据表。

节点管理模块,用于使用MySQL词法或语法规则对所述查询语句校验,若通过,则生成各项数据表节点之间运算关系的关系图。

执行调用模块,用于若所述查询语句查询的各数据表的节点属于同一个数据库,则直接通过MySQL执行,得到调用的数据表。

函数计算调用模块,用于若所述查询语句查询的各数据表的节点属于不同数据库,则对各节点分别进行MySQL执行后,进行函数计算,得到调用的数据表结果集。

结合第二方面,本发明实施例提供了第二方面的第一种可能的实施方式,其中,所述函数计算调用模块包括:

笛卡尔积运算单元,用于根据各节点之间的运算关系进行笛卡尔积运算。

节点标记单元,用于将运算后的节点数据进行标记,得到tmp节点。

递归运算单元,用于将tmp节点进行向上递归运算,得到调用的数据表结果集。

本发明实施例的有益效果是:

本发明通过预定义查询语句中表的来源,可以执行不同数据库来源(连表使用不同数据库来源)的增删改查语句。语法采用MySQL标准语法,减少使用成本和学习成本,也减少语法解析器和抽象语法树的实现成本。

本发明提供一种基于边车结构、采用配置中心方式、从不同的数据库进行查询并进行不同数据类型的关联和组合的数据库查询方法和装置(中间件),解决了目前混用数据库无法进行统一管理的问题。

本发明的语法解析方式采用MySQL语法,支持市面上大多数的ORM框架,并且配置中的数据库连接可以配置数据库中间件,使用成本低,支持配置的热更新。在简化混合数据库使用的同时,也没有增加程序的使用成本,同时保证了程序的扩展性。

本发明支持不同数据库的连接查询、子查询和嵌套查询,极大地简化了代码中,针对不同数据库的连接管理、数据拼接、嵌套查询的开发工作。在应用层面只要定义好数据来源,在配置中心配置好数据库的连接信息,即可像使用单数据库一样使用混合数据库,降低开发者的开发成本。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明多种数据库混合使用的代理方法的流程图;

图2为本发明多种数据库混合使用的代理方法中对数据库进行连接初始化动作的流程示意图;

图3为本发明多种数据库混合使用的代理方法中使用MySQL词法或语法规则对所述查询语句进行解构的流程示意图;

图4为本发明多种数据库混合使用的代理方法中获得调用的数据表的流程示意图;

图5为本发明多种数据库混合使用的代理方法中函数计算的流程示意图;

图6为本发明多种数据库混合使用的代理方法中各项数据表节点之间的运算关系的示意图;

图7为本发明多种数据库混合使用的代理装置的框架结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件能够以各种不同的配置来布置和设计。

请参照图1,本发明的第一个实施例提供一种多种数据库混合使用的代理方法,包括:

S100,采集多种数据库的信息,确定各项数据表的数据库来源和各项数据表对应的数据库信息,得到数据表配置。

S200,接收数据表查询请求,在数据表配置中找到待查询的一个或多个数据库,启动对应数据库的连接通信,对数据库进行连接初始化动作。

S300,接收用于调用数据表的查询语句,使用预设的语法规则对所述查询语句进行解构,在对应的一个或多个数据库中找到调用的数据表。

具体的,所述各项数据表对应的数据库信息包括:

数据表对应的数据库类型。

数据表对应的数据库名。

数据表对应的数据库连接信息。

具体的,如图2所示,所述启动对应数据库的连接通信,对数据库进行连接初始化动作,包括:

S201,根据待查询的一个或多个数据库,启动对应的一个或多个数据库的socket通信端口。

S202,根据所述数据表配置,获取待查询的一个或多个数据库的相关配置。

S203,根据获取的相关配置,对待查询的一个或多个数据库进行连接初始化动作。

具体的,接收用于调用数据表的查询语句后,根据当前网络连接的繁忙状态,判断是否进行对所述查询语句进行解构。

若网络连接超过阈值,则暂停对所述查询语句进行解构。

若网络连接未超过阈值,则继续对所述查询语句进行解构。

具体的,如图3所示,所述使用预设的语法规则对所述查询语句进行解构,包括:

所述预设的语法规则采用MySQL词法或语法规则。

S301,使用MySQL词法或语法规则对所述查询语句校验,若通过,则生成各项数据表节点之间运算关系的关系图。

S302,在关系图的最底层级中找到需要调用的数据表,若没有找到,则返回所述查询语句不合法。

具体的,如图4所示,所述获得调用的数据表的方法包括:

S303,若所述查询语句查询的各数据表的节点属于同一个数据库,则直接通过MySQL执行,得到调用的数据表。

S304,若所述查询语句查询的各数据表的节点属于不同数据库,则对各节点分别进行MySQL执行后,进行函数计算,得到调用的数据表结果集。

具体的,如图5所示,所述函数计算包括:

S3041,根据各节点之间的运算关系进行笛卡尔积运算。

S3042,将运算后的节点数据进行标记,得到tmp节点。

S3043,将tmp节点进行向上递归运算,得到调用的数据表结果集。

其中,笛卡尔积运算为令A和B是任意两个集合,若序偶的第一个成员是A的元素,第二个成员是B的元素,所有这样的序偶集合,称为集合A和B的笛卡尔乘积或直积。

具体的,如图6所示,各项数据表节点之间的运算关系包括:

平级关联关系,所述平级关联关系包括各数据表节点之间的左联接(leftjoin)、右联接(rightjoin)和内部联接(join、innerjoin)。

左联接的结果集包括子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

右联接是左联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。

内部联接为使用比较运算符,根据每个表共有的列的值匹配两个表中的行。

指定连接关系,通过设置as关键字,临时在各数据表的节点之间生成指定tmp节点。

来源关系,通过设置from关键字,确定各数据表节点在数据库中对应的层级。

其中,关系图用于标记节点和运算关系。节点支持嵌套。

具体的,比如A节点和B节点都是MySQL的同库的数据表,其join查询子语句就直接发送给MySQL执行即可,如果节点是MySQL的不同库的数据表,或是MySQL和一个其他类型数据库的表,则分别执行,并将其结果都拿到后再根据其关联关系(左关联、右关联、内联)进行笛卡尔积运算,并将运算数据进行标记,标记为节点的类型为tmp节点,然后向上递归运算。

请参照图7,本发明的第二个实施例提供一种多种数据库混合使用的代理装置,包括:

配置中心模块,用于采集多种数据库的信息,确定各项数据表的数据库来源和各项数据表对应的数据库信息,得到数据表配置。

初始化模块,用于接收数据表查询请求,在数据表配置中找到待查询的一个或多个数据库,启动对应数据库的连接通信,对数据库进行连接初始化动作。

socket通信模块,用于接收调用数据表的查询语句。

语句解构模块,用于使用MySQL词法或语法规则对所述查询语句进行解构,在对应的一个或多个数据库中找到调用的数据表。

节点管理模块,用于使用MySQL词法或语法规则对所述查询语句校验,若通过,则生成各项数据表节点之间运算关系的关系图。

执行调用模块,用于若所述查询语句查询的各数据表的节点属于同一个数据库,则直接通过MySQL执行,得到调用的数据表。

函数计算调用模块,用于若所述查询语句查询的各数据表的节点属于不同数据库,则对各节点分别进行MySQL执行后,进行函数计算,得到调用的数据表结果集。

其中,若数据量巨大,本发明多种数据库混合使用的代理装置(中间件)的连接配置可选用数据库中间件,如MyCat。

具体的,所述函数计算调用模块包括:

笛卡尔积运算单元,用于根据各节点之间的运算关系进行笛卡尔积运算。

节点标记单元,用于将运算后的节点数据进行标记,得到tmp节点。

递归运算单元,用于将tmp节点进行向上递归运算,得到调用的数据表结果集。

本发明实施例旨在保护一种多种数据库混合使用的代理方法及装置,具备如下效果:

1.本发明通过预定义查询语句中表的来源,可以执行不同数据库来源(连表使用不同数据库来源)的增删改查语句。语法采用MySQL标准语法,减少使用成本和学习成本,也减少语法解析器和抽象语法树的实现成本。

2.本发明提供一种基于边车结构、采用配置中心方式、从不同的数据库进行查询并进行不同数据类型的关联和组合的数据库查询方法和装置(中间件),解决了目前混用数据库无法进行统一管理的问题。

3.本发明的语法解析方式采用MySQL语法,支持市面上大多数的ORM框架,并且配置中的数据库连接可以配置数据库中间件,使用成本低,支持配置的热更新。在简化混合数据库使用的同时,也没有增加程序的使用成本,同时保证了程序的扩展性。

4.本发明支持不同数据库的连接查询、子查询和嵌套查询,极大地简化了代码中,针对不同数据库的连接管理、数据拼接、嵌套查询的开发工作。在应用层面只要定义好数据来源,在配置中心配置好数据库的连接信息,即可像使用单数据库一样使用混合数据库,降低开发者的开发成本。

5.本发明实施例所提供的多种数据库混合使用的代理方法及模块的计算机程序产品,包括存储了程序代码的计算机可读存储介质,程序代码包括的指令可用于执行前面方法实施例中的方法,具体实现可参见方法实施例,在此不再赘述。

具体地,该存储介质能够为通用的存储介质,如移动磁盘、硬盘等,该存储介质上的计算机程序被运行时,能够执行上述多种数据库混合使用的代理方法,从而能够实现从不同的数据库进行查询并进行不同数据类型的关联和组合,解决了目前混用数据库无法进行统一管理的问题。

所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上所述实施例,仅为本发明的具体实施方式,用以说明本发明的技术方案,而非对其限制,本发明的保护范围并不局限于此,尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。

相关技术
  • 一种实现多种类型的数据库融合使用的方法
  • 一种染色机用多种染料混合的搅拌装置
  • 一种制药用多种药物粉碎混合装置
  • 一种养殖场专用多种饲料混合配比智能装置及使用方法
  • 一种喷涂原料生产中使用的多种喷涂原料混合装置
技术分类

06120115967867