基于分布式数据库的查询方法及装置与流程

文档序号:19217384发布日期:2019-11-26 01:49阅读:174来源:国知局
本发明涉及数据库
技术领域
:,更具体地,涉及一种基于分布式数据库的查询方法及装置。
背景技术
::结构化查询语言(sql,structuredquerylanguage),是一种特殊的编程语言。结构化查询语言用于存储数据以及查询、更新、管理数据库系统。子查询,是指在sql语句中的一种嵌套在另一个查询中的查询。该另一个查询被称为原始sql查询。子查询可以根据原始sql查询的表中的内容动态调整子查询本身的执行。这种技术让sql语言更灵活和更有表达力。子查询返回一个集合。这个集合可以用在from/with语句中,也可以作为操作符的操作数,比如in/exists操作符/关键字。子查询返回的结果只包含一行数据,并且这行数据只有一列,则这个子查询为标量子查询。如果结果集为空,这个返回值当成null处理。标量子查询可以在标量上下文中进行替换。例如:原始sql查询语句selectxfromt1wherex>(selectmax(y)fromt2)中,因为有max函数存在,子查询selectmax(y)fromt2只返回一条数据,因此,selectmax(y)fromt2为标量子查询。子查询selectmax(y)fromt2返回t2表中的最大值t_max,然后原始sql查询语句可以被替换成selectxfromt1wherex>t_max。在原始sql查询中存在标量子查询时,现有基于分布式数据库的查询方法是,主节点针对每一个标量子查询,对原始sql查询进行解析生成执行计划,将执行计划下发至执行该标量子查询的节点;执行该标量子查询的节点接收执行计划之后,执行该标量子查询,并向主节点返回查询的结果;主节点获得各标量子查询的结果并进行替换之后,再执行原始sql查询,将原始sql查询的执行计划的各子计划下发至对应的参与节点,各参与节点向主节点返回执行结果;主节点根据各参与节点返回的执行结果,获得原始sql查询的结果。如果原始sql查询中包含个数较多的标量子查询,例如原始sql查询为select(selectidfromta)fromtbwhere(selectnamefromtc)=“oracle”andcasewhen(selecttele_feefromtd)>20then(selectmobile_feefromte)else(selectmes_feefromtf)end>(select50%*salaryfromtg),该原始sql查询包括了6个标量子查询,主节点需要大量、重复性的执行语义的解析、执行计划的生成、查询结果的替换,执行的步骤比较复杂,导致查询的效率比较低。技术实现要素:本发明实施例提供一种基于分布式数据库的查询方法及装置,用以解决或者至少部分地解决现有技术查询的效率低的缺陷。第一方面,本发明实施例提供一种基于分布式数据库的查询方法,包括:对于包括若干个标量子查询的原始sql查询语句,根据所述原始sql查询语句的解析树,生成每一所述标量子查询对应的子执行计划和辅助执行代码;将各所述标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点;获取包含标量子查询的各外层sql语句的执行结果,根据所述包含标量子查询的各外层sql语句的执行结果,获取所述原始sql查询语句的执行结果;其中,所述标量子查询对应的子执行计划,为用于执行包含所述标量子查询的外层sql语句的子执行计划;所述标量子查询对应的辅助执行代码,用于获取所述标量子查询的查询结果。优选地,所述根据所述原始sql查询语句的解析树,生成用于执行每一所述标量子查询对应的子执行计划和辅助执行代码之前,还包括:对所述原始sql查询语句进行语义解析,生成所述原始sql查询语句的解析树。优选地,所述对所述原始sql查询语句进行语义解析之前,还包括:对所述原始sql查询语句进行语法检查,确认所述原始sql查询语句不存在语法错误。第二方面,本发明实施例提供一种基于分布式数据库的查询方法,包括:接收标量子查询对应的子执行计划和辅助执行代码;根据所述子执行计划,执行包含所述标量子查询的外层sql语句,获取所述外层sql语句的执行结果;其中,所述标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;所述标量子查询的查询结果,是根据所述辅助执行代码生成的。优选地,所述接收标量子查询对应的子执行计划和辅助执行代码,与所述获取所述外层sql语句的执行结果之间,还包括:解析包含所述标量子查询的外层sql语句的解析树,将所述标量子查询对应的辅助执行代码挂载至内存中的指定位置。优选地,所述根据所述子执行计划,执行包含所述标量子查询的外层sql语句的具体步骤包括:执行辅助执行代码,获取所述标量子查询的查询结果,将所述标量子查询的查询结果存储于所述指定位置;根据所述子执行计划,执行所述外层sql语句,若判断获知需要获取所述标量子查询的查询结果,则从所述指定位置获取所述标量子查询的查询结果;将所述外层sql语句包含的所述标量子查询替换为所述标量子查询的查询结果,继续执行替换后的所述外层sql语句。第三方面,本发明实施例提供一种基于分布式数据库的查询装置,包括:计划分解模块,用于对于包括若干个标量子查询的原始sql查询语句,根据所述原始sql查询语句的解析树,生成每一所述标量子查询对应的子执行计划和辅助执行代码;计划发送模块,用于将各所述标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点;结果生成模块,用于获取包含标量子查询的各外层sql语句的执行结果,根据所述包含标量子查询的各外层sql语句的执行结果,获取所述原始sql查询语句的执行结果,获取所述原始sql查询语句的执行结果;其中,所述标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;所述标量子查询对应的辅助执行代码,用于获取所述标量子查询的查询结果。第四方面,本发明实施例提供一种基于分布式数据库的查询装置,包括:接收模块,用于接收标量子查询对应的子执行计划和辅助执行代码;执行模块,用于根据所述子执行计划,执行包含所述标量子查询的外层sql语句,获取所述外层sql语句的执行结果;其中,所述标量子查询对应的子执行计划,为用于执行包含所述标量子查询的外层sql语句的子执行计划;所述标量子查询的查询结果,是根据所述辅助执行代码生成的。第五方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,执行所述程序时实现如第一方面或第二方面的各种可能的实现方式中任一种可能的实现方式所提供的基于分布式数据库的查询方法的步骤。第六方面,本发明实施例提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如第一方面或第二方面的各种可能的实现方式中任一种可能的实现方式所提供的基于分布式数据库的查询方法的步骤。本发明实施例提供的基于分布式数据库的查询方法及装置,通过将各标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点,由参与节点进行标量子查询的查询结果的替换,将主节点的部分任务负载分散到各参与节点,能大大简化查询步骤、提高查询效率。并且,主节点不进行大量标量子查询的查询结果的替换,避免大部分的执行压力在同一台服务器上,能大大减轻主节点的压力和负荷,减少主节点的崩溃,还能有效降低主节点的实现难度。附图说明为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为根据本发明实施例提供的基于分布式数据库的查询方法的流程示意图;图2为根据本发明实施例提供的基于分布式数据库的查询方法的流程示意图;图3为根据本发明实施例提供的基于分布式数据库的查询方法中原始sql查询语句的解析树的示意图;图4为为根据本发明实施例提供的基于分布式数据库的查询方法的数据流向示意图;图5为根据本发明实施例提供的基于分布式数据库的查询装置的结构示意图;图6为根据本发明实施例提供的基于分布式数据库的查询装置的结构示意图;图7为根据本发明实施例提供的电子设备的实体结构示意图。具体实施方式为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。为了克服现有技术的上述问题,本发明实施例提供一种基于分布式数据库的查询方法,其发明构思是,由参与节点进行标量子查询的查询结果的替换,并生成标量子查询的外层sql语句的执行结果,将查询过程中主节点与其他节点之间的交互由两次减少为一次,不需要由主节点进行全部标量子查询的查询结果的替换,也不需要在全部替换完成后才进行各子计划的下发和执行,从而能提高查询的效率、降低主节点的执行压力。图1为根据本发明实施例提供的基于分布式数据库的查询方法的流程示意图。如图1所示,该方法包括:步骤s101、对于包括若干个标量子查询的原始sql查询语句,根据原始sql查询语句的解析树,生成每一标量子查询对应的子执行计划和辅助执行代码。其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;标量子查询对应的辅助执行代码,用于获取标量子查询的查询结果。需要说明的是,本发明实施例提供的基于分布式数据库的查询方法的执行主体为主节点。对于分布式数据库系统,包括由多台服务器组成的服务器集群。该服务器集群中,接收包含客户端发送的原始sql查询语句的一台服务器为主节点。本发明实施例提供的基于分布式数据库的查询方法,适用于原始sql查询语句包括若干个标量子查询的情况,尤其适用于嵌套了数量较多的一层标量子查询的情况。原始sql查询语句的解析树,是通过对原始sql查询语句进行语义解析生成的。解析树,为sql语句的c++格式描述。根据原始sql查询语句的解析树,可以生成用于完成查询的执行计划。执行计划,由以查询执行中所必需的多个执行单位为节点的树构成。可以理解的是,原始sql查询语句可以拆分成多条sql语句。根据原始sql查询语句中,每一标量子查询及包含该标量子查询的外层sql语句,与其他不包含标量子查询的sql语句之间的逻辑,可以将执行计划拆分成多个子执行计划。即将用于获取原始sql查询语句的执行结果的查询任务,分解为多个子任务,每一子任务对应一个子执行计划。需要说明的是,对于“逻辑运算符+标量子查询”形式的原始sql查询语句,可以通过join(连接)来实现,比如外连接/半连接/笛卡尔积/反链接。因为可以利用表的统计信息,所以转换成join计算往往可以获得不错的执行性能。例如,原始sql查询语句selectemploy_idfromenginnerwheresalary>(selectmax(salary)frommanager),一般被转换为join进行计算,可以改写成selectemploy_idfromengineertejoin(selectsalaryfrommanagerorderbysalarylimit(0,1))tmonte.salary>tm.salary。对于“算数运算符+标量子查询”形式的原始sql查询语句,则不能换成join。例如,原始sql查询语句select(selectidfromta)fromtb或者select(selectsalaryfromta)*2fromtb,一般做法是先执行selectidfromta或selectsalaryfromta;用这条sql语句返回的值(比如500)去替换原始sql查询语句中的子查询,生成新的sql查询语句:select500fromtb或select500*2fromtb;然后执行select500fromtb或select500*2fromtb。因此,不单独将获取一个标量子查询的查询结果作为一个子任务,而可以将获取包含一个标量子查询的外层sql语句的执行结果作为一个子任务。任一个子任务,涉及一个标量子查询或不涉及标量子查询。对于涉及一个标量子查询的子任务,该子任务对应的子执行计划,就是该标量子查询对应的子执行计划。该子任务至少用于获取包含该标量子查询的外层sql语句的执行结果,还可以用于获取其他不包含标量子查询的sql语句的执行结果。对于每一个标量子查询,还需要为该标量子查询组装辅助执行代码。该辅助执行代码,为一段代码,用于获取该标量子查询的查询结果。该辅助执行代码,该为标量子查询对应的辅助执行代码。步骤s102、将各标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点。具体地,获得每一标量子查询对应的子执行计划和辅助执行代码之后,主节点将每一标量子查询对应的子执行计划和辅助执行代码发送至该标量子查询的执行节点。该标量子查询的执行节点,为服务器集群中的一台服务器。该标量子查询的执行节点接收子执行计划和辅助执行代码之后,根据辅助执行代码,获取该标量子查询的查询结果,并将包含该标量子查询的外层sql语句中的该标量子查询,替换为该标量子查询的查询结果,根据子执行计划,继续执行替换后的外层sql语句,获取包含该标量子查询的外层sql语句执行结果。需要说明的是,主节点还将不涉及标量子查询的各子任务对应的子执行计划,发送至相应的参与节点。相应的参与节点,指子任务涉及的不包含标量子查询的若干sql语句的执行节点。此时,参与节点根据子执行计划,获取上述不包含标量子查询的若干sql语句的执行结果。步骤s103、获取包含标量子查询的各外层sql语句的执行结果,根据包含标量子查询的各外层sql语句的执行结果,获取原始sql查询语句的执行结果。具体地,执行涉及标量子查询的子任务的每一参与节点,向主节点返回包含标量子查询的外层sql语句的执行结果。需要说明的是,执行不涉及标量子查询的子任务的每一参与节点,也向主节点返回sql语句的执行结果。主节点接收包含标量子查询的各外层sql语句的执行结果,和包含标量子查询的各外层sql语句之外的其他sql语句的执行结果,并根据上述各sql语句的执行结果,获取原始sql查询语句的执行结果。本发明实施例通过将各标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点,由参与节点进行标量子查询的查询结果的替换,将主节点的部分任务负载分散到各参与节点,能大大简化查询步骤、提高查询效率。并且,主节点不进行大量标量子查询的查询结果的替换,避免大部分的执行压力在同一台服务器上,能大大减轻主节点的压力和负荷,减少主节点的崩溃,还能有效降低主节点的实现难度。基于上述各实施例的内容,根据原始sql查询语句的解析树,生成用于执行每一标量子查询对应的子执行计划和辅助执行代码之前,还包括:对原始sql查询语句进行语义解析,生成原始sql查询语句的解析树。具体地,主节点接收原始sql查询语句之后,对原始sql查询语句进行语义解析,获得原始sql查询语句的c++格式描述,作为原始sql查询语句的解析树。本发明实施例通过对原始sql查询语句进行语义解析,生成原始sql查询语句的解析树,从而能根据原始sql查询语句的解析树,生成个标量子查询对应的子执行计划,从而能将标量子查询的查询结果的替换由主节点分散到各参与节点,简化查询步骤、提高查询效率。基于上述各实施例的内容,对原始sql查询语句进行语义解析之前,还包括:对原始sql查询语句进行语法检查,确认原始sql查询语句不存在语法错误。具体地,主节点接收原始sql查询语句之后,先对原始sql查询语句进行语法检查。若该原始sql查询语句不存在语法错误,则确认原始sql查询语句不存在语法错误,然后进行对原始sql查询语句的语义解析;若该原始sql查询语句存在语法错误,则停止执行该原始sql查询语句。本实施例通过在对原始sql查询语句进行语义解析之前,对原始sql查询语句进行语法检查,能避免执行存在语法错误的原始sql查询语句,从而能避免语法错误导致的分布式系统的运行错误、故障和损坏。图2为根据本发明实施例提供的基于分布式数据库的查询方法的流程示意图。基于上述实施例的内容,如图2所示,一种基于分布式数据库的查询方法包括:步骤s201、接收标量子查询对应的子执行计划和辅助执行代码。其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划。需要说明的是,本发明实施例提供的基于分布式数据库的查询方法的执行主体为执行标量子查询的参与节点。对于任一执行标量子查询的参与节点,该参与节点接收主节点发送的某一标量子查询对应的子执行计划和辅助执行代码。对于任一不执行标量子查询的参与节点,该参与节点仅接收主节点发送的某一子执行计划。步骤s202、根据子执行计划,执行包含标量子查询的外层sql语句,获取外层sql语句的执行结果。其中,标量子查询的查询结果,是根据辅助执行代码生成的。具体地,执行任一标量子查询的参与节点,根据该标量子查询对应的辅助执行代码,获取该标量子查询的查询结果,并将包含该标量子查询的外层sql语句中的该标量子查询,替换为该标量子查询的查询结果,根据子执行计划,继续执行替换后的外层sql语句,获取包含该标量子查询的外层sql语句执行结果。本发明实施例通过参与节点执行标量子查询和标量子查询的查询结果的替换,获取包含标量子查询的外层sql语句的执行结果,一方面使得主节点不进行大量标量子查询的查询结果的替换,能大大减轻主节点的压力和负荷,减少主节点的崩溃,还能有效降低主节点的实现难度,另一方面原始sql查询的分布式执行不必等到各标量子查询的查询结果都获取到之后,能大大简化查询步骤、提高查询效率。基于上述各实施例的内容,接收标量子查询对应的子执行计划和辅助执行代码,与获取外层sql语句的执行结果之间,还包括:解析包含标量子查询的外层sql语句的解析树,将标量子查询对应的辅助执行代码挂载至内存中的指定位置。具体地,参与节点对标量子查询的外层sql语句进行语义解析,可以生成该sql语句的解析树;也可于由主节点将原始sql查询语句的解析树中与该外层sql语句对应的一部分发送至该参与节点,原始sql查询语句的解析树中与该外层sql语句对应的一部分,即该sql语句的解析树。根据该sql语句的解析树,确定内存中的一个位置为指定位置,作为该标量子查询对应的辅助执行代码的地址,实现将该标量子查询对应的辅助执行代码挂载至该指定位置。该指定位置还包括开辟的一处内存空间,用于存储该标量子查询的查询结果。本发明实施例通过仅解析包含标量子查询的外层sql语句的解析树,不用对原始sql查询语句的解析树进行解析,减少了解析的时间,从而能减少查询的耗时,提高查询的效率。基于上述各实施例的内容,根据子执行计划,执行包含标量子查询的外层sql语句的具体步骤包括:执行辅助执行代码,获取标量子查询的查询结果,将标量子查询的查询结果存储于指定位置。具体地,辅助执行代码独立执行,执行完辅助执行代码,可以获取标量子查询的查询结果。参与节点根据该辅助执行代码获得该标量子查询的查询结果之后,将该标量子查询的查询结果写入该辅助执行代码中,并存储在参与节点的内存中的上述指定位置。根据子执行计划,执行外层sql语句,若判断获知需要获取标量子查询的查询结果,则从指定位置获取标量子查询的查询结果。具体地,执行包含该标量子查询的外层sql语句。执行过程中,若判断出执行到该标量子查询的位置,即通过判断获知需要获取该标量子查询的查询结果,则直接从上述内存中的指定位置获取该标量子查询的查询结果。将外层sql语句包含的标量子查询替换为标量子查询的查询结果,继续执行替换后的外层sql语句。具体地,获取该标量子查询的查询结果之后,将外层sql语句中的该标量子查询替换为该标量子查询的查询结果,继续执行,直至该外层sql语句执行完毕,获得该外层sql语句的执行结果。本发明实施例通过参与节点执行标量子查询和标量子查询的查询结果的替换,获取包含标量子查询的外层sql语句的执行结果,一方面使得主节点不进行大量标量子查询的查询结果的替换,能大大减轻主节点的压力和负荷,减少主节点的崩溃,还能有效降低主节点的实现难度,另一方面原始sql查询的分布式执行不必等到各标量子查询的查询结果都获取到之后,能大大简化查询步骤、提高查询效率。为了便于对本发明上述各实施例的理解,下面通过一个实例进行描述说明。原始sql查询语句为select(selectidfromta),cola,colbfromtb。图3为根据本发明实施例提供的基于分布式数据库的查询方法中原始sql查询语句的解析树的示意图。通过对该原始sql查询语句语法检查和语义解析,获得的解析树如图3所示。selectstatement用前后端约定好的某种格式描述的即将执行的原始sql查询语句的完整信息。projectlist是有关sql语句中select后面的部分的描述信息。对于该原始sql查询语句,具体为(selectidfromta),columna,columnb的描述信息。tablereference是有关sql语句中from后面参与运算的表的描述信息。对于该原始sql查询语句,具体为tb。通常针对projectlist,tablereference都有功能相互独立的单独的模块化代码处理。输入数据依次通过tablereference,projectlist处理,将最后结果输出给用户。其中,处理projectlist的模块化代码,称为projectxo。projectxo在执行前的准备阶段,会将可能存在子查询的描述信息发送至单值子查询处理模块scalarservice模块。scarlarservice模块对projectlist进行如下处理:遍历projectxo发送的projectlist的信息,找到符合条件的子查询(selectidfromta)。此处判断的依据很简单,找出独立的temptable或者参与算数表达式的temptable(例如(selectidfromta)+(selectidfromta))这两种类型的temptable都对应一个单值子查询。为符合条件的temptable组装辅助执行代码,并将辅助执行代码的地址scalarfilt的地址记录下来交给projectxo。然后独立执行辅助执行代码,并将结果放在单独开辟的一出内存空间中。需要注意的是:通常一个temptable对应一个独立的scalarfilt。所以即使有任意多个标量子查询,都可以采用相同的方法处理。projectxo在需要获取相关子查询的值的时候,会通过上面第二步获取的scalarfilt地址获取子查询的值。可以看出,本发明上述各实施例提供的查询方法,可以实现任意位置的标量子查询,无论是在groupby,having,where,还是在select,甚至orderby、window函数、各函数的参数等等。图4为为根据本发明实施例提供的基于分布式数据库的查询方法的数据流向示意图。如图4所示,主节点为computer00,查询(query)为原始sql查询语句要进行的查询,该查询经过解析器(parser)解析、实现器(realizer)实现、计划发生器(plangenerator)生成执行计划并分解为多个子执行计划、协调器(coordinator)将子执行计划下发至参与节点computer01和computer02的执行器(excutor)。computer01为不涉及标量子查询的sql语句的执行节点,computer02为包含标量子查询(selectidfromta)的外层sql语句的执行节点。因此,computer02通过解析器(parser)解析外层sql语句的解析树,并通过外部的实现器(realizer)实现。主节点computer00也可以执行部分不涉及标量子查询的sql语句,因而协调器(coordinator)将子执行计划下发至主节点computer00的执行器(excutor)。可以看出,本发明上述各实施例提供的查询方法,在存在多个标量子查询的情况下,各标量子查询可以共用部分流程(parser,realizer,plangenerator,coordinator),避免了每个标量子查询都在分布式的进群环境走一遍完整的sql执行流程(parser,realizer,plangenerator,coordinator,executor),从而能简化流程、提高效率。需要说明的是,通常的基于分布式数据库的包含标量子查询的查询方法,存在一下不足。一是调度系统(session)的实现通常是个难点,因为session需要考虑的内容非常多。包括:集群中某台服务器崩溃(包括主节点崩溃、参与节点崩溃和监控集群状态的节点崩溃),通常session需要协调其他参与节点放弃执行剩余的任务;还需要监控各参与节点任务的执行状态,比如是否已完成、是否有异常抛出等;对于有负载均衡模块的集群,session通常还要监控、协调高并发sql的执行状态,同时与负载均衡模块通信。因为需要维护的状态太多,在集群资源紧张的情况下,在兼具功能和性能的情况下,session往往会成为一个实现的难点。二是各子执行计划的执行是相互独立的,彼此之间的返回时间也各不相同,协调器(coordinator)的实现比较复杂,也是一个难点。通过本发明上述各实施例提供的查询方法,session和coordinator的实现都更容易。图5为根据本发明实施例提供的基于分布式数据库的查询装置的结构示意图。基于上述各实施例的内容,如图5所示,该装置包括计划分解模块501、计划发送模块502和结果生成模块503,其中:计划分解模块501,用于对于包括若干个标量子查询的原始sql查询语句,根据原始sql查询语句的解析树,生成每一标量子查询对应的子执行计划和辅助执行代码;计划发送模块502,用于将各标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点;结果生成模块503,用于获取包含标量子查询的各外层sql语句的执行结果,根据包含标量子查询的各外层sql语句的执行结果,获取原始sql查询语句的执行结果,获取原始sql查询语句的执行结果;其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;标量子查询对应的辅助执行代码,用于获取标量子查询的查询结果。需要说明的是,本发明实施例提供的基于分布式数据库的查询装置为主节点。具体地,计划分解模块501将用于获取原始sql查询语句的执行结果的查询任务,分解为多个子任务,每一子任务对应一个子执行计划。任一个子任务,涉及一个标量子查询或不涉及标量子查询。对于涉及一个标量子查询的子任务,该子任务对应的子执行计划,就是该标量子查询对应的子执行计划。该子任务至少用于获取包含该标量子查询的外层sql语句的执行结果,还可以用于获取其他不包含标量子查询的sql语句的执行结果。计划分解模块501还为每一标量子查询组装辅助执行代码。该辅助执行代码,为一段代码,用于获取该标量子查询的查询结果。该辅助执行代码,该为标量子查询对应的辅助执行代码。计划发送模块502将每一标量子查询对应的子执行计划和辅助执行代码发送至该标量子查询的执行节点。结果生成模块503接收包含标量子查询的各外层sql语句的执行结果,根据包含标量子查询的各外层sql语句的执行结果,和包含标量子查询的各外层sql语句之外的其他sql语句的执行结果,获取原始sql查询语句的执行结果。本发明实施例提供的基于分布式数据库的查询装置,用于执行本发明上述各实施例提供的主节点侧的基于分布式数据库的查询方法,该基于分布式数据库的查询装置包括的各模块实现相应功能的具体方法和流程详见上述各基于分布式数据库的查询方法的实施例,此处不再赘述。该基于分布式数据库的查询装置用于前述各实施例的基于分布式数据库的查询方法。因此,在前述各实施例中的基于分布式数据库的查询方法中的描述和定义,可以用于本发明实施例中各执行模块的理解。本发明实施例通过将各标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点,由参与节点进行标量子查询的查询结果的替换,将主节点的部分任务负载分散到各参与节点,能大大简化查询步骤、提高查询效率。并且,主节点不进行大量标量子查询的查询结果的替换,避免大部分的执行压力在同一台服务器上,能大大减轻主节点的压力和负荷,减少主节点的崩溃,还能有效降低主节点的实现难度。图6为根据本发明实施例提供的基于分布式数据库的查询装置的结构示意图。基于上述各实施例的内容,如图6所示,该装置包括接收模块601和执行模块602,其中:接收模块601,用于接收标量子查询对应的子执行计划和辅助执行代码;执行模块602,用于根据子执行计划,执行包含标量子查询的外层sql语句,获取外层sql语句的执行结果;其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;标量子查询的查询结果,是根据辅助执行代码生成的。需要说明的是,本发明实施例提供的基于分布式数据库的查询装置为执行标量子查询的参与节点。具体地,接收模块601接收主节点发送的某一标量子查询对应的子执行计划和辅助执行代码。执行模块602根据该标量子查询对应的辅助执行代码,获取该标量子查询的查询结果,并将包含该标量子查询的外层sql语句中的该标量子查询,替换为该标量子查询的查询结果,根据子执行计划,继续执行替换后的外层sql语句,获取包含该标量子查询的外层sql语句执行结果。本发明实施例提供的基于分布式数据库的查询装置,用于执行本发明上述各实施例提供的参与节点侧的基于分布式数据库的查询方法,该基于分布式数据库的查询装置包括的各模块实现相应功能的具体方法和流程详见上述各基于分布式数据库的查询方法的实施例,此处不再赘述。该基于分布式数据库的查询装置用于前述各实施例的基于分布式数据库的查询方法。因此,在前述各实施例中的基于分布式数据库的查询方法中的描述和定义,可以用于本发明实施例中各执行模块的理解。本发明实施例通过参与节点执行标量子查询和标量子查询的查询结果的替换,获取包含标量子查询的外层sql语句的执行结果,一方面使得主节点不进行大量标量子查询的查询结果的替换,能大大减轻主节点的压力和负荷,减少主节点的崩溃,还能有效降低主节点的实现难度,另一方面原始sql查询的分布式执行不必等到各标量子查询的查询结果都获取到之后,能大大简化查询步骤、提高查询效率。图7为根据本发明实施例提供的电子设备的实体结构示意图。基于上述实施例的内容,如图7所示,该电子设备可以包括:处理器(processor)701、存储器(memory)702和总线703;其中,处理器701和存储器702通过总线703完成相互间的通信;处理器701用于调用存储在存储器702中并可在处理器701上运行的计算机程序指令,以执行上述各方法实施例所提供的基于分布式数据库的查询方法,例如包括:对于包括若干个标量子查询的原始sql查询语句,根据原始sql查询语句的解析树,生成每一标量子查询对应的子执行计划和辅助执行代码;将各标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点;获取包含标量子查询的各外层sql语句的执行结果,根据包含标量子查询的各外层sql语句的执行结果,获取原始sql查询语句的执行结果;其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;标量子查询对应的辅助执行代码,用于获取标量子查询的查询结果;或者包括:接收标量子查询对应的子执行计划和辅助执行代码;根据子执行计划,执行包含标量子查询的外层sql语句,获取外层sql语句的执行结果;其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;标量子查询的查询结果,是根据辅助执行代码生成的。本发明另一实施例公开一种计算机程序产品,计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,计算机程序包括程序指令,当程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的基于分布式数据库的查询方法,例如包括:对于包括若干个标量子查询的原始sql查询语句,根据原始sql查询语句的解析树,生成每一标量子查询对应的子执行计划和辅助执行代码;将各标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点;获取包含标量子查询的各外层sql语句的执行结果,根据包含标量子查询的各外层sql语句的执行结果,获取原始sql查询语句的执行结果;其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;标量子查询对应的辅助执行代码,用于获取标量子查询的查询结果;或者包括:接收标量子查询对应的子执行计划和辅助执行代码;根据子执行计划,执行包含标量子查询的外层sql语句,获取外层sql语句的执行结果;其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;标量子查询的查询结果,是根据辅助执行代码生成的。此外,上述的存储器702中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。本发明另一实施例提供一种非暂态计算机可读存储介质,非暂态计算机可读存储介质存储计算机指令,计算机指令使计算机执行上述各方法实施例所提供的基于分布式数据库的查询方法,例如包括:对于包括若干个标量子查询的原始sql查询语句,根据原始sql查询语句的解析树,生成每一标量子查询对应的子执行计划和辅助执行代码;将各标量子查询对应的子执行计划和辅助执行代码,分别发送至相应的参与节点;获取包含标量子查询的各外层sql语句的执行结果,根据包含标量子查询的各外层sql语句的执行结果,获取原始sql查询语句的执行结果;其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;标量子查询对应的辅助执行代码,用于获取标量子查询的查询结果;或者包括:接收标量子查询对应的子执行计划和辅助执行代码;根据子执行计划,执行包含标量子查询的外层sql语句,获取外层sql语句的执行结果;其中,标量子查询对应的子执行计划,为用于执行包含标量子查询的外层sql语句的子执行计划;标量子查询的查询结果,是根据辅助执行代码生成的。以上所描述的装置实施例仅仅是示意性的,其中作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行上述各个实施例或者实施例的某些部分的方法。最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1