CN104063425A - 通过数据库中间件查询数据的方法和数据库中间件 - Google Patents
通过数据库中间件查询数据的方法和数据库中间件 Download PDFInfo
- Publication number
- CN104063425A CN104063425A CN201410245914.4A CN201410245914A CN104063425A CN 104063425 A CN104063425 A CN 104063425A CN 201410245914 A CN201410245914 A CN 201410245914A CN 104063425 A CN104063425 A CN 104063425A
- Authority
- CN
- China
- Prior art keywords
- dummy node
- access
- database
- request
- configuration rule
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/30—Information retrieval; Database structures therefor; File system structures therefor of unstructured textual data
- G06F16/33—Querying
- G06F16/335—Filtering based on additional data, e.g. user or group profiles
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种通过数据库中间件查询数据的方法和数据库中间件,其中,该方法包括:数据库中间件接收访问请求,访问请求携带有检索条件;数据库中间件根据检索条件对多个数据库进行检索,以找到符合检索条件的数据信息。本发明通过数据库中间件接收访问请求,利用数据库中间件按照访问请求中的检索条件进行检索,通过该方法得到数据信息,其通过数据库中间件处理原来需要开发人员完成的工作,处理时间和处理速度都有较大提升,解决了现有技术的架构下,开发人员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员的时间和精力的问题。
Description
技术领域
本发明涉及网络领域,特别是涉及一种通过数据库中间件查询数据的方法和数据库中间件。
背景技术
随着网络的日益发展,各个网站的访问量和数据量都与日俱增,系统由原有的基于数据库的存储方式发展成多种的数据存储方式并存,数据库架构也就变得越来越复杂,现有的单一的数据库已经满足不了原来的需求,进而发展成多种解决问题的实现方式,需要满足以下条件:对数据库进行读写分离;采用数据库前端加缓存的方式;采用分库分表的方式来提升集群的响应能力和存储容量。
在这同时,由于系统的发展,网络公司的发展也变得越来越庞大,部门划分越来越多,各个技术部门由于解决问题的场景各自不一样,要求也不一样,导致了各个部门采用的技术体系不一样,譬如有些部门采用java语言进行业务开发,有些部门采用C++等进行业务开发,不同的业务开发语言也会带来很多不一样的访问方式,java语言采用jdbc的方式,而C、C++、PHP等采用开放数据库互连(Open Database Connectivity,简称为ODBC)的方式,存在着不同异构的系统。
由于技术架构的变更,由单一的简单直接的方式访问,变成复杂的异构的方式,系统架构越来越复杂,开发和维护难度越来越难,出错几率越来越大,可扩展和可维护性比较弱。
现有架构下,如某一线工程的开发人员想要调用相应的程序,其需要对多个存储不同语言或不同业务的服务器进行访问,访问时,异构的系统访问过程较为复杂,且访问后还需要对得到的结果进行处理,以得数据信息,过程繁琐复杂,极大的浪费开发人员的时间和精力。
现有对数据库的访问,大多数是在应用编码中实现的,像开源社区的Mysqlproxy,采用的是基于mysql协议,通过lua脚本进行编程控制的方式完成数据库的路由。
也有些技术方案采用客户端的方式进行封装,完成透明化处理。具体的实现方案可以归结为三种方式:1.基于数据访问层(Data Access Layer,简称为DAL)的方式;2.基于客户端框架的方式;3.基于数据库客户端协议的方式。现有技术的缺点如下:
对于客户端来说,其封装不完善,功能比较单一,可移植性比较差,使用成本比较高,仅仅局限于当前语言(譬如:java),客户端访问仅仅局限于该公司内部使用到的技术和方案,数据访问方式仅仅局限于对应的数据库,不能支持读写分离、高可用性(High Available,简称为HA)、Failover、数据迁移、数据同步等功能。
对于服务端来说,服务端需要有专用的服务器集群,通过集群转发,服务器集群作为后端数据库的代理,服务器投入成本较高,同样服务器集群取代了数据库成为了一个中心化的组件,中心化的问题比较严重,当中间集群出现故障的时候,会影响整个网站,导致网站不可用,影响范围较大,同时,基于代理的方式,不方便扩展。
现有架构下,开发人员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员的时间和精力。
发明内容
本发明提供了一种通过数据库中间件查询数据的方法和数据库中间件,用以解决现有技术的架构下,开发人员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员的时间和精力的问题。
为解决上述技术问题,一方面,本发明提供一种通过数据库中间件查询数据的方法,包括:数据库中间件接收访问请求,所述访问请求携带有检索条件;所述数据库中间件根据所述检索条件对多个数据库进行检索,以找到符合所述检索条件的数据信息。
进一步,数据库中间件接收访问请求之前,还包括:加载预设的配置文件,其中,加载过程包括:建立二级层级的虚拟节点,所述二级层级的虚拟节点用于控制读写分离和调用数据时长,其中,第一层级虚拟节点包括:第二层级虚拟节点的对应关系表,第二层级虚拟节点包括:与数据库的对应关系表;获取路由的配置规则。
进一步,加载预设的配置文件之后,还包括:将多个应用组件进行封装,并通过预定访问接口进行数据库的访问操作。
进一步,所述数据库中间件根据所述检索条件对多个数据库进行检索,以找到符合所述检索条件的数据信息之后,还包括:将所述数据信息进行集合,并将集合后的数据信息进行输出。
进一步,当所述访问请求为来自客户端的访问请求时,所述数据库中间件根据所述检索条件对多个数据库进行检索,以找到符合所述检索条件的数据信息包括:解析所述访问请求中检索条件对应的sql语句,并对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟节点的配置参数;将所述配置参数发送至路由器,由路由器调用所述配置参数对应的配置规则;根据所述配置规则对确定的第一层级虚拟节点执行路由过程,以得到符合所述访问请求的数据信息。
进一步,由路由器调用所述配置参数对应的配置规则包括:路由器将包括配置参数的调用指令发送至存储配置规则的设备,存储配置规则的设备根据所述配置参数确定路由时需要的配置规则,并将所述配置规则发送至所述路由器;或者,路由器通过预设策略确定路由时需要的配置规则,从存储配置规则的设备中获取所述需要的配置规则。
进一步,根据所述配置规则对确定的第一层级虚拟节点执行路由过程,以得到符合所述访问请求的数据信息包括:按照所述配置规则查找对应的第一层级虚拟节点;在找到的第一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的第二层级虚拟节点;查找确定的第二层级虚拟节点对应的数据库,并在所述数据库中执行sql语句,以得到符合所述访问请求的数据信息。
进一步,对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟节点的配置参数之后,还包括:对分析得到的配置参数进行安全检测;在所述配置参数安全的情况下,将所述配置参数发送至路由器。
进一步,所述方法还包括:在第一层级虚拟节点和/或第二层级虚拟节点出现故障的情况下,按照预设负载均衡策略和/或预设高可用处理策略执行sql语句。
进一步,所述方法还包括:在所述数据库中执行sql语句之前和之后,分别对当前时刻的数据信息进行采样,以记录当前时刻的数据信息。
进一步,所述数据库中间件根据所述检索条件对多个数据库进行检索之前,还包括:当所述访问请求为来自服务端的访问请求时,将从客户端获取的链接处理层Golang语句进行IO处理;对IO处理后的所述链接处理层Golang语句进行封装,并将封装后的Golang语句解析成sql语句;再按照所述访问请求为来自客户端的访问请求时的情况,执行所述数据库中间件根据所述检索条件对多个数据库进行检索。
另一方面,本发明还提供一种数据库中间件,包括:接收模块,用于接收访问请求,所述访问请求携带有检索条件;检索模块,用于根据所述检索条件对多个数据库进行检索,以找到符合所述检索条件的数据信息。
进一步,所述数据库中间件还包括:加载模块,用于加载预设的配置文件,其中,加载过程包括:建立二级层级的虚拟节点,所述二级层级的虚拟节点用于控制读写分离和调用数据时长,其中,第一层级虚拟节点包括:第二层级虚拟节点的对应关系表,第二层级虚拟节点包括:与数据库的对应关系表;获取路由的配置规则;封装模块,用于将多个应用组件进行封装,并通过预定访问接口进行数据库的访问操作。
进一步,所述数据库中间件还包括:集合模块,用于将所述数据信息进行集合,并将集合后的数据信息进行输出。
进一步,当所述访问请求为来自客户端的访问请求时,所述检索模块包括:解析分析单元,用于解析所述访问请求中检索条件对应的sql语句,并对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟节点的配置参数;路由单元,用于接收所述配置参数,并调用所述配置参数对应的配置规则,以根据所述配置规则对确定的第一层级虚拟节点执行路由过程,得到符合所述访问请求的数据信息。
进一步,所述路由单元,还用于将包括配置参数的调用指令发送至存储配置规则的设备,以使得存储配置规则的设备根据所述配置参数确定路由时需要的配置规则;或者,用于通过预设策略确定路由时需要的配置规则,从存储配置规则的设备中获取所述需要的配置规则。
进一步,所述路由单元,还用于按照所述配置规则查找对应的第一层级虚拟节点;在找到的第一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的第二层级虚拟节点;查找确定的第二层级虚拟节点对应的数据库,并在所述数据库中执行sql语句,以得到符合所述访问请求的数据信息。
进一步,数据库中间件还包括:安全检查单元,用于对分析得到的配置参数进行安全检测;在所述配置参数安全的情况下,将所述配置参数发送至路由单元。
本发明通过数据库中间件接收访问请求,利用数据库中间件按照访问请求中的检索条件进行检索,通过该方法得到数据信息,其通过数据库中间件处理原来需要开发人员完成的工作,处理时间和处理速度都有较大提升,解决了现有技术的架构下,开发人员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员的时间和精力的问题。
附图说明
图1是本发明实施例中通过数据库中间件查询数据的方法的流程图;
图2是本发明实施例中数据库中间件的结构示意图;
图3是本发明实施例中数据库中间件的又一种结构示意图;
图4是本发明实施例中数据库中间件检索模块的结构示意图;
图5是本发明优选实施例中数据库中间件接收来自客户端的访问请求时设计的架构示意图;
图6是本发明优选实施例中数据库中间件接收来自服务端的访问请求时设计的架构示意。
具体实施方式
为了解决现有技术的架构下,开发人员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员的时间和精力的问题,本发明提供了一种通过数据库中间件查询数据的方法和数据库中间件,以下结合附图以及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不限定本发明。
本发明实施例提供了一种通过数据库中间件查询数据的方法,该方法的流程如图1所示,包括步骤S102至步骤S104:
S102,数据库中间件接收访问请求,访问请求携带有检索条件;
S104,数据库中间件根据检索条件对多个数据库进行检索,以找到符合检索条件的数据信息。
本发明实施例通过数据库中间件接收访问请求,利用数据库中间件按照访问请求中的检索条件进行检索,通过该方法得到数据信息,其通过数据库中间件处理原来需要开发人员完成的工作,处理时间和处理速度都有较大提升,解决了现有技术的架构下,开发人员得到数据信息的过程较为繁琐复杂,极大的浪费开发人员的时间和精力的问题。
在数据库中间件接收访问请求之前,还需要加载预设的配置文件,加载的过程包括建立虚拟节点和确定配置规则。实施时,可以对集群进行分层级建立虚拟节点,但虚拟节点过多,会导致调用时间过长,虚拟节点过少,会导致调用过程中出现故障时无法恢复,因此,申请人选择一种较优的层级数来建立虚拟节点,即选择二级层级。实施过程中,建立二级层级的虚拟节点,二级层级的虚拟节点用于控制读写分离和调用数据时长,其中,第一层级虚拟节点包括:第二层级虚拟节点的对应关系表,第二层级虚拟节点包括:与数据库的对应关系表;再获取路由的配置规则,其中,预设的配置文件可以存储在配置中心中,该配置中心可以设置在数据库中间件中,也可以设置在数据库中间件外部,作为一个独立的存储设备。当然,本领域技术人员根据需求,还可以设置三级层级或四级层级等,都是与本发明实施例处于等同的保护范围。
在加载预设的配置文件之后,还可以将多个应用组件进行封装,例如对DAL框架和数据访问对象框架(Data Access Object,简称为DAO)等进行封装,并通过预定访问接口进行数据库的访问操作。上述封装操作能够使得使用过程简化,封装后,通过预定接口访问数据库的操作时长会大大缩短,其中,预定访问接口可以是数据库连接(Java Data Base Connectivity,java,JDBC)或ODBC等。
具体实施过程中,数据库中间件处理的访问请求可能来自客户端,也可能来自服务端,来自客户端和来自服务端的访问请求的执行过程大体相似,只是当访问请求来自服务端时,需要多一些处理步骤。下面先对访问请求来自客户端的情况下进行说明,再基于该流程对来自服务端的情况进行说明。
当访问请求为来自客户端的访问请求时,数据库中间件根据检索条件对多个数据库进行检索,以找到符合检索条件的数据信息可以包括如下过程:首先,解析访问请求中检索条件对应的sql语句,并对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟节点的配置参数;再将配置参数发送至路由器进行路由,由路由器调用配置参数对应的配置规则;再根据配置规则对确定的第一层级虚拟节点执行路由过程,以得到符合访问请求的数据信息。
在对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟节点的配置参数之后,还可以对得到的配置参数进行安全性验证,即对分析得到的配置参数进行安全检测;在配置参数安全的情况下,再将配置参数发送至路由器。
实施时,由路由器调用配置参数对应的配置规则可以包括如下两种形式:
(1)路由器将包括配置参数的调用指令发送至存储配置规则的设备,存储配置规则的设备根据配置参数确定路由时需要的配置规则,并将配置规则发送至路由器;(2)路由器通过预设策略确定路由时需要的配置规则,从存储配置规则的设备中获取需要的配置规则。其中,预设策略可以是路由器自身配置的策略表,也可以是触发具有类似功能的部分来实现的,例如调用分库分表Functions来实现。
随后按照配置规则查找对应的第一层级虚拟节点;在找到的第一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的第二层级虚拟节点;查找确定的第二层级虚拟节点对应的数据库,并在数据库中执行sql语句,以得到符合访问请求的数据信息。其中,在数据库中执行sql语句之前和之后,还可以分别对当前时刻的数据信息进行采样,以记录当前时刻的数据信息。
如果第一层级虚拟节点或第二层级虚拟节点在执行时出现了故障,可以按照预设负载均衡(LoadBalance)策略和/或预设HA策略执行sql语句,例如,当前的第二层级虚拟节点挂掉了,则可以通过预设HA策略进行处理,以选择其他虚拟节点执行sql语句。
在数据库中间件根据检索条件对多个数据库进行检索,以找到符合检索条件的数据信息之后,为了给用户呈现一个清晰、完整的数据信息,可以将数据信息进行集合,再将集合后的数据信息进行输出。
上述过程讲述的是访问请求来自客户端的情况,当访问请求来自服务端时,其处理流程基本相同,只是由于客户端和服务端计算机语言不同,因此,在数据库中间件根据检索条件对多个数据库进行检索之前,还需要将从客户端获取的链接处理层Golang语句进行输入输出(Input Output,简称为IO)处理;对IO处理后的链接处理层Golang语句进行封装,并将封装后的Golang语句解析成sql语句;再按照访问请求为来自客户端的访问请求时的情况,执行数据库中间件根据检索条件对多个数据库进行检索的过程。
本发明实施例还提供了一种数据库中间件,该中间件的的结构示意如图2所示,包括:接收模块10,用于接收访问请求,访问请求携带有检索条件;检索模块20,与接收模块10耦合,用于根据检索条件对多个数据库进行检索,以找到符合检索条件的数据信息。
图3示出了上述数据库中间件的又一种结构示意图,上述数据库中间件还包括:加载模块30,用于加载预设的配置文件,其中,加载过程包括:建立二级层级的虚拟节点,二级层级的虚拟节点用于控制读写分离和调用数据时长,其中,第一层级虚拟节点包括:第二层级虚拟节点的对应关系表,第二层级虚拟节点包括:与数据库的对应关系表;获取路由的配置规则;封装模块40,与接收模块10耦合,用于将多个应用组件进行封装,并通过预定访问接口进行数据库的访问操作。
上述数据库中间件还可以包括:集合模块,与检索模块20耦合,用于将数据信息进行集合,并将集合后的数据信息进行输出。
实施过程中,检索模块20的结构示意如图4所示,包括:解析分析单元201,用于解析访问请求中检索条件对应的sql语句,并对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟节点的配置参数;路由单元202,路由单元,用于接收配置参数,并调用配置参数对应的配置规则,以根据配置规则对确定的第一层级虚拟节点执行路由过程,得到符合访问请求的数据信息。
其中,路由单元202,还用于将包括配置参数的调用指令发送至存储配置规则的设备,以使得存储配置规则的设备根据配置参数确定路由时需要的配置规则;或者,用于通过预设策略确定路由时需要的配置规则,从存储配置规则的设备中获取所述需要的配置规则。
路由单元202,还用于按照配置规则查找对应的第一层级虚拟节点;在找到的第一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的第二层级虚拟节点;查找确定的第二层级虚拟节点对应的数据库,并在数据库中执行sql语句,以得到符合访问请求的数据信息。
检索模块20,还可以包括安全检查单元203,与路由单元202耦合,用于对分析得到的配置参数进行安全检测;在配置参数安全的情况下,将配置参数发送至路由单元。
上述的数据库中间件的检索模块还可以包括:策略执行单元,用于在第一层级虚拟节点和/或第二层级虚拟节点出现故障的情况下,按照预设负载均衡策略和/或预设高可用处理策略执行sql语句。采样单元,用于在数据库中执行sql语句之前和之后,分别对当前时刻的数据信息进行采样,以记录当前时刻的数据信息。
在一个优选实施例中,上述数据库中间件还可以包括:语言处理模块,与接收模块10和检索模块20耦合,用于当访问请求为来自服务端的访问请求时,将从客户端获取的链接处理层Golang语句进行IO处理;对IO处理后的链接处理层Golang语句进行封装,并将封装后的Golang语句解析成sql语句。然后再按照访问请求为来自客户端的访问请求时的情况,触发检索模块执行数据库中间件根据检索条件对多个数据库进行检索。
优选实施例
本发明实施例开发数据库中间件的目的是为了解决以下问题:1.屏蔽数据库访问细节,对应用透明,简化应用开发人员的工作;2.增加应用和数据库访问的监控,提高系统安全能力;3.解决跨语言访问问题,能够对数据库切分实现跨语言调用;4.增加系统健壮性和可维护性,添加管理模块,大大降低日常工作的维护成本;5.提高整体架构的合理性。
为了解决上述技术问题,本发明实施例提出了采用混合的解决方式,即采用客户端的方式封装分布式数据库的逻辑;通过服务端代理的逻辑对分库分表进行封装;对于应用服务的接入,可以采取多种方式,不同的业务可以使用不同的场景进行接入,方案的设计引入NameNode(第一层级虚拟节点)和datanode(第二层级虚拟节点)的概念,Namenode是一个datanode的集合,是一个抽象的数据逻辑节点,datanode对应实际的数据资源访问抽象,本领域技术人员可以根据需求设计不同的功能功能。下面,分别对基于客户端和服务端的流程进行说明。
如图5所示,是数据库中间件接收来自客户端的访问请求时设计的架构示意,在该图中,Result相当于集合模块,Exchange相当于检索模块,检索模块内部的各个功能单元相当于Exchange内部的各个功能单元,本领域技术人员根据图5可以知晓,实施例的Exchange可以根据实际需求和程序需要,增加一些功能,此处不再赘述。图中的Clusters相当于建立模块建立得到的虚拟节点,加载模块和封装模块等流程执行功能可以通过预先处理和实时调用程序实现,此处在图中并未示出。
下面将对图5的客户端的流程方式进行说明。
(1)加载配置文件。该配置文件包括多种配置规则,其中包括对配置规则可以预存在配置中心等文件、数据库中,具体加载时可以由配置中心加载。
配置文件包括在命名节点(Namenode)里面配置负载均衡策略、配置数据节点(Datanode)、配置Datanode的读写权限以及权重、负载均衡(LoadBalance)策略与HA策略(该策略就是为了在其中一个Datanode挂掉时,不影响使用,服务还正常),其中参数包括表名、条件参数等。
(2)通过jdbc访问接口进行数据库操作。
在数据库接口(Database Interface)配置之后,在数据库代理(Database Proxy)中进行JDBC3封装。
(3)解析sql语句(利用Sqlparser解析器),即解析客户端的访问请求。
(4)分析sql语句的配置参数(利用Shard Analyzer分析器等)。
(5)Router调用分库分表functions,以获取配置规则。
上述过程即对客户端的访问请求分析,分析查询条件(参数、字段、表名、schema),根据查询条件选择相对应的配置规则。Router确定查询路径,Executor负责执行。
例如,sql语句select*from t_user where id=123456and username='小华'。
解析结果:1.数据库表名t_user;2.依据数据库表名在配置规则的解析表中查找对应的字段,读取t_user的所有字段名;3.where条件参数:id=123456,username='小华'。
分析结果:根据id分析,以id作为参考字段,按1000取模来说,id=123456可得到下标456;然后路由到456这个Namenode;定位到Namenode之后,Namenode下面有若干个Datanode,可以采用不同的算法取遍历,选取Datanode,比如随机、轮询,找到Datanode之后,就持有一个Datasource,Datanode持有一个Provider,一个Provider持有一个Datasource,执行过程即Datanode至Provider至Datasource,其中Provider可以有多个Datasource,即依次遍历调用多个Datasource,顺序例如随机,或者轮询顺序。
(6)对配置规则路由到相应的Namenode命名节点(Router路由器)。
Namenode可以为一个抽象的节点,Datanode可以挂接数据访问,与Datasource绑定。一组Datanode至少对应一个Datasource,比如一组包含主从的Datanode至少对应一个Datasource,而一个Namenode可以对应多个Datanode,一个Damenode对应多个Datanode。
其中,Datasource是其通用含义,即是提供某种所需要数据的器件或原始媒体,即数据的来源。在数据源中存储了所有建立数据库连接的信息,就像通过指定文件名称可以在文件系统中找到文件一样,通过提供正确的数据源名称,可以找到相应的数据库连接。
(7)执行前调用拦截器(可以接入监控组件interceptor拦截器)。
该步骤为执行前的操作,譬如修改参数修改,缓存同步,数据库同步,监控等。其中,用户可以控制修改,sql参数可以修改,context上下文也可以修改;缓存同步就是将数据更新到缓存,例如sql中的参数数据等。
(8)执行路由结果的sql(executor执行器执行)。
Router确定调用线路,执行器(executor)执行调用。路由之后可以选择性的进行统计分析(statistics),
(9)进行负载均衡(Loadbalance)和HA。
本步骤为可选过程:如预先配置Loadbalance以及HA,则将在executor执行调取后根据情况确定是否需要执行Loadbalance以及HA。
例如,随机选取一个Datanode、或者一个Datanode失败了,就会执行HA,切换到另外一个Datanode,其中失败的情况可以包括数据库访问不通、链接断掉了、网络有问题等。采用HA的方案执行,选取该Namenode下面其他的Datanode,具体选取哪个就是根据之前的选取算法,根据随机或者轮询遍历等方式选取对DataNode选取进行HA操作,
(10)执行后调用拦截器。
该步骤为执行后的操作,例如修改参数、缓存同步、数据库同步、监控等,与执行前调用拦截器相似,只是处理内容的先后问题。拦截器可以选择Plugin插件,该插件可以包括statistics与安全检查(Security checker)等。
(11)合并执行结果(利用mergers结果合并器)。
在图5中,预设的配置文件存储于配置中心内;将配置文件进行加载得到配置规则,由配置模块(图中示为configurations)调取配置规则,提供给router,由功能模块(图中示为分库分表function)为配置参数找到相对应的配置规则;由路由根据配置规则找到Namenode,Namenode确定Datanode,在多个数据库中进行查询产生多个结果集,对多个结果集进行合并。
图6是数据库中间件接收来自服务端的访问请求时设计的架构示意,服务端与客户端的执行过程相似,因此,图6仅示出了服务端的大体架构。下面结合图6对服务端的流程方式进行说明。
(1)启动服务端组件,监听端口。
(2)加载配置文件(该过程可以在配置中心加载)。与客户端的加载过程相同。
(3)封装mysql。封装后的mysql处理时更加简单
(4)解析客户端访问二进制协议。该过程为计算机语言的翻译过程,相当于将服务端的计算机语言解析成为sql语句。
在上述过程解析后得到了中间件能够读取的sql语句,然后再按照客户端的方式执行具体流程,即执行(5)-(12)。
(5)解析sql语句(利用sqlparser)。
(6)分析sql语句的配置参数(利用analyzer)。
(7)将配置规则路由到相应的Namenode(通过router)。
(8)执行前调用拦截器(可以接入监控组件interceptor)。
(9)执行路由结果的sql(通过executor)。
(10)根据情况执行LoadBalance、HA。
(11)执行后调用拦截器(interceptor)。
(12)合并执行结果(通过merger)。
通过运用本实施例,将数据库分布式访问方式从业务代码中抽象出来,简化开发,使得业务代码更加清晰,提升生产效率。对公司运维、DBA、开发、产品等业务人员有巨大的帮助,能够提升生产效率;能够结合公司的实际情况,针对现有系统进行优化,提供更安全、效率更高、安全更好、逻辑性更加清晰合理的架构。
尽管为示例目的,已经公开了本发明的优选实施例,本领域的技术人员将意识到各种改进、增加和取代也是可能的,因此,本发明的范围应当不限于上述实施例。
Claims (18)
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语句进行IO处理;
对IO处理后的所述链接处理层Golang语句进行封装,并将封装后的Golang语句解析成sql语句;
再按照所述访问请求为来自客户端的访问请求时的情况,执行所述数据库中间件根据所述检索条件对多个数据库进行检索。
12.一种数据库中间件,其特征在于,包括:
接收模块,用于接收访问请求,所述访问请求携带有检索条件;
检索模块,用于根据所述检索条件对多个数据库进行检索,以找到符合所述检索条件的数据信息。
13.如权利要求12所述的数据库中间件,其特征在于,还包括:
加载模块,用于加载预设的配置文件,其中,加载过程包括:建立二级层级的虚拟节点,所述二级层级的虚拟节点用于控制读写分离和调用数据时长,其中,第一层级虚拟节点包括:第二层级虚拟节点的对应关系表,第二层级虚拟节点包括:与数据库的对应关系表;获取路由的配置规则;
封装模块,用于将多个应用组件进行封装,并通过预定访问接口进行数据库的访问操作。
14.如权利要求12所述的数据库中间件,其特征在于,还包括:
集合模块,用于将所述数据信息进行集合,并将集合后的数据信息进行输出。
15.如权利要求12至14中任一项所述的数据库中间件,其特征在于,当所述访问请求为来自客户端的访问请求时,所述检索模块包括:
解析分析单元,用于解析所述访问请求中检索条件对应的sql语句,并对解析后的sql语句进行分析,以确定需要路由的第一层级虚拟节点的配置参数;
路由单元,用于接收所述配置参数,并调用所述配置参数对应的配置规则,以根据所述配置规则对确定的第一层级虚拟节点执行路由过程,得到符合所述访问请求的数据信息。
16.如权利要求15所述的数据库中间件,其特征在于,
所述路由单元,还用于将包括配置参数的调用指令发送至存储配置规则的设备,以使得存储配置规则的设备根据所述配置参数确定路由时需要的配置规则;或者,用于通过预设策略确定路由时需要的配置规则,从存储配置规则的设备中获取所述需要的配置规则。
17.如权利要求15所述的数据库中间件,其特征在于,
所述路由单元,还用于按照所述配置规则查找对应的第一层级虚拟节点;在找到的第一层级虚拟节点上查找第二层级虚拟节点的对应关系表,以确定下一级的第二层级虚拟节点;查找确定的第二层级虚拟节点对应的数据库,并在所述数据库中执行sql语句,以得到符合所述访问请求的数据信息。
18.如权利要求15所述的数据库中间件,其特征在于,还包括:
安全检查单元,用于对分析得到的配置参数进行安全检测;在所述配置参数安全的情况下,将所述配置参数发送至路由单元。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410245914.4A CN104063425B (zh) | 2014-06-04 | 2014-06-04 | 通过数据库中间件查询数据的方法和数据库中间件 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410245914.4A CN104063425B (zh) | 2014-06-04 | 2014-06-04 | 通过数据库中间件查询数据的方法和数据库中间件 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104063425A true CN104063425A (zh) | 2014-09-24 |
CN104063425B CN104063425B (zh) | 2017-09-19 |
Family
ID=51551140
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410245914.4A Active CN104063425B (zh) | 2014-06-04 | 2014-06-04 | 通过数据库中间件查询数据的方法和数据库中间件 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104063425B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104601693A (zh) * | 2015-01-13 | 2015-05-06 | 北京京东尚科信息技术有限公司 | 一种分布式系统中响应操作指令的方法和装置 |
CN105426487A (zh) * | 2015-11-20 | 2016-03-23 | 北京京东尚科信息技术有限公司 | 分布式数据库访问控制方法和设备、分布式数据库系统及其扩容方法 |
CN106021253A (zh) * | 2015-03-31 | 2016-10-12 | 欧姆龙株式会社 | 可编程逻辑控制器、数据收集装置、数据库访问方法及程序 |
CN106446029A (zh) * | 2016-08-31 | 2017-02-22 | 天津南大通用数据技术股份有限公司 | 一种可配置数据转换中间件 |
CN106547790A (zh) * | 2015-09-22 | 2017-03-29 | 中移(杭州)信息技术有限公司 | 一种关系型数据库服务系统 |
CN107066575A (zh) * | 2017-04-11 | 2017-08-18 | 广东亿迅科技有限公司 | 用于实现数据库读写负载均衡的方法及其系统 |
CN107180081A (zh) * | 2017-04-28 | 2017-09-19 | 广东亿迅科技有限公司 | 海量关系型数据库的调用方法及装置 |
CN107943868A (zh) * | 2017-11-10 | 2018-04-20 | 顺丰科技有限公司 | 支持系统信息友好查看的数据库中间件的方法及设备 |
CN110324333A (zh) * | 2019-06-29 | 2019-10-11 | 北京启迪区块链科技发展有限公司 | 一种数据处理方法、装置、终端及存储介质 |
CN110678854A (zh) * | 2017-05-31 | 2020-01-10 | 华为技术有限公司 | 数据查询的方法和装置 |
CN111367983A (zh) * | 2020-03-10 | 2020-07-03 | 中国联合网络通信集团有限公司 | 数据库访问方法、系统、设备和存储介质 |
CN112131245A (zh) * | 2020-09-23 | 2020-12-25 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 拟态防御架构的高性能数据访问系统及方法 |
CN112256707A (zh) * | 2020-12-18 | 2021-01-22 | 上海爱可生信息技术股份有限公司 | 一种数据库中间件的流量管理方法及数据库中间件节点 |
CN112346723A (zh) * | 2020-11-13 | 2021-02-09 | 上海宝旗信息科技有限公司 | 一种数据库访问低代码生成中间件系统 |
CN112685402A (zh) * | 2019-10-17 | 2021-04-20 | 拉扎斯网络科技(上海)有限公司 | 数据存储及查询方法、装置、电子设备及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101136024A (zh) * | 2007-09-30 | 2008-03-05 | 杜庆锋 | 多中心血液肿瘤遗传学资源信息的联合检索系统 |
CN101299681A (zh) * | 2008-06-26 | 2008-11-05 | 中兴通讯股份有限公司 | 一种查询类智能业务数据系统及其实现方法 |
US20110047125A1 (en) * | 2008-05-30 | 2011-02-24 | Fujitsu Limited | Configuration item management device and configuration item management method |
CN103237321A (zh) * | 2013-05-08 | 2013-08-07 | 重庆金美通信有限责任公司 | 一种用于网络协议栈测试的物理层通道模拟方法 |
-
2014
- 2014-06-04 CN CN201410245914.4A patent/CN104063425B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101136024A (zh) * | 2007-09-30 | 2008-03-05 | 杜庆锋 | 多中心血液肿瘤遗传学资源信息的联合检索系统 |
US20110047125A1 (en) * | 2008-05-30 | 2011-02-24 | Fujitsu Limited | Configuration item management device and configuration item management method |
CN101299681A (zh) * | 2008-06-26 | 2008-11-05 | 中兴通讯股份有限公司 | 一种查询类智能业务数据系统及其实现方法 |
CN103237321A (zh) * | 2013-05-08 | 2013-08-07 | 重庆金美通信有限责任公司 | 一种用于网络协议栈测试的物理层通道模拟方法 |
Non-Patent Citations (1)
Title |
---|
王芙蓉等: "路由器虚拟终端的设计和实现", 《中国期刊全文数据库 计算机工程与设计》 * |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104601693A (zh) * | 2015-01-13 | 2015-05-06 | 北京京东尚科信息技术有限公司 | 一种分布式系统中响应操作指令的方法和装置 |
CN106021253A (zh) * | 2015-03-31 | 2016-10-12 | 欧姆龙株式会社 | 可编程逻辑控制器、数据收集装置、数据库访问方法及程序 |
CN106547790B (zh) * | 2015-09-22 | 2020-06-30 | 中移(杭州)信息技术有限公司 | 一种关系型数据库服务系统 |
CN106547790A (zh) * | 2015-09-22 | 2017-03-29 | 中移(杭州)信息技术有限公司 | 一种关系型数据库服务系统 |
CN105426487A (zh) * | 2015-11-20 | 2016-03-23 | 北京京东尚科信息技术有限公司 | 分布式数据库访问控制方法和设备、分布式数据库系统及其扩容方法 |
CN106446029A (zh) * | 2016-08-31 | 2017-02-22 | 天津南大通用数据技术股份有限公司 | 一种可配置数据转换中间件 |
CN107066575A (zh) * | 2017-04-11 | 2017-08-18 | 广东亿迅科技有限公司 | 用于实现数据库读写负载均衡的方法及其系统 |
CN107066575B (zh) * | 2017-04-11 | 2021-01-15 | 广东亿迅科技有限公司 | 用于实现数据库读写负载均衡的方法及其系统 |
CN107180081A (zh) * | 2017-04-28 | 2017-09-19 | 广东亿迅科技有限公司 | 海量关系型数据库的调用方法及装置 |
CN110678854B (zh) * | 2017-05-31 | 2021-10-15 | 华为技术有限公司 | 数据查询的方法和装置 |
CN110678854A (zh) * | 2017-05-31 | 2020-01-10 | 华为技术有限公司 | 数据查询的方法和装置 |
CN107943868A (zh) * | 2017-11-10 | 2018-04-20 | 顺丰科技有限公司 | 支持系统信息友好查看的数据库中间件的方法及设备 |
CN110324333A (zh) * | 2019-06-29 | 2019-10-11 | 北京启迪区块链科技发展有限公司 | 一种数据处理方法、装置、终端及存储介质 |
CN110324333B (zh) * | 2019-06-29 | 2021-12-28 | 北京启迪区块链科技发展有限公司 | 一种数据处理方法、装置、终端及存储介质 |
CN112685402B (zh) * | 2019-10-17 | 2023-03-24 | 拉扎斯网络科技(上海)有限公司 | 数据存储及查询方法、装置、电子设备及存储介质 |
CN112685402A (zh) * | 2019-10-17 | 2021-04-20 | 拉扎斯网络科技(上海)有限公司 | 数据存储及查询方法、装置、电子设备及存储介质 |
CN111367983A (zh) * | 2020-03-10 | 2020-07-03 | 中国联合网络通信集团有限公司 | 数据库访问方法、系统、设备和存储介质 |
CN111367983B (zh) * | 2020-03-10 | 2023-08-15 | 中国联合网络通信集团有限公司 | 数据库访问方法、系统、设备和存储介质 |
CN112131245A (zh) * | 2020-09-23 | 2020-12-25 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 拟态防御架构的高性能数据访问系统及方法 |
CN112346723A (zh) * | 2020-11-13 | 2021-02-09 | 上海宝旗信息科技有限公司 | 一种数据库访问低代码生成中间件系统 |
CN112256707B (zh) * | 2020-12-18 | 2021-04-09 | 上海爱可生信息技术股份有限公司 | 一种数据库中间件的流量管理方法及数据库中间件节点 |
CN112256707A (zh) * | 2020-12-18 | 2021-01-22 | 上海爱可生信息技术股份有限公司 | 一种数据库中间件的流量管理方法及数据库中间件节点 |
Also Published As
Publication number | Publication date |
---|---|
CN104063425B (zh) | 2017-09-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104063425A (zh) | 通过数据库中间件查询数据的方法和数据库中间件 | |
CN108279892B (zh) | 一种拆分大型应用服务为微服务的方法、装置及设备 | |
US11665142B2 (en) | Dynamic discovery of executing applications | |
CN105574082A (zh) | 基于Storm的流处理方法及系统 | |
US11140042B2 (en) | Dictionary-based service mapping | |
CN104767795A (zh) | 一种基于hadoop的lte mro数据统计方法及系统 | |
CN107480223B (zh) | 一种搜索方法、装置及存储介质 | |
CN115794106A (zh) | 一种轨道交通二进制协议数据配置式解析的方法及系统 | |
US11502897B2 (en) | Intelligent export and import of service representations | |
US11805146B2 (en) | System and method for detection promotion | |
CN106789142A (zh) | 资源配置的方法和装置 | |
CN113220235A (zh) | 读写请求的处理方法、装置、设备及存储介质 | |
US11290357B2 (en) | Automated document summaries using highlighting | |
JP2021140430A (ja) | データベースマイグレーション方法、データベースマイグレーションシステム、及びデータベースマイグレーションプログラム | |
US8108349B1 (en) | Directory services integration and replication system | |
CN110008448A (zh) | 将SQL代码自动转换为Java代码的方法和装置 | |
US11263195B2 (en) | Text-based search of tree-structured tables | |
CN109947451B (zh) | 一种集群应用文件更新方法、系统、介质及设备 | |
CN116132250A (zh) | 运维系统、方法、存储介质、电子设备 | |
EP4383065A2 (en) | Computationally efficient traversal of virtual tables | |
US20240193051A1 (en) | Centralized Configuration and Change Tracking for a Computing Platform | |
CN109684158A (zh) | 分布式协调系统的状态监控方法、装置、设备及存储介质 | |
US20240193215A1 (en) | Computationally Efficient Traversal of Virtual Tables | |
CN114528266B (zh) | 实现数据库和缓存一致性的方法、系统、设备和存储介质 | |
CN114584621B (zh) | 一种数据发送的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |