查询处理方法和装置与流程

文档序号:11063522阅读:1032来源:国知局
查询处理方法和装置与制造工艺

本发明属于数据库技术领域,尤其是涉及一种查询处理方法和装置。



背景技术:

可扩展标记语言(Extensible Markup Language,简称XML)数据库管理系统是近年快速发展的一种新型的数据库管理系统,它存储和检索的数据是XML文档。XML数据的检索语言是由万维网联盟(W3C)制定的标准的Xquery语言。

随着大数据时代的来临,XML数据库管理系统中存储的XML数据将非常巨大,且多核技术(Multi-Cores)也日臻成熟,可以预见未来多核处理器将成为计算机标准配置。在如此大量的数据中进行数据查询,若仍然采用传统的单线程查询引擎方式,将导致非常低的查询处理效率。



技术实现要素:

针对上述存在的问题,本发明提供一种查询处理方法和装置,用以提高查询处理速率。

本发明提供了一种查询处理方法,包括:

接收查询语句,所述查询语句包括XQuery查询语句;

对所述查询语句进行语法解析,生成语法树,所述语法树是所述查询语句的源代码的语法结构的树状表现形式,所述语法树上的每个节点表示所述查询语句中包含的一种语法结构;

对所述语法树进行子树拆分,获得各子树,每个子树中包含的节点构成子查询语句;

并行执行所述各子树分别对应的子查询语句,获得所述各子树分别对应的子查询结果集;

将各子查询结果集合并,输出与所述查询语句对应的查询结果。

本发明提供了一种查询处理装置,包括:

接收模块,用于接收查询语句,所述查询语句包括XQuery查询语句;

解析生成模块,用于对所述查询语句进行语法解析,生成语法树,所述语法树是所述查询语句的源代码的语法结构的树状表现形式,所述语法树上的每个节点表示所述查询语句中包含的一种语法结构;

拆分模块,用于对所述语法树进行子树拆分,获得各子树,每个子树中包含的节点构成子查询语句;

执行模块,用于并行执行所述各子树分别对应的子查询语句,获得所述各子树分别对应的子查询结果集;

输出模块,用于将各子查询结果集合并,输出与所述查询语句对应的查询结果。

本发明提供的查询处理方法和装置,在接收到查询语句之后,首先通过对该查询语句进行语法解析,生成对应的语法树,进而通过对该语法树进行子树的拆分,将该查询语句拆分为多个子查询语句,之后通过并行执行各子查询语句,得到每个子查询语句的执行结果即子查询结果集,最终通过将各子查询结果集合并,得到与接收到的查询语句对应的查询结果并输出该查询结果。通过对查询语句对应的语法树进行子树拆分,将查询语句拆分为多个子查询语句,通过并行执行各子查询语句,进而将各子查询语句的执行结果合并得到查询语句的查询结果,提高了查询处理效率。

附图说明

图1为本发明查询处理方法实施例一的流程图;

图2为一种语法树的结构示意图;

图3为本发明查询处理方法实施例二的流程图;

图4为本发明查询处理装置实施例一的结构示意图;

图5为本发明查询处理装置实施例二的结构示意图。

具体实施方式

图1为本发明查询处理方法实施例一的流程图,如图1所示,该方法包括如下步骤:

步骤101、接收查询语句,所述查询语句包括XQuery查询语句。

本实施例以利用XQuery查询语句查询XML数据为例进行说明。当用户需要从数据库中查询XML数据时,向数据库输入对应的XQuery查询语句。

步骤102、对所述查询语句进行语法解析,生成语法树。

其中,所述语法树是所述查询语句的源代码的语法结构的树状表现形式,所述语法树上的每个节点表示所述查询语句中包含的一种语法结构。

由于XQuery查询语句是一种标准的查询语句,其必然符合一定的语法规则,因此,通过对该XQuery查询语句进行按照语法规则的语法解析,能够得到该XQuery查询语句中包含的所有语法结构。

具体来说,可以先采用词法分析器对该XQuery查询语句进行词法解析,进而采用语法分析器对各个分词进行语法结构的分析。

进而,生成与解析出的语法结构对应的语法树。语法树作为一种树状结构,是XQuery查询语句的树状表示形式,语法树中的每个节点代表了XQuery查询语句中包含的一种语法结构。

对于树状表示形式来说,其具有根节点、父节点、子节点等概念。本实施例中,在生成XQuery查询语句所对应的语法树时,是按照倒序生成的该语法树,即按照从子节点到父节点最后到根节点的倒生顺序来生成的语法树。其中,最底层的叶子节点对应于该XQuery查询语句中不可再分的最小单位的语法结构,根节点是该XQuery查询语句,相当于各子节点最终汇集形成了该XQuery查询语句,而位于叶子节点和根节点之间的节点,表示的是还可以再拆分的语法结构,也就是说,父节点与子节点之间具有语法间的关联,从而形成父子关系。

