通过数据库中间件查询数据的方法和数据库中间件的制作方法

文档序号:6548696阅读:276来源:国知局
通过数据库中间件查询数据的方法和数据库中间件的制作方法
【专利摘要】本发明公开了一种通过数据库中间件查询数据的方法和数据库中间件,其中,该方法包括:数据库中间件接收访问请求,访问请求携带有检索条件;数据库中间件根据检索条件对多个数据库进行检索,以找到符合检索条件的数据信息。本发明通过数据库中间件接收访问请求,利用数据库中间件按照访问请求中的检索条件进行检索,通过该方法得到数据信息,其通过数据库中间件处理原来需要开发人员完成的工作,处理时间和处理速度都有较大提升,解决了现有技术的架构下,开发人员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员的时间和精力的问题。
【专利说明】通过数据库中间件查询数据的方法和数据库中间件

【技术领域】
[0001] 本发明涉及网络领域,特别是涉及一种通过数据库中间件查询数据的方法和数据 库中间件。

【背景技术】
[0002] 随着网络的日益发展,各个网站的访问量和数据量都与日俱增,系统由原有的基 于数据库的存储方式发展成多种的数据存储方式并存,数据库架构也就变得越来越复杂, 现有的单一的数据库已经满足不了原来的需求,进而发展成多种解决问题的实现方式,需 要满足以下条件:对数据库进行读写分离;采用数据库前端加缓存的方式;采用分库分表 的方式来提升集群的响应能力和存储容量。
[0003] 在这同时,由于系统的发展,网络公司的发展也变得越来越庞大,部门划分越来越 多,各个技术部门由于解决问题的场景各自不一样,要求也不一样,导致了各个部门采用的 技术体系不一样,譬如有些部门采用java语言进行业务开发,有些部门采用C++等进行业 务开发,不同的业务开发语言也会带来很多不一样的访问方式,java语言采用jdbc的方 式,而C、C++、PHP等采用开放数据库互连(Open Database Connectivity,简称为ODBC)的 方式,存在着不同异构的系统。
[0004] 由于技术架构的变更,由单一的简单直接的方式访问,变成复杂的异构的方式,系 统架构越来越复杂,开发和维护难度越来越难,出错几率越来越大,可扩展和可维护性比较 弱。
[0005] 现有架构下,如某一线工程的开发人员想要调用相应的程序,其需要对多个存储 不同语言或不同业务的服务器进行访问,访问时,异构的系统访问过程较为复杂,且访问后 还需要对得到的结果进行处理,以得数据信息,过程繁琐复杂,极大的浪费开发人员的时间 和精力。
[0006] 现有对数据库的访问,大多数是在应用编码中实现的,像开源社区的Mysql proxy,采用的是基于mysql协议,通过lua脚本进行编程控制的方式完成数据库的路由。
[0007] 也有些技术方案采用客户端的方式进行封装,完成透明化处理。具体的实现方案 可以归结为三种方式:1.基于数据访问层(Data Access Layer,简称为DAL)的方式;2.基 于客户端框架的方式;3.基于数据库客户端协议的方式。现有技术的缺点如下:
[0008] 对于客户端来说,其封装不完善,功能比较单一,可移植性比较差,使用成本比较 高,仅仅局限于当前语言(譬如:java),客户端访问仅仅局限于该公司内部使用到的技 术和方案,数据访问方式仅仅局限于对应的数据库,不能支持读写分离、高可用性(High Available,简称为HA)、Failover、数据迁移、数据同步等功能。
[0009] 对于服务端来说,服务端需要有专用的服务器集群,通过集群转发,服务器集群作 为后端数据库的代理,服务器投入成本较高,同样服务器集群取代了数据库成为了一个中 心化的组件,中心化的问题比较严重,当中间集群出现故障的时候,会影响整个网站,导致 网站不可用,影响范围较大,同时,基于代理的方式,不方便扩展。
[0010] 现有架构下,开发人员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员 的时间和精力。


【发明内容】

[0011] 本发明提供了一种通过数据库中间件查询数据的方法和数据库中间件,用以解决 现有技术的架构下,开发人员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员的 时间和精力的问题。
[0012] 为解决上述技术问题,一方面,本发明提供一种通过数据库中间件查询数据的方 法,包括:数据库中间件接收访问请求,所述访问请求携带有检索条件;所述数据库中间件 根据所述检索条件对多个数据库进行检索,以找到符合所述检索条件的数据信息。
[0013] 进一步,数据库中间件接收访问请求之前,还包括:加载预设的配置文件,其中,力口 载过程包括:建立二级层级的虚拟节点,所述二级层级的虚拟节点用于控制读写分离和调 用数据时长,其中,第一层级虚拟节点包括:第二层级虚拟节点的对应关系表,第二层级虚 拟节点包括:与数据库的对应关系表;获取路由的配置规则。
[0014] 进一步,加载预设的配置文件之后,还包括:将多个应用组件进行封装,并通过预 定访问接口进行数据库的访问操作。
[0015] 进一步,所述数据库中间件根据所述检索条件对多个数据库进行检索,以找到符 合所述检索条件的数据信息之后,还包括:将所述数据信息进行集合,并将集合后的数据信 息进行输出。
[0016] 进一步,当所述访问请求为来自客户端的访问请求时,所述数据库中间件根据所 述检索条件对多个数据库进行检索,以找到符合所述检索条件的数据信息包括:解析所述 访问请求中检索条件对应的sql语句,并对解析后的sql语句进行分析,以确定需要路由的 第一层级虚拟节点的配置参数;将所述配置参数发送至路由器,由路由器调用所述配置参 数对应的配置规则;根据所述配置规则对确定的第一层级虚拟节点执行路由过程,以得到 符合所述访问请求的数据信息。
[0017] 进一步,由路由器调用所述配置参数对应的配置规则包括:路由器将包括配置参 数的调用指令发送至存储配置规则的设备,存储配置规则的设备根据所述配置参数确定路 由时需要的配置规则,并将所述配置规则发送至所述路由器;或者,路由器通过预设策略确 定路由时需要的配置规则,从存储配置规则的设备中获取所述需要的配置规则。
[0018] 进一步,根据所述配置规则对确定的第一层级虚拟节点执行路由过程,以得到符 合所述访问请求的数据信息包括:按照所述配置规则查找对应的第一层级虚拟节点;在找 到的第一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的第二层级 虚拟节点;查找确定的第二层级虚拟节点对应的数据库,并在所述数据库中执行sql语句, 以得到符合所述访问请求的数据信息。
[0019] 进一步,对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟节点的 配置参数之后,还包括:对分析得到的配置参数进行安全检测;在所述配置参数安全的情 况下,将所述配置参数发送至路由器。
[0020] 进一步,所述方法还包括:在第一层级虚拟节点和/或第二层级虚拟节点出现故 障的情况下,按照预设负载均衡策略和/或预设高可用处理策略执行sql语句。
[0021] 进一步,所述方法还包括:在所述数据库中执行Sql语句之前和之后,分别对当前 时刻的数据信息进行采样,以记录当前时刻的数据信息。
[0022] 进一步,所述数据库中间件根据所述检索条件对多个数据库进行检索之前,还包 括:当所述访问请求为来自服务端的访问请求时,将从客户端获取的链接处理层Golang 语句进行10处理;对10处理后的所述链接处理层Golang语句进行封装,并将封装后的 Golang语句解析成sql语句;再按照所述访问请求为来自客户端的访问请求时的情况,执 行所述数据库中间件根据所述检索条件对多个数据库进行检索。
[0023] 另一方面,本发明还提供一种数据库中间件,包括:接收模块,用于接收访问请求, 所述访问请求携带有检索条件;检索模块,用于根据所述检索条件对多个数据库进行检索, 以找到符合所述检索条件的数据信息。
[0024] 进一步,所述数据库中间件还包括:加载模块,用于加载预设的配置文件,其中,力口 载过程包括:建立二级层级的虚拟节点,所述二级层级的虚拟节点用于控制读写分离和调 用数据时长,其中,第一层级虚拟节点包括:第二层级虚拟节点的对应关系表,第二层级虚 拟节点包括:与数据库的对应关系表;获取路由的配置规则;封装模块,用于将多个应用组 件进行封装,并通过预定访问接口进行数据库的访问操作。
[0025] 进一步,所述数据库中间件还包括:集合模块,用于将所述数据信息进行集合,并 将集合后的数据信息进行输出。
[0026] 进一步,当所述访问请求为来自客户端的访问请求时,所述检索模块包括:解析分 析单元,用于解析所述访问请求中检索条件对应的sql语句,并对解析后的sql语句进行分 析,以确定需要路由的第一层级虚拟节点的配置参数;路由单元,用于接收所述配置参数, 并调用所述配置参数对应的配置规则,以根据所述配置规则对确定的第一层级虚拟节点执 行路由过程,得到符合所述访问请求的数据信息。
[0027] 进一步,所述路由单元,还用于将包括配置参数的调用指令发送至存储配置规则 的设备,以使得存储配置规则的设备根据所述配置参数确定路由时需要的配置规则;或者, 用于通过预设策略确定路由时需要的配置规则,从存储配置规则的设备中获取所述需要的 配置规则。
[0028] 进一步,所述路由单元,还用于按照所述配置规则查找对应的第一层级虚拟节点; 在找到的第一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的第二 层级虚拟节点;查找确定的第二层级虚拟节点对应的数据库,并在所述数据库中执行sql 语句,以得到符合所述访问请求的数据信息。
[0029] 进一步,数据库中间件还包括:安全检查单元,用于对分析得到的配置参数进行安 全检测;在所述配置参数安全的情况下,将所述配置参数发送至路由单元。
[0030] 本发明通过数据库中间件接收访问请求,利用数据库中间件按照访问请求中的检 索条件进行检索,通过该方法得到数据信息,其通过数据库中间件处理原来需要开发人员 完成的工作,处理时间和处理速度都有较大提升,解决了现有技术的架构下,开发人员得到 数据信息的过程较为繁琐复杂,极大的浪费开发人员的时间和精力的问题。

