一种分布式数据库查询方法及装置制造方法

文档序号:6550554阅读:101来源:国知局
一种分布式数据库查询方法及装置制造方法
【专利摘要】本发明实施例涉及数据库查询【技术领域】,尤其涉及一种分布式数据库查询方法及装置。该方法包括:A、从分布式数据库的初始查询语句中解析获得不包括子查询语句的查询语句,作为待查询语句;B、在分布式数据库中执行待查询语句,并汇总待查询语句的数据查询结果;C、在初始查询语句中采用待查询语句的数据查询结果替换待查询语句,以重新形成初始查询语句;D、判断重新形成的初始查询语句是否包括子查询语句,若包括,则重复步骤A-步骤C;否则,在分布式数据库中执行重新形成的初始查询语句,并汇总重新形成的初始查询语句的数据查询结果。该方法能够完整的执行针对分布式数据库的嵌套查询,提高数据查询结果的准确性。
【专利说明】一种分布式数据库查询方法及装置
【技术领域】
[0001]本发明实施例涉及数据库查询【技术领域】,尤其涉及一种分布式数据库查询方法及
>J-U ρ?α装直。
【背景技术】
[0002]在分布式数据库的中间件系统中,DML(Data Manipulat1n Language,数据操纵语言命令)语句可能为包括子查询语句的嵌套查询语句。在分布式数据库中执行子查询可能需要涉及到多个数据分片。具体的,在分布式数据库中执行子查询时,需要首先解析出子查询的具体内容,然后根据路由把子查询发往到各个数据分片并收集子查询在各个数据分片的查询结果,才能在上一级查询中进行后续的查询。
[0003]在分布式数据库 中,只有子查询所涉及的表、路由和分配方式分别与父查询所涉及的表、路由和分片方式均一致时,才能够不受限制的支持嵌套查询。然而,实现子查询所涉及的表、路由和分配方式分别与父查询所涉及的表、路由和分片方式一致,对SQL (Structured Query Language,结构化查询语言)语句的要求特别高,可操作性不强。目前尚且缺乏在分布式数据库的中间件系统中能够完整的执行嵌套查询方法,数据查询结果的准确性较低。

【发明内容】

[0004]本发明实施例的目的是提出一种分布式数据库查询方法及装置,以使得在分布式数据库的中间件系统中能够完整的执行嵌套查询,以提高数据查询结果的准确性。
[0005]一方面,本发明实施例中提供了一种分布式数据库查询方法,包括:
[0006]A、从分布式数据库的初始查询语句中解析获得不包括子查询语句的查询语句,作为待查询语句;
[0007]B、在所述分布式数据库中执行所述待查询语句,并汇总所述待查询语句的数据查询结果;
[0008]C、在所述初始查询语句中采用所述待查询语句的数据查询结果替换所述待查询语句,以重新形成初始查询语句;
[0009]D、判断重新形成的初始查询语句是否包括子查询语句,若包括,则重复步骤A-步骤C ;否则,在所述分布式数据库中执行重新形成的初始查询语句,并汇总所述重新形成的初始查询语句的数据查询结果。
[0010]另一方面,本发明实施例中提供了一种分布式数据库查询装置,包括:
[0011]语句获取单元,用于从分布式数据库的初始查询语句中解析获得不包括子查询语句的查询语句,作为待查询语句;
[0012]查询执行单元,在所述分布式数据库中执行所述待查询语句,并汇总所述待查询语句的数据查询结果;
[0013]语句拼装单元,在所述初始查询语句中采用所述待查询语句的数据查询结果替换所述待查询语句,以重新形成初始查询语句;
[0014]执行及结果汇总单元,则再次触发所述语句获取单元、所述查询执行单元和所述语句拼装单元执行相应操作,以重新形成待查询语句;否则,在所述分布式数据库中执行重新形成的初始查询语句,并汇总所述重新形成的初始查询语句的数据查询结果。
[0015]本发明实施例中提供的分布式数据库查询方法及装置,能够在分布式数据库的中间件系统中完整的执行嵌套查询。本发明实施例中,从SQL初始查询语句中解析出子查询语句和初始查询语句的解析关系,采用子查询语句的结果能够将初始查询语句重新拼装形成新的迭代后的SQL查询,从而使整个装置能够处理复杂的包括子查询语句的嵌套查询语句。
【专利附图】

【附图说明】
[0016]此处所说明的附图用来提供对本发明实施例的进一步理解,构成本发明实施例的一部分,并不构成对本发明实施例的限定。在附图中:
[0017]图1是本发明一实施例中提供的分布式数据库查询方法的实现流程图;
[0018]图2是解析获得初始待查询语句的实现流程图;
[0019]图3是本发明一实施例中提供的分布式数据库查询的方法的实现流程图;
[0020]图4是执行不包括子查询的待查询语句的实现流程图;
[0021]图5是本发明一实施例中提供的分布式数据库查询装置的结构示意图。
【具体实施方式】
[0022]下面结合附图及具体实施例对本发明实施例进行更加详细与完整的说明。可以理解的是,此处所描述的具体实施例仅用于解释本发明实施例,而非对本发明实施例的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明实施例相关的部分而非全部内容。
[0023]图1是本发明一实施例中提供的分布式数据库查询方法的实现流程图,该实现流程包括:
[0024]步骤11、从分布式数据库的初始查询语句中解析获得不包括子查询语句的查询语句,作为待查询语句。
[0025]初始查询语句指的是包括子查询语句的嵌套查询语句。解析针对分布式数据库的初始查询语句,以获得不包括子查询语句的查询语句,作为待查询语句。当所述初始查询语句为包括至少两层子查询的嵌套查询语句时,获得的待查询语句为所述初始查询语句的最内层子查询语句。
[0026]图2是解析获得初始待查询语句的实现流程图。如图2所示,从分布式数据库的初始查询语句中解析获得不包括子查询语句的查询语句,作为待查询语句,具体可以包括:
[0027]步骤111、解析所述初始查询语句,获得所述初始查询语句的子查询语句,作为待查询语句。由于所述初始查询语句为嵌套查询语句,故首先获得所述初始查询语句的子查询语句,作为待查询语句。另外,由于在分布式数据库中,只有子查询所涉及的表、路由和分配方式分别与父查询所涉及的表、路由和分片方式均一致时,才能够不受限制的支持嵌套查询,故,若所述待查询语句中包括子查询语句,则无法完整获得所述待查询语句的完整数据查询结果。
[0028]步骤112、若所述待查询语句包括子查询语句,则获得所述待查询语句的子查询语句,作为新的待查询语句。
[0029]需要说明的是,若所述待查询语句中不包括子查询语句,则获得步骤111中的所述待查询语句,并结束步骤11的操作。
[0030]步骤113、在通过步骤112获得新的待查询语句之后,重复执行步骤112,直到获得不包括子查询的查询语句,作为待查询语句为止。通过执行步骤111-步骤113最终获得的待查询语句中不包括子查询语句。
[0031]步骤12、在所述分布式数据库中执行所述待查询语句,并汇总所述待查询语句的数据查询结果。
[0032]在分布式数据库中,执行步骤11中获得的待查询语句。具体的,根据路由信息把所述待查询语句发往到各个数据库分片中,执行所述待查询语句,并收集汇总数据查询结果。由于待查询语句中不包括子查询语句,故在分布式数据库中能够完整的执行所述待查询语句,即汇总的数据查询结果是所述待查询语句针对分布式数据库的完整结果。
[0033]其中,在所述分布式数据库中执行所述待查询语句,并汇总所述待查询语句的查询结果,具体可以包括:解析获得所述待查询语句在所述分布式数据库中涉及的各个数据库分片;在涉及的各个数据库分片上分别执行所述待查询语句。
[0034]步骤13、在所述初始查询语句中采用所述待查询语句的数据查询结果替换所述待查询语句,以重新形成初始查询语句。
[0035]在所述初始查询语句中,采用步骤12中汇总的所述待查询语句的数据查询结果替换所述待查询语句,以重新形成待查询语句。若步骤11中的初始待查询语句为K层嵌套查询语句,则步骤13中重新形成的初始查询语句为(K-1)层嵌套查询语句,其中,K为大于等于2的自然数。
[0036]需要说明的是,在汇总所述待查询语句的数据查询结果之后,且在重新形成待查询语句之前,还可以包括:将汇总的查询结果封装成统一的数据格式。例如,将步骤12中获得的待查询语句数据查询结果封装成统一的第三方格式,比如封装成JSON(JavaScriptObject Notat1n, JavaScript 对象的符号)数据或 PB (Protocal Buffer,协议缓冲区)数据等形式。
[0037]当步骤12中获得的数据查询结果封装成统一的数据格式之后,在所述初始查询语句中采用所述待查询语句的数据查询结果替换所述待查询语句,还可以包括:解析所述统一的数据格式中的数据内容,并且在所述初始查询语句中采用所述解析的数据内容替换所述待查询语句。即初始查询语句去解析第三方格式中的数据内容,解析之后在所述初始查询语句中采用所述解析的数据内容替换所述待查询语句,以完成初始查询语句的再次拼装。
[0038]步骤14、判断重新形成的待查询语句是否包括子查询语句,若包括,则重复步骤11-步骤13 ;否则,在所述分布式数据库中执行重新形成的待查询语句,并汇总所述重新形成的待查询语句的数据查询结果。
[0039]判断步骤13中重新形成的初始查询语句中是否包括子查询语句,若包括,则重复执行步骤11-步骤13,以重新形成初始查询语句,且重新形成的初始查询语句中不包括子查询语句。由于步骤14中能够获得不包括子查询语句的初始查询语句,故在分布式数据库中能够完整获得查收查询语句的数据查询结果。
[0040]本发明实施例中提供的分布式数据库查询的方法,在分布式数据库的中间件系统中,通过初始查询语句与待查询语句的解析关系,能够将待查询语句的数据查询结果与初始查询语句重新拼装成新的迭代后的初始查询语句,从而能够完整的获得针对分布式数据库的嵌套查询语句的数据查询结果。
[0041]图3是本发明一实施例中提供的分布式数据库查询的方法的实现流程图,如图3所示,该方法主要包括4个步骤,其中步骤11-步骤13是不断迭代执行的。
[0042]步骤11、首先解析出完整的SQL初始查询语句中的子查询语句以及子查询语句与初始查询语句交互方式;
[0043]步骤12、有效在分布式数据库中执行子查询语句;
[0044]步骤13、汇总子查询语句的数据查询结果,并且根据子查询语句与初始查询语句的交互方式,重新拼装SQL,以获得新的初始查询语句;
[0045]步骤14、在分布式数据库中执行重新拼装形成的初始查询语句。其中,在分布式数据库中执行重新拼装形成的初始查询语句具体的为不断迭代执行步骤11-步骤13,直到获得步骤11中初始查询语句的数据查询结果为止。
[0046]例如,步骤11 中初始查询语句如下:
[0047]SELECT FirstNamel
[0048], [MiddleName]
[0049], [LastName]
[0050]FROMrAdventurefforksl.[Person].[Contact]
[0051]WHEREContactIDIN
[0052](SELECTEmployeeID
[0053]FROMrAdventurefforksl.[HumanResources].[Employee]
[0054]WHERESickLeaveHours>68)
[0055]上述初始查询语句的处理过程具体如下:
[0056]步骤11、首先通过SQL解析,解析初始查询语句中的不包括子查询语句的查询语句,作为待查询语句,获得的待查询语句如下:
[0057]SELECTEmployeeID
[0058]FROMrAdventurefforksl.[HumanResources].[Employee]
[0059]WHERESickLeaveHours>68
[0060]步骤12、执行待查询语句,待查询语句的执行过程会涉及到数据库分片的路由,可能会发送到若干数据库存分片去执行如下待查询语句:
[0061]SELECTEmployeeID
[0062]FROMrAdventurefforksl.[HumanResources].[Employee]
[0063]WHERESickLeaveHours>68
[0064]步骤13、通过步骤12获得待查询语句的数据查询结果之后,与初始查询语句中“WHERE”关键词进行再次拼装和处理,例如,若该待查询语句返回的是ID数据为(1,3,89),则该结果重新与初始查询语句进行SQL拼装组合形成的新的待查询语句,如下:[0065]SELECT TFirstNamel
[0066], [MiddleName]
[0067], [LastName]
[0068]FROMrAdventurefforksl.[Person].[Contact]
[0069]WHEREContactIDIN(I, 23,89)
[0070]步骤14、将步骤13中形成的新的待查询语句发到相应的数据库分片上去执行,再次取得的数据查询结果为最终结果。
[0071]图4是执行不包括子查询的待查询语句的实现流程图,如图4所示,在分布式数据库中执行不包括子查询的待查询语句时,主要包括如下步骤=SQL语句解析、操作对象解析、普通SQL优化器操作、SQL查询语句冲拼装、元数据管理、路由管理、JOIN分拆处理等。其中,SQL语句解析具体可以包括:对操作对象中数据库或表信息的解析、对数据操作的解析、对执行条件“where”的处理和其它执行条件的解析处理,例如“Having”或“limit”等执行条件的解析处理。元数据管理,具体用于处理查询语句涉及的元数据。普通SQL优化器能够通过查询语句等价变化或“where”语句分析实现初步执行分拆。JOIN语句,用于根据两个或多个表中的列之间的关系,从所述两个表或多个表中查询数据。在JOIN分拆处理和获得初步执行分拆之后,还能够依据JOIN分拆处理结果和查询语句重拼装,重新形成多个执行计划;根据重新形成的多个执行计划和后期处理信息,通过分离查询处理和后处理操作,获得初始查询语句的数据查询结果。
[0072]以下为本发明实施例的装置实施例,本发明方法实施例和装置实施例属于同一构思,在装置实施例中未详尽描述的细节内容,可以参考上述方法实施例。
[0073]图5是本发明一实施例中提供的分布式数据库查询装置的结构示意图。如图5所示,本实施例所述的分布式数据库查询装置包括:语句获取单元31,用于从分布式数据库的初始查询语句中解析获得不包括子查询语句的查询语句,作为待查询语句;查询执行单元32,在所述分布式数据库中执行所述待查询语句,并汇总所述待查询语句的数据查询结果;语句拼装单元33,在所述初始查询语句中采用所述待查询语句的数据查询结果替换所述待查询语句,以重新形成初始查询语句;执行及结果汇总单元34,则再次触发所述语句获取单元、所述查询执行单元和所述语句拼装单元执行相应操作,以重新形成待查询语句;否则,在所述分布式数据库中执行重新形成的初始查询语句,并汇总所述重新形成的初始查询语句的数据查询结果。
[0074]其中,所述语句获取单元31具体可以包括:第一获取子单元,解析所述初始查询语句,获得所述初始查询语句的子查询语句,作为待查询语句;第二获取子单元,若所述待查询语句包括子查询语句,则获得所述待查询语句的子查询语句,作为新的待查询语句;第三获取子单元,再次触发所述第二获取子单元执行相应操作,直到获得不包括子查询的查询语句,作为待查询语句为止。
[0075]其中,所述查询执行单元32具体可以包括:分片获取子单元,用于解析获得所述待查询语句在所述分布式数据库中涉及的各个数据库分片;执行子单元,用于在涉及的各个数据库分片上分别执行所述待查询语句。
[0076]其中,该分布式数据库查询装置,还可以包括:结果封装单元,用于将汇总的查询结果封装成统一的数据格式。此时,所述语句拼装单元33具体包括:数据解析子单元,用于解析所述统一的数据格式中的数据内容;以及,语句拼装子单元,用于在所述初始查询语句中采用所述解析的数据内容替换所述待查询语句。
[0077]本发明实施例提出分布式数据库查询装置,可以让分布式数据库中间件系统能够保持分布式系统的优点的前提下,尽可能的处理复杂的包括子查询的嵌套查询语句,并且能够支持OLAP (On-Line Analysis Processing,联机分析处理)的应用。
[0078]上所述仅为本发明实施例的优选实施例,并不用于限制本发明实施例,对于本领域技术人员而言,本发明实施例可以有各种改动和变化。凡在本发明实施例的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明实施例的保护范围之内。
【权利要求】
1.一种分布式数据库查询方法,其特征在于,包括: A、从分布式数据库的初始查询语句中解析获得不包括子查询语句的查询语句,作为待查询语句; B、在所述分布式数据库中执行所述待查询语句,并汇总所述待查询语句的数据查询结果; C、在所述初始查询语句中采用所述待查询语句的数据查询结果替换所述待查询语句,以重新形成初始查询语句; D、判断重新形成的初始查询语句是否包括子查询语句,若包括,则重复步骤A-步骤C;否则,在所述分布式数据库中执行重新形成的初始查询语句,并汇总所述重新形成的初始查询语句的数据查询结果。
2.根据权利要求1所述的方法,其特征在于,从分布式数据库的初始查询语句中解析获得不包括子查询语句的查询语句,作为待查询语句,包括: Al、解析所述初始查询语句,获得所述初始查询语句的子查询语句,作为待查询语句; A2、若所述待查询语句包括子查询语句,则获得所述待查询语句的子查询语句,作为新的待查询语句; A3、重复执行步骤A2,直到 获得不包括子查询的查询语句,作为待查询语句为止。
3.根据权利要求1所述的方法,其特征在于,在所述分布式数据库中执行所述待查询语句,并汇总所述待查询语句的查询结果,包括: 解析获得所述待查询语句在所述分布式数据库中涉及的各个数据库分片; 在涉及的各个数据库分片上分别执行所述待查询语句。
4.根据权利要求1所述的方法,其特征在于,在汇总所述待查询语句的数据查询结果之后且在重新形成待查询语句之前,还包括: 将汇总的查询结果封装成统一的数据格式。
5.根据权利要求4所述的方法,其特征在于,在所述初始查询语句中采用所述待查询语句的数据查询结果替换所述待查询语句,包括: 解析所述统一的数据格式中的数据内容,并且在所述初始查询语句中采用所述解析的数据内容替换所述待查询语句。
6.一种分布式数据库查询装置,其特征在于,包括: 语句获取单元,用于从分布式数据库的初始查询语句中解析获得不包括子查询语句的查询语句,作为待查询语句; 查询执行单元,在所述分布式数据库中执行所述待查询语句,并汇总所述待查询语句的数据查询结果; 语句拼装单元,在所述初始查询语句中采用所述待查询语句的数据查询结果替换所述待查询语句,以重新形成初始查询语句; 执行及结果汇总单元,则再次触发所述语句获取单元、所述查询执行单元和所述语句拼装单元执行相应操作,以重新形成待查询语句;否则,在所述分布式数据库中执行重新形成的初始查询语句,并汇总所述重新形成的初始查询语句的数据查询结果。
7.根据权利要求6所述的装置,其特征在于,所述语句获取单元具体包括: 第一获取子单元,解析所述初始查询语句,获得所述初始查询语句的子查询语句,作为待查询语句; 第二获取子单元,若所述待查询语句包括子查询语句,则获得所述待查询语句的子查询语句,作为新的待查询语句; 第三获取子单元,再次触发所述第二获取子单元执行相应操作,直到获得不包括子查询的查询语句,作为待查询语句为止。
8.根据权利要求6所述的装置,其特征在于,所述查询执行单元具体包括: 分片获取子单元,用于解析获得所述待查询语句在所述分布式数据库中涉及的各个数据库分片; 执行子单元,用于在涉及的各个数据库分片上分别执行所述待查询语句。
9.根据权利要求6所述的装置,其特征在于,还包括: 结果封装单元,用于将汇总的查询结果封装成统一的数据格式。
10.根据权利要求9所述的装置,其特征在于,所述语句拼装单元具体包括: 数据解析子单元,用于解析所述统一的数据格式中的数据内容;以及, 语句拼装子单元,用于在所述初始查询语句中采用所述解析的数据内容替换所述待查询语句。
【文档编号】G06F17/30GK104036007SQ201410283343
【公开日】2014年9月10日 申请日期:2014年6月23日 优先权日:2014年6月23日
【发明者】秦波, 马丽伟, 赵晓平, 王 锋, 唐超 申请人:北京京东尚科信息技术有限公司, 北京京东世纪贸易有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1