举例来说,以查询语句for$i in doc(“Name.xml”)where $i/person/id=1return $i/person/name为例,其对应的语法树结构如图2所示。其中,根节点即是该查询语句,第一层的三个节点分别对应于该查询语句进行语法解析后获得的该查询语句中包含的最高层次的三种语法结构:ForClause,WhereClause,ReturnClause。其中,varClause和expr分别代表语法树中的一个中间状态,其在语法树的处理过程中分别根据其左右兄弟节点转换为ForClause,WhereClause,ReturnClause其中一种,或者保持最初的形式expr。

步骤103、对所述语法树进行子树拆分,获得各子树,每个子树中包含的节点构成子查询语句。

一般来说,对于简单的查询语句,其形成的树状结构的语法树与图2所示的结构类似,基于这样的语法树结构,可以对该语法树进行子树拆分,即将获得该语法树的各个分支结构,每个分支结构对应于一个子树,每个子树中包含的各个节点对应于一条子查询语句。可以理解的是,每条子查询语句的形成方式是按照从上而下的顺序形成的,而且,每条子查询语句中可以不包含根节点之一节点。以图2所示结构来说,可以拆分获得6条子查询语句。

步骤104、并行执行所述各子树分别对应的子查询语句,获得所述各子树分别对应的子查询结果集。

针对拆分获得的每条子查询语句来说,为其分配一个处理线程,从而,由各个子查询语句分别对应的处理线程并行执行各子查询语句,每个子查询语句的执行结果为子查询结果集。其中,并行执行即是分别执行的意思。

步骤105、将各子查询结果集合并,输出与所述查询语句对应的查询结果。

最终,将各个子查询语句的查询结果即各子查询结果集合并,得到与输入的查询语句对应的查询结果。

本实施例中,在接收到查询语句之后,首先通过对该查询语句进行语法解析,生成对应的语法树,进而通过对该语法树进行子树的拆分,将该查询语句拆分为多个子查询语句,之后通过并行执行各子查询语句,得到每个子查询语句的执行结果即子查询结果集,最终通过将各子查询结果集合并,得到与接收到的查询语句对应的查询结果并输出该查询结果。通过对查询语句对应的语法树进行子树拆分,将查询语句拆分为多个子查询语句,通过并行执行各子查询语句,进而将各子查询语句的执行结果合并得到查询语句的查询结果。该子查询语句拆分,并行执行各子查询语句,合并各子查询结果集的方式,可以显著提高查询处理效率。

图3为本发明查询处理方法实施例二的流程图,如图3所示,该方法包括如下步骤:

步骤201、接收查询语句,所述查询语句为XQuery查询语句。

步骤202、对所述查询语句进行语法解析,生成语法树。

前述步骤与图1所示实施例中对应步骤一致,不再赘述。

步骤203、确定所述语法树中是否存在数据依赖、控制依赖,若不存在, 则执行步骤204。

否则,若存在数据依赖、控制依赖,则根据现有技术中的方式,直接执行上述XQuery查询语句,获得查询结果。

本实施例中,输入的查询语句可能结构比较复杂,在对其对应的语法树进行子树拆分的过程中,可能不能拆分获得相互独立的多个子树,即可能无法将该语法树顺利拆分为多个独立的子树,使得进行了无用的拆分处理过程。

为了避免做无用功,本实施例中,在进行子树拆分前,首先进行语法树中是否存在数据依赖、控制依赖的判断,如果语法树中不存在数据依赖、控制依赖,则说明该语法树能够被拆分为多个独立的子树,从而查询语句能够被拆分为多个独立的子查询语句。否则,如果语法树中存在数据依赖、控制依赖,则说明该语法树不能被拆分为多个独立的子树,只能根据现有技术中的方式,直接执行上述XQuery查询语句,获得查询结果。

其中,确定语法树中是否存在数据依赖、控制依赖,可以通过如下方式实现:

生成与语法树对应的有向图,有向图中节点间的连接方向根据语法树中对应节点间的父子关系确定。若有向图中存在环,则确定语法树中存在数据依赖、控制依赖;若有向图中不存在环,则确定语法树中不存在数据依赖、控制依赖。

其中,有向图中节点间的连接方向既可以根据语法树中对应节点间的父子关系由父节点指向子节点,也可以由子节点指向父节点,只要保证有向图中所有节点间的连接方向一致即可,即都是由父节点指向子节点,或者都是由子节点指向父节点。

其中,上述有向图是该语法树的图状表示形式,图中的每个节点具有唯一性。也就是说,因为语法树体现的是查询语句的语法结构,其可能在不同的分支中具有相同的节点,即同一节点可能出现在语法树的不同位置上。但是,在有向图中,同一节点是唯一表示的,即不管同一节点在语法树中出现了几次,在有向图中仅以唯一的一个节点表示。但是,值得说明的是,该同一节点与其父节点、子节点的关系在有向图中均有表示,不会被省略。