【专利附图】

【附图说明】
[0031] 图1是本发明实施例中通过数据库中间件查询数据的方法的流程图;
[0032] 图2是本发明实施例中数据库中间件的结构示意图;
[0033] 图3是本发明实施例中数据库中间件的又一种结构示意图;
[0034]图4是本发明实施例中数据库中间件检索模块的结构示意图;
[0035] 图5是本发明优选实施例中数据库中间件接收来自客户端的访问请求时设计的 架构示意图;
[0036] 图6是本发明优选实施例中数据库中间件接收来自服务端的访问请求时设计的 架构示意。

【具体实施方式】
[0037] 为了解决现有技术的架构下,开发人员得到数据信息的过程较为繁琐复杂,极大 的浪费开发人员的时间和精力的问题,本发明提供了一种通过数据库中间件查询数据的方 法和数据库中间件,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解, 此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
[0038] 本发明实施例提供了一种通过数据库中间件查询数据的方法,该方法的流程如图 1所示,包括步骤S102至步骤S104 :
[0039] S102,数据库中间件接收访问请求,访问请求携带有检索条件;
[0040] S104,数据库中间件根据检索条件对多个数据库进行检索,以找到符合检索条件 的数据信息。
[0041] 本发明实施例通过数据库中间件接收访问请求,利用数据库中间件按照访问请求 中的检索条件进行检索,通过该方法得到数据信息,其通过数据库中间件处理原来需要开 发人员完成的工作,处理时间和处理速度都有较大提升,解决了现有技术的架构下,开发人 员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员的时间和精力的问题。
[0042] 在数据库中间件接收访问请求之前,还需要加载预设的配置文件,加载的过程包 括建立虚拟节点和确定配置规则。实施时,可以对集群进行分层级建立虚拟节点,但虚拟节 点过多,会导致调用时间过长,虚拟节点过少,会导致调用过程中出现故障时无法恢复,因 此, 申请人:选择一种较优的层级数来建立虚拟节点,即选择二级层级。实施过程中,建立二 级层级的虚拟节点,二级层级的虚拟节点用于控制读写分离和调用数据时长,其中,第一层 级虚拟节点包括:第二层级虚拟节点的对应关系表,第二层级虚拟节点包括:与数据库的 对应关系表;再获取路由的配置规则,其中,预设的配置文件可以存储在配置中心中,该配 置中心可以设置在数据库中间件中,也可以设置在数据库中间件外部,作为一个独立的存 储设备。当然,本领域技术人员根据需求,还可以设置三级层级或四级层级等,都是与本发 明实施例处于等同的保护范围。
[0043] 在加载预设的配置文件之后,还可以将多个应用组件进行封装,例如对DAL框架 和数据访问对象框架(Data Access Object,简称为DA0)等进行封装,并通过预定访问接口 进行数据库的访问操作。上述封装操作能够使得使用过程简化,封装后,通过预定接口访 问数据库的操作时长会大大缩短,其中,预定访问接口可以是数据库连接(Java Data Base Connectivity, java,JDBC)或 ODBC 等。
[0044] 具体实施过程中,数据库中间件处理的访问请求可能来自客户端,也可能来自服 务端,来自客户端和来自服务端的访问请求的执行过程大体相似,只是当访问请求来自服 务端时,需要多一些处理步骤。下面先对访问请求来自客户端的情况下进行说明,再基于该 流程对来自服务端的情况进行说明。
[0045] 当访问请求为来自客户端的访问请求时,数据库中间件根据检索条件对多个数据 库进行检索,以找到符合检索条件的数据信息可以包括如下过程:首先,解析访问请求中检 索条件对应的sql语句,并对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟 节点的配置参数;再将配置参数发送至路由器进行路由,由路由器调用配置参数对应的配 置规则;再根据配置规则对确定的第一层级虚拟节点执行路由过程,以得到符合访问请求 的数据信息。
[0046] 在对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟节点的配置参 数之后,还可以对得到的配置参数进行安全性验证,即对分析得到的配置参数进行安全检 测;在配置参数安全的情况下,再将配置参数发送至路由器。
[0047] 实施时,由路由器调用配置参数对应的配置规则可以包括如下两种形式:
[0048] (1)路由器将包括配置参数的调用指令发送至存储配置规则的设备,存储配置规 则的设备根据配置参数确定路由时需要的配置规则,并将配置规则发送至路由器;(2)路 由器通过预设策略确定路由时需要的配置规则,从存储配置规则的设备中获取需要的配置 规则。其中,预设策略可以是路由器自身配置的策略表,也可以是触发具有类似功能的部分 来实现的,例如调用分库分表Functions来实现。
[0049] 随后按照配置规则查找对应的第一层级虚拟节点;在找到的第一层级虚拟节点上 查找第二层级虚拟节点的对应关系表,以确定下一级的第二层级虚拟节点;查找确定的第 二层级虚拟节点对应的数据库,并在数据库中执行sql语句,以得到符合访问请求的数据 信息。其中,在数据库中执行sql语句之前和之后,还可以分别对当前时刻的数据信息进行 采样,以记录当前时刻的数据信息。
[0050] 如果第一层级虚拟节点或第二层级虚拟节点在执行时出现了故障,可以按照预设 负载均衡(LoadBalance)策略和/或预设HA策略执行sql语句,例如,当前的第二层级虚 拟节点挂掉了,则可以通过预设HA策略进行处理,以选择其他虚拟节点执行sql语句。
[0051] 在数据库中间件根据检索条件对多个数据库进行检索,以找到符合检索条件的数 据信息之后,为了给用户呈现一个清晰、完整的数据信息,可以将数据信息进行集合,再将 集合后的数据信息进行输出。
[0052] 上述过程讲述的是访问请求来自客户端的情况,当访问请求来自服务端时,其处 理流程基本相同,只是由于客户端和服务端计算机语言不同,因此,在数据库中间件根据检 索条件对多个数据库进行检索之前,还需要将从客户端获取的链接处理层Golang语句进 行输入输出(Input Output,简称为10)处理;对10处理后的链接处理层Golang语句进行 封装,并将封装后的Golang语句解析成sql语句;再按照访问请求为来自客户端的访问请 求时的情况,执行数据库中间件根据检索条件对多个数据库进行检索的过程。
[0053] 本发明实施例还提供了一种数据库中间件,该中间件的的结构示意如图2所示, 包括:接收模块10,用于接收访问请求,访问请求携带有检索条件;检索模块20,与接收模 块10耦合,用于根据检索条件对多个数据库进行检索,以找到符合检索条件的数据信息。
[0054] 图3示出了上述数据库中间件的又一种结构示意图,上述数据库中间件还包括: 加载模块30,用于加载预设的配置文件,其中,加载过程包括:建立二级层级的虚拟节点, 二级层级的虚拟节点用于控制读写分离和调用数据时长,其中,第一层级虚拟节点包括:第 二层级虚拟节点的对应关系表,第二层级虚拟节点包括:与数据库的对应关系表;获取路 由的配置规则;封装模块40,与接收模块10耦合,用于将多个应用组件进行封装,并通过预 定访问接口进行数据库的访问操作。
[0055] 上述数据库中间件还可以包括:集合模块,与检索模块20耦合,用于将数据信息 进行集合,并将集合后的数据信息进行输出。
[0056] 实施过程中,检索模块20的结构示意如图4所示,包括:解析分析单元201,用于 解析访问请求中检索条件对应的sql语句,并对解析后的sql语句进行分析,以确定需要路 由的第一层级虚拟节点的配置参数;路由单元202,路由单元,用于接收配置参数,并调用 配置参数对应的配置规则,以根据配置规则对确定的第一层级虚拟节点执行路由过程,得 到符合访问请求的数据信息。
[0057] 其中,路由单元202,还用于将包括配置参数的调用指令发送至存储配置规则的 设备,以使得存储配置规则的设备根据配置参数确定路由时需要的配置规则;或者,用于通 过预设策略确定路由时需要的配置规则,从存储配置规则的设备中获取所述需要的配置规 则。
[0058] 路由单元202,还用于按照配置规则查找对应的第一层级虚拟节点;在找到的第 一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的第二层级虚拟节 点;查找确定的第二层级虚拟节点对应的数据库,并在数据库中执行sql语句,以得到符合 访问请求的数据信息。
[0059] 检索模块20,还可以包括安全检查单元203,与路由单元202耦合,用于对分析得 到的配置参数进行安全检测;在配置参数安全的情况下,将配置参数发送至路由单元。
[0060] 上述的数据库中间件的检索模块还可以包括:策略执行单元,用于在第一层级虚 拟节点和/或第二层级虚拟节点出现故障的情况下,按照预设负载均衡策略和/或预设高 可用处理策略执行sql语句。采样单元,用于在数据库中执行sql语句之前和之后,分别对 当前时刻的数据信息进行采样,以记录当前时刻的数据信息。
[0061] 在一个优选实施例中,上述数据库中间件还可以包括:语言处理模块,与接收模块 10和检索模块20耦合,用于当访问请求为来自服务端的访问请求时,将从客户端获取的链 接处理层Golang语句进行10处理;对10处理后的链接处理层Golang语句进行封装,并将 封装后的Golang语句解析成sql语句。然后再按照访问请求为来自客户端的访问请求时 的情况,触发检索模块执行数据库中间件根据检索条件对多个数据库进行检索。
[0062] 优选实施例
[0063] 本发明实施例开发数据库中间件的目的是为了解决以下问题:1.屏蔽数据库访 问细节,对应用透明,简化应用开发人员的工作;2.增加应用和数据库访问的监控,提高系 统安全能力;3.解决跨语言访问问题,能够对数据库切分实现跨语言调用;4.增加系统健 壮性和可维护性,添加管理模块,大大降低日常工作的维护成本;5.提高整体架构的合理 性。
[0064] 为了解决上述技术问题,本发明实施例提出了采用混合的解决方式,即采用客户 端的方式封装分布式数据库的逻辑;通过服务端代理的逻辑对分库分表进行封装;对于应 用服务的接入,可以采取多种方式,不同的业务可以使用不同的场景进行接入,方案的设计 引入NameNode (第一层级虚拟节点)和datanode (第二层级虚拟节点)的概念,Namenode 是一个datanode的集合,是一个抽象的数据逻辑节点,datanode对应实际的数据资源访问 抽象,本领域技术人员可以根据需求设计不同的功能功能。下面,分别对基于客户端和服务 端的流程进行说明。
[0065] 如图5所示,是数据库中间件接收来自客户端的访问请求时设计的架构示意,在 该图中,Result相当于集合模块,Exchange相当于检索模块,检索模块内部的各个功能单 元相当于Exchange内部的各个功能单元,本领域技术人员根据图5可以知晓,实施例的 Exchange可以根据实际需求和程序需要,增加一些功能,此处不再赘述。图中的Clusters 相当于建立模块建立得到的虚拟节点,加载模块和封装模块等流程执行功能可以通过预先 处理和实时调用程序实现,此处在图中并未示出。
[0066] 下面将对图5的客户端的流程方式进行说明。
[0067] (1)加载配置文件。该配置文件包括多种配置规则,其中包括对配置规则可以预存 在配置中心等文件、数据库中,具体加载时可以由配置中心加载。
[0068] 配置文件包括在命名节点(Namenode)里面配置负载均衡策略、配置数据节点 (Datanode)、配置Datanode的读写权限以及权重、负载均衡(LoadBalance)策略与HA策略 (该策略就是为了在其中一个Datanode挂掉时,不影响使用,服务还正常),其中参数包括 表名、条件参数等。
[0069] (2)通过jdbc访问接口进行数据库操作。
[0070] 在数据库接口(Database Interface)配置之后,在数据库代理(Database Proxy) 中进行JDBC3封装。
[0071] (3)解析sql语句(利用Sqlparser解析器),即解析客户端的访问请求。
[0072] (4)分析sql语句的配置参数(利用Shard Analyzer分析器等)。
[0073] (5)Router调用分库分表functions,以获取配置规则。
[0074] 上述过程即对客户端的访问请求分析,分析查询条件(参数、字段、表名、 schema),根据查询条件选择相对应的配置规则。Router确定查询路径,Executor负责执 行。
[0075] 例如,sql 语句 select*from t_user where id = 123456and username = ' 小华'。
[0076] 解析结果:1.数据库表名t_uSer ;2.依据数据库表名在配置规则的解析表中查找 对应的字段,读取t_user的所有字段名;3. where条件参数:id= 123456,username = '小 华,。
[0077] 分析结果:根据id分析,以id作为参考字段,按1000取模来说,id = 123456可得 到下标456 ;然后路由到456这个Namenode ;定位到Namenode之后,Namenode下面有若干 个Datanode,可以采用不同的算法取遍历,选取Datanode,比如随机、轮询,找到Datanode 之后,就持有一个 Datasource,Datanode 持有一个 Provider,一个 Provider 持有一个 Datasource,执行过程即 Datanode 至 Provider 至 Datasource,其中 Provider 可以有多个 Datasource,即依次遍历调用多个Datasource,顺序例如随机,或者轮询顺序。
[0078] (6)对配置规则路由到相应的Namenode命名节点(Router路由器)。
[0079] Namenode可以为一个抽象的节点,Datanode可以挂接数据访问,与Datasource绑 定。一组Datanode至少对应一个Datasource,比如一组包含主从的Datanode至少对应一个 Datasource,而一个 Namenode 可以对应多个 Datanode,一个 Damenode 对应多个 Datanode。
[0080] 其中,Datasource是其通用含义,即是提供某种所需要数据的器件或原始媒体,即 数据的来源。在数据源中存储了所有建立数据库连接的信息,就像通过指定文件名称可以 在文件系统中找到文件一样,通过提供正确的数据源名称,可以找到相应的数据库连接。
[0081] (7)执行前调用拦截器(可以接入监控组件interc印tor拦截器)。
[0082] 该步骤为执行前的操作,譬如修改参数修改,缓存同步,数据库同步,监控等。其 中,用户可以控制修改,sql参数可以修改,context上下文也可以修改;缓存同步就是将数 据更新到缓存,例如sql中的参数数据等。
[0083] (8)执行路由结果的sql (executor执行器执行)。
[0084] Router确定调用线路,执行器(executor)执行调用。路由之后可以选择性的进行 统计分析(statistics),
[0085] (9)进行负载均衡(Loadbalance)和 HA。
[0086] 本步骤为可选过程:如预先配置Loadbalance以及HA,则将在executor执行调取 后根据情况确定是否需要执行Loadbalance以及HA。
[0087] 例如,随机选取一个Datanode、或者一个Datanode失败了,就会执行HA,切换到另 外一个Datanode,其中失败的情况可以包括数据库访问不通、链接断掉了、网络有问题等。 采用HA的方案执行,选取该Namenode下面其他的Datanode,具体选取哪个就是根据之前的 选取算法,根据随机或者轮询遍历等方式选取对DataNode选取进行HA操作,
[0088] (10)执行后调用拦截器。
[0089] 该步骤为执行后的操作,例如修改参数、缓存同步、数据库同步、监控等,与执行前 调用拦截器相似,只是处理内容的先后问题。拦截器可以选择Plugin插件,该插件可以包 括 statistics 与安全检查(Security checker)等。
[0090] (11)合并执行结果(利用mergers结果合并器)。
[0091] 在图5中,预设的配置文件存储于配置中心内;将配置文件进行加载得到配置规 贝1J,由配置模块(图中示为configurations)调取配置规则,提供给router,由功能模块(图 中示为分库分表function)为配置参数找到相对应的配置规则;由路由根据配置规则找到 Namenode, Namenode确定Datanode,在多个数据库中进行查询产生多个结果集,对多个结 果集进行合并。
[0092] 图6是数据库中间件接收来自服务端的访问请求时设计的架构示意,服务端与客 户端的执行过程相似,因此,图6仅示出了服务端的大体架构。下面结合图6对服务端的流 程方式进行说明。
[0093] (1)启动服务端组件,监听端口。
[0094] (2)加载配置文件(该过程可以在配置中心加载)。与客户端的加载过程相同。
[0095] (3)封装mysql。封装后的mysql处理时更加简单
[0096] (4)解析客户端访问二进制协议。该过程为计算机语言的翻译过程,相当于将服务 端的计算机语言解析成为sql语句。
[0097] 在上述过程解析后得到了中间件能够读取的sql语句,然后再按照客户端的方式 执行具体流程,即执行(5)-(12)。
[0098] (5)解析 sql 语句(利用 sqlparser)。
[0099] (6)分析sql语句的配置参数(利用analyzer)。
[0100] (7)将配置规则路由到相应的Namenode (通过router)。
[0101] (8)执行前调用拦截器(可以接入监控组件interc印tor)。
[0102] (9)执行路由结果的sql (通过executor)。
[0103] (10)根据情况执行 LoadBalance、HA。
[0104] (11)执行后调用拦截器(interceptor)。
[0105] (12)合并执行结果(通过merger)。
[0106] 通过运用本实施例,将数据库分布式访问方式从业务代码中抽象出来,简化开发, 使得业务代码更加清晰,提升生产效率。对公司运维、DBA、开发、产品等业务人员有巨大的 帮助,能够提升生产效率;能够结合公司的实际情况,针对现有系统进行优化,提供更安全、 效率更高、安全更好、逻辑性更加清晰合理的架构。
[0107] 尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到 各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
【权利要求】
1. 一种通过数据库中间件查询数据的方法,其特征在于,包括: 数据库中间件接收访问请求,所述访问请求携带有检索条件; 所述数据库中间件根据所述检索条件对多个数据库进行检索,以找到符合所述检索条 件的数据信息。
2. 如权利要求1所述的方法,其特征在于,数据库中间件接收访问请求之前,还包括: 加载预设的配置文件,其中,加载过程包括: 建立二级层级的虚拟节点,所述二级层级的虚拟节点用于控制读写分离和调用数据时 长,其中,第一层级虚拟节点包括:第二层级虚拟节点的对应关系表,第二层级虚拟节点包 括:与数据库的对应关系表; 获取路由的配置规则。
3. 如权利要求2所述的方法,其特征在于,加载预设的配置文件之后,还包括: 将多个应用组件进行封装,并通过预定访问接口进行数据库的访问操作。
4. 如权利要求1所述的方法,其特征在于,所述数据库中间件根据所述检索条件对多 个数据库进行检索,以找到符合所述检索条件的数据信息之后,还包括: 将所述数据信息进行集合,并将集合后的数据信息进行输出。
5. 如权利要求1至4中任一项所述的方法,其特征在于,当所述访问请求为来自客户端 的访问请求时,所述数据库中间件根据所述检索条件对多个数据库进行检索,以找到符合 所述检索条件的数据信息包括: 解析所述访问请求中检索条件对应的sql语句,并对解析后的sql语句进行分析,以确 定需要路由的第一层级虚拟节点的配置参数; 将所述配置参数发送至路由器,由路由器调用所述配置参数对应的配置规则; 根据所述配置规则对确定的第一层级虚拟节点执行路由过程,以得到符合所述访问请 求的数据信息。
6. 如权利要求5所述的方法,其特征在于,由路由器调用所述配置参数对应的配置规 则包括: 路由器将包括配置参数的调用指令发送至存储配置规则的设备,存储配置规则的设备 根据所述配置参数确定路由时需要的配置规则,并将所述配置规则发送至所述路由器;或 者, 路由器通过预设策略确定路由时需要的配置规则,从存储配置规则的设备中获取所述 需要的配置规则。
7. 如权利要求5所述的方法,其特征在于,根据所述配置规则对确定的第一层级虚拟 节点执行路由过程,以得到符合所述访问请求的数据信息包括: 按照所述配置规则查找对应的第一层级虚拟节点; 在找到的第一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的 第二层级虚拟节点; 查找确定的第二层级虚拟节点对应的数据库,并在所述数据库中执行sql语句,以得 到符合所述访问请求的数据信息。
8. 如权利要求5所述的方法,其特征在于,对解析后的sql语句进行分析,以确定需要 路由的第一层级虚拟节点的配置参数之后,还包括: 对分析得到的配置参数进行安全检测; 在所述配置参数安全的情况下,将所述配置参数发送至路由器。
9. 如权利要求5所述的方法,其特征在于,所述方法还包括: 在第一层级虚拟节点和/或第二层级虚拟节点出现故障的情况下,按照预设负载均衡 策略和/或预设高可用处理策略执行sql语句。
10. 如权利要求7所述的方法,其特征在于,所述方法还包括: 在所述数据库中执行sql语句之前和之后,分别对当前时刻的数据信息进行采样,以 记录当前时刻的数据信息。
11. 如权利要求5所述的方法,其特征在于,所述数据库中间件根据所述检索条件对多 个数据库进行检索之前,还包括: 当所述访问请求为来自服务端的访问请求时,将从客户端获取的链接处理层Golang 语句进行10处理; 对10处理后的所述链接处理层Golang语句进行封装,并将封装后的Golang语句解析 成sql语句; 再按照所述访问请求为来自客户端的访问请求时的情况,执行所述数据库中间件根据 所述检索条件对多个数据库进行检索。
12. -种数据库中间件,其特征在于,包括: 接收模块,用于接收访问请求,所述访问请求携带有检索条件; 检索模块,用于根据所述检索条件对多个数据库进行检索,以找到符合所述检索条件 的数据信息。
13. 如权利要求12所述的数据库中间件,其特征在于,还包括: 加载模块,用于加载预设的配置文件,其中,加载过程包括:建立二级层级的虚拟节点, 所述二级层级的虚拟节点用于控制读写分离和调用数据时长,其中,第一层级虚拟节点包 括:第二层级虚拟节点的对应关系表,第二层级虚拟节点包括:与数据库的对应关系表;获 取路由的配置规则; 封装模块,用于将多个应用组件进行封装,并通过预定访问接口进行数据库的访问操 作。
14. 如权利要求12所述的数据库中间件,其特征在于,还包括: 集合模块,用于将所述数据信息进行集合,并将集合后的数据信息进行输出。
15. 如权利要求12至14中任一项所述的数据库中间件,其特征在于,当所述访问请求 为来自客户端的访问请求时,所述检索模块包括: 解析分析单元,用于解析所述访问请求中检索条件对应的sql语句,并对解析后的sql 语句进行分析,以确定需要路由的第一层级虚拟节点的配置参数; 路由单元,用于接收所述配置参数,并调用所述配置参数对应的配置规则,以根据所述 配置规则对确定的第一层级虚拟节点执行路由过程,得到符合所述访问请求的数据信息。
16. 如权利要求15所述的数据库中间件,其特征在于, 所述路由单元,还用于将包括配置参数的调用指令发送至存储配置规则的设备,以使 得存储配置规则的设备根据所述配置参数确定路由时需要的配置规则;或者,用于通过预 设策略确定路由时需要的配置规则,从存储配置规则的设备中获取所述需要的配置规则。
17. 如权利要求15所述的数据库中间件,其特征在于, 所述路由单元,还用于按照所述配置规则查找对应的第一层级虚拟节点;在找到的第 一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的第二层级虚拟节 点;查找确定的第二层级虚拟节点对应的数据库,并在所述数据库中执行sql语句,以得到 符合所述访问请求的数据信息。
18. 如权利要求15所述的数据库中间件,其特征在于,还包括: 安全检查单元,用于对分析得到的配置参数进行安全检测;在所述配置参数安全的情 况下,将所述配置参数发送至路由单元。
【文档编号】G06F17/30GK104063425SQ201410245914
【公开日】2014年9月24日 申请日期:2014年6月4日 优先权日:2014年6月4日
【发明者】罗立树, 范文斌, 陈阳 申请人:五八同城信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1