步骤204、对所述语法树进行子树拆分,获得各子树,每个子树中包含的节点构成子查询语句。

步骤205、根据各处理线程的负载情况,分别确定各子查询语句对应的处理线程,由确定出的各处理线程对应执行各子查询语句,获得所述各子查询语句分别对应的子查询结果集。

本实施例中,在为各子查询语句分配处理线程时,可以根据全部处理线程中每个处理线程的负载情况来选择。每个处理线程的处理负载可以以其处理过的子查询语句的数量、工作时长等参数度量。

具体地,可以获得全部处理线程的负载情况,并对全部处理线程按照负载由轻到重进行排序,假设当前查询语句拆分出的子查询语句的数量为M,则从全部处理线程中选择出排在前M个的处理线程,将M个子查询语句分别分配给M个处理线程进行并行执行处理。

步骤206、根据各子查询语句的类型,从所述各子查询结果集中确定出与输出类型的子查询语句相对应的子查询结果集。

步骤207、根据所述输出类型的子查询语句相对应的子查询结果集中所包含的输出条件,将其他子查询结果集合并,输出与所述查询语句对应的查询结果。

本实施例中,在进行各子查询结果集合并的过程中,首先确定出输出类型的子查询语句所对应的子查询结果集,进而,根据该子查询结果集将其他子查询语句的子查询结果集合并。

其中,每个子查询语句的类型可以该子查询语句对应的父节点的类型表示,即查询语句对应的语法树中根节点下第一层的各节点的类型。

对于一条查询语句来说,其会描述有对输出结果的约束条件即输出条件,该输出条件对应于输出类型的语法结构,比如图1所示实施例中的“Return”即表示输出条件。因此,其对应的语法树中也会有与输出类型对应的节点“ReturnClause”。

由于输出类型的子查询语句的执行结果表征了输出条件,因此,按照该输出条件的要求,将其他子查询语句的执行结果进行合并,即可以得到查询语句的查询结果。

本实施例中,通过在进行语法树的独立子树拆分前,进行语法树是否存在数据依赖、控制依赖的判断,保证了语法树拆分的有效性。从而,基于语法树拆分结果,能够将查询语句拆分为独立的多个子查询语句,并行执行各 子查询语句,合并各子查询语句的执行结果的方式,有利于提高查询语句的处理效率。

图4为本发明查询处理装置实施例一的结构示意图,如图4所示,该查询处理装置包括:接收模块11、解析生成模块12、拆分模块13、执行模块14、输出模块15。

接收模块11,用于接收查询语句,所述查询语句包括XQuery查询语句。

解析生成模块12,用于对所述查询语句进行语法解析,生成语法树,所述语法树是所述查询语句的源代码的语法结构的树状表现形式,所述语法树上的每个节点表示所述查询语句中包含的一种语法结构。

拆分模块13,用于对所述语法树进行子树拆分,获得各子树,每个子树中包含的节点构成子查询语句。

执行模块14,用于并行执行所述各子树分别对应的子查询语句,获得所述各子树分别对应的子查询结果集。

输出模块15,用于将各子查询结果集合并,输出与所述查询语句对应的查询结果。

本实施例的查询处理装置可以用于执行图1所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

图5为本发明查询处理装置实施例二的结构示意图,如图5所示,在图4所示实施例的基础上,该查询处理装置还包括:确定模块21。

确定模块21,用于确定所述语法树中是否存在数据依赖、控制依赖。

若确定模块21确定不存在数据依赖、控制依赖,则所述拆分模块13执行所述对所述语法树进行子树拆分,获得各子树的步骤。

具体的,所述确定模块21包括:生成单元211、第一确定单元212。

生成单元211,用于生成与所述语法树对应的有向图,所述有向图中节点间的连接方向根据所述语法树中对应节点间的父子关系确定。

第一确定单元212,用于在所述有向图中存在环时,确定所述语法树中存在数据依赖、控制依赖;在所述有向图中不存在环时,确定所述语法树中不存在数据依赖、控制依赖。

所述执行模块14还用于:根据各处理线程的负载情况,分别确定各子查询语句对应的处理线程,由确定出的各处理线程对应执行各子查询语句。

其中,所述输出模块15包括:第二确定单元151、合并单元152。

第二确定单元151,用于根据各子查询语句的类型,从所述各子查询结果集中确定出与输出类型的子查询语句相对应的子查询结果集。

合并单元152,用于根据所述输出类型的子查询语句相对应的子查询结果集中所包含的输出条件,将其他子查询结果集合并,输出与所述查询语句对应的查询结果。

本实施例的查询处理装置可以用于执行图3所示方法实施例的技术方案,其实现原理和技术效果类似,此处不再赘述。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1