一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

数据库计划树的优化方法、装置、设备及存储介质与流程

2022-03-16 01:07:23 来源:中国专利 TAG:
1.本技术涉及数据库
技术领域
:,特别是涉及一种数据库计划树的优化方法、装置、设备及存储介质。
背景技术
::2.目前,数据库中的协调服务器在基于用户输入的查询语句访问数据库中数据的过程中,通常是对用户输入的查询语句进行解析,生成相应的计划树,并利用注册到数据库的所有优化器对该计划树进行优化,具体是利用优化器中的优化规则不断优化计划树的结构和内容等,以期望数据库在根据优化后的计划树执行数据访问计划时,能够使得执行阶段的效率较高,比如执行时间较少等。3.但是,注册到数据库中的优化器数量较多,这使得利用优化器优化计划树所需的时间较长,从而降低了数据库的响应速率。技术实现要素:4.本技术实施例提供了一种数据库计划树的优化方法、装置、设备及存储介质,以减少利用优化器优化计划树结构所需的时间,提高数据库的响应速率。5.第一方面,本技术实施例提供了一种数据库计划树的优化方法,协调服务器可以基于查询语句生成第一计划树,其中,所生成的第一计划树可以包括完成该查询语句所需要执行的算子。然后,协调服务器可以根据预设的算子与优化器的对应关系以及第一计划树所包括的算子,确定对第一计划树进行优化的优化器集合,该优化器集合中包括一个或者多个优化器。最后,协调服务器可以利用该优化器集合中的优化器对第一计划树进行优化。6.由于是利用第一计划树中各个算子对应的优化器,来对第一计划树进行优化,而并非是直接利用全量的优化器来优化第一计划树,因此,在优化第一计划树的过程中,无需执行与第一计划树中算子无关的优化器,如此,可以减少优化过程中所需执行的优化器的数量,也即减少了优化过程中所需的时间,从而可以提高数据库的响应速率。并且,由于其余优化器并不会对第一计划树产生优化效果,因此,数据库执行该部分优化器与执行全部优化器所得到的计划树通常相同,即上述优化过程在提高优化效率的同时,也保证了优化效果不被降低。7.在一种可能的实施方式中,协调服务器可以响应针对算子与优化器的设置操作,生成算子与优化器的对应关系。比如,用户在将优化器注册至数据库时,可以设置该优化器用于对哪些算子进行优化,从而协调服务器可以基于用户执行的设置操作,生成算子与优化器之间的对应关系。8.在一种可能的实施方式中,协调服务器可以获取历史优化数据,该历史优化数据包括对历史计划树中的历史算子以及该历史计划树产生优化作用的历史优化器,然后,协调服务器可以根据该历史优化数据,生成算子与优化器之间的对应关系。比如,协调服务器可以当历史优化过程中算子与优化器共同出现的比例达到预设比例值时,为该算子与优化器建立对应关系等。9.在一种可能的实施方式中,第一计划树中的每个算子包括算子信息,则协调服务器在确定对第一计划树进行优化的优化器时,可以获取该计划树上的每个算子的算子信息,并根据该算子信息从上述算子与优化器的对应关系中确定该算子信息对应的优化器,最后,协调服务器可以将各个优化器关联至相应的算子,也即关联至第一计划树中相应的节点。10.在一种可能的实施方式中,第一计划树中的每个算子可以仅包括算子标识,而算子相关的其它信息可以存储于预设的记录中,该记录可以是文件,也可以是内存等。这样,协调服务器在确定对第一计划树进行优化的优化器时,可以访问该第一计划树对应的记录,以从该记录中获得该第一计划树上的算子对应的算子信息,然后,协调服务器可以所获取的算子信息从算子与优化器之间的对应关系中获取该算子信息对应的优化器,从而协调服务器可以将获取的优化器关联至算子,也即关联至第一计划树中相应的节点上。如此,由于第一计划树中可以不包含确定优化器所需的算子信息,从而可以降低第一计划树的数据量。11.在一种可能的实施方式中,协调服务器在利用优化器集合中的优化器对第一计划树进行优化时,具体可以是利用该优化器集合中的第一优化器对第一计划树进行优化,得到第二计划树,其中,第一优化器为该优化器集合中的任意一个优化器。相对于第一计划树,该第二计划树中的算子可能发生变化,也可能没有发生变化。当第二计划树中包括第一计划树中没有的第一算子时,表征该第一计划树经过第一优化器的优化后,新增了该第一算子,则协调服务器可以通过查找上述算子与优化器之间的对应关系,获取新增的第一算子所对应的第二优化器,并将该第二优化器添加至优化器集合中,以此实现对优化器的重新编排。而当第二计划树中不包括第一计划树中的第二算子时,表征该第一计划树经过第一优化器的优化后,删除了该第二算子,则协调服务器可以将这些第二算子所对应的优化器,从优化器集合中进行删除。示例性的,协调服务器可以通过查找上述算子与优化器之间的对应关系,确定第二算子对应的优化器,从而在优化器集合中删除这些优化器。12.在一种可能的实施方式中,算子与优化器之间的对应关系,具体可以是算子标识与优化器标识之间的对应关系;或者,也可以是算子标识、算子所应用的数据源标识以及优化器标识之间的对应关系,在确定算子对应的优化器时,可以根据该算子的算子标识以及该算子所应用的数据源标识,查找出相应的优化器标识。或者,算子与优化器之间的对应关系,还可以是算子所包括的子算子的标识/表达式、算子所应用的数据源标识以及优化器标识之间的对应关系。13.第二方面,本技术实施例提供了一种数据库计划树的优化装置,用于执行第一方面中任意一种实现方式所描述的方法。14.第三方面,本技术提供一种设备,所述设备包括处理器和存储器。所述处理器、所述存储器进行相互的通信。所述处理器用于执行所述存储器中存储的指令,执行如第一方面或第一方面的任一种实现方式中的数据库计划树的优化方法。15.第四方面,本技术提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面的任一种实现方式中的数据库计划树的优化方法。16.第五方面,本技术提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面或第一方面的任一种实现方式中的数据库计划树的优化方法。17.本技术在上述各方面提供的实现方式的基础上,还可以进行进一步组合以提供更多实现方式。附图说明18.为了更清楚地说明本技术实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本技术中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。19.图1为查询数据的流程示意图;20.图2为根据输入的sql语句生成计划树的示意图;21.图3为利用全量优化器对初始计划树进行优化示意图;22.图4为本技术实施例中一示例性系统架构示意图;23.图5为本技术实施例中一种数据库计划树的优化方法的流程示意图;24.图6为本技术实施例中经过pruneproject优化器优化前后的计划树示意图;25.图7为本技术实施例中将优化器链接至计划树中算子的示意图;26.图8为本技术实施例中计划树经过多个优化器优化示意图;27.图9为本技术实施例中一种数据库计划树的优化装置的结构示意图;28.图10为本技术实施例中一种设备的结构示意图。具体实施方式29.如图1所示,为数据库根据用户输入的结构化查询语言(structuredquerylanguage,sql)语句得到查询结果的示意图。用户输入sql语句后,数据库(如数据库中的协调服务器)可以对该sql语句进行语法分析以及语义分析。其中,语法分析,是指利用sql语言的语法规则校验该sql语句是否存在语法错误;语义分析,是指协调服务器分析该sql语句的语义是否合法。当sql语句的语法以及语义均合法后,可以得到初始计划树,该初始计划树指示了协调服务器针对访问数据的执行计划。然后,协调服务器通过一个或者多个优化器对初始计划树进行优化,并通过执行优化后所得到的计划树,对数据源中的数据进行访问,最后将访问到的数据反馈给用户。30.举例来说,假设用户想要查看小明(xiaoming)、小张(xiaozhang)以及小强(xiaoqiang)三位同学的班级信息,则用户输入的sql语句可以如图2左侧所示。则,协调服务器对该sql语句进行语法分析、语义分析等解析操作后,可以生成如图2中间所示的初始计划树。若对该初始计划树不用优化器进行优化,则协调服务器基于该初始计划树依次执行如下操作:读取“student”表格中数据,从中提取出“name”以及“class”这两列对应的数据,并在提取的数据中进一步过滤出“xiaoming”、“xiaozhang”以及“xiaoqiang”对应的数据,最后输出所过滤出的数据以将其呈现给用户。而对该初始计划树利用优化器进行优化后,所得到的计划树为图2右侧所示的计划树。此时,协调服务器基于图2右侧所示的计划树以此执行如下操作,从“student”表格中读取“name”以及“class”这两列数据中“xiaoming”、“xiaozhang”以及“xiaoqiang”对应的数据,并将读取的数据进行输出。在该示例中,协调服务器根据优化器优化后的计划树,可以直接读取所需查询的数据,无需在读取大量数据后再进行数据过滤,如此不仅可以降低读取的数据量,而且,执行效率也相对较高。31.目前,在利用优化器优化初始计划树的过程中,所采用的优化器的数量普遍过多,尤其是当协调服务器支持针对多种数据源的查询时(如图1所示的a、b、c三种数据源),协调服务器通常会执行针对不同数据源的所有的优化器来优化初始计划树,即不区分优化器是否会对初始计划树产生实际的优化结果,而选择将所有的优化器全部执行一遍,以此来避免因为部分优化器没有执行而导致针对初始计划树的优化效果不高。32.如图3所示,假设全量的优化器数量为n,则协调服务器在对初始计划树进行优化时,将初始优化器输入至优化器1中,并利用优化器1中的通用优化规则1对初始计划树进行优化,然后将优化器1输出的计划树输入至优化器2中,再利用优化器2中的针对于数据源a的优化规则对初始计划树进行优化,即一个优化器输出的计划树为下一个优化器的输入计划树。以此类推,依次执行优化器3至优化器n,直至最后一个优化器输出计划树,优化过程结束。33.但是,实际应用中,并非是所有的优化器均会对初始计划树产生优化,比如,当用户输入的语句仅用于访问数据源c(单数据源)中的数据时,图3中所示的优化器1、优化器n中的优化规则会对初始计划树产生优化,而优化器2以及优化器3中的优化规则是针对于协调服务器访问其它数据源(数据源a和数据源b),并不适用于协调服务器访问数据源a,因此,执行优化器2以及优化器3等优化器不仅没有对初始计划树产生实际优化效果,反而执行这些优化器会增加整个优化过程的时长,从而降低了协调服务器的响应速率。34.基于此,本技术实施例提供了一种数据库计划树的优化方法,协调服务器在执行优化器之前,先根据算子与优化器之间的对应关系以及初始计划树中的算子,确定用于优化初始计划树的优化器,并利用这些优化器来对初始计划树进行优化,而并非是不加区分的采用全部的优化器来优化初始计划树。这样,协调服务器所执行的优化器的数量通常可以得到减少,也即减少了优化器优化初始计划树所需的时间,从而可以提高协调服务器的响应速率。并且,由于其余优化器并不会对初始计划树产生优化效果,因此,协调服务器执行该部分优化器与执行全部优化器所得到的计划树通常相同,这样,在提高优化效率的同时,也可以使得优化效果不被降低。35.作为一种示例,上述数据库计划树的优化方法可以用于图4所示的系统架构。如图4所示,该系统400可以包括协调服务器401、至少一个执行器(worker)402以及至少一个数据源(datasource)403。图4中,是以包括三个执行器为例进行说明,实际应用中,执行器的数量可以是任意数量。36.其中,协调服务器401可以由软件实现,也可以是由硬件实现上述协调服务器401的功能。例如,可以利用专用集成电路(application-specificintegratedcircuit,asic)实现,或可编程逻辑器件(programmablelogicdevice,pld)实现,上述pld可以是复杂程序逻辑器件(complexprogrammablelogicaldevice,cpld),现场可编程门阵列(field-programmablegatearray,fpga),通用阵列逻辑(genericarraylogic,gal)或其任意组合实现上述协调服务器401的功能。37.协调服务器401基于用户输入的查询语句,生成初始计划树,并通过上述优化方法对初始计划树进行优化后,将优化后的计划树交由执行器402进行执行,而执行器402根据该计划树,从数据源403中读取数据。38.为使本技术的上述目的、特征和优点能够更加明显易懂,下面将结合附图对本技术实施例中的各种非限定性实施方式进行示例性说明。显然,所描述的实施例是本技术一部分实施例,而不是全部的实施例。基于本技术中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本技术保护的范围。39.本技术的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的术语在适当情况下可以互换,这仅仅是描述本技术的实施例中对相同属性的对象在描述时所采用的区分方式。40.参阅图5,图5示出了本技术实施例中一种数据库计划树的优化方法流程示意图。该生成计划树的方法可以应用于上述图4所示的协调服务器401中,该方法具体可以包括:41.s501:协调服务器401基于查询语句生成第一计划树,该第一计划树包括完成该查询语句所需执行的算子。42.实际应用中,用户在访问数据库中的数据时,可以向协调服务器401输入相应的查询语句,以使得数据库基于该输入语句访问相应的数据。比如,用户可以输入sql语句,以请求访问mysql、oracle等数据库中的数据。43.数据库中的协调服务器401对用户输入的查询语句进行语法分析以及语义分析后,可以生成第一计划树,该第一计划树指示了协调服务器401针对被访问数据的执行计划。通常情况下,该第一计划树未必能够使得数据库在执行阶段的效率达到较高或者最高水平,因此,协调服务器401还可以对该第一计划树进行优化,通过改变该第一计划树的结构和/或内容,使得协调服务器401基于变更后的第一计划树执行计划时的效率能够达到较高或者最高水平。44.本实施例中,协调服务器401可以利用优化器对第一计划树进行优化,并且,针对于用户输入的不同语句所生成的第一计划树,其实际所需执行的优化器可能存在差异。比如,当用户输入的语句为“selectc1frommysql.tbl1”时,该语句只涉及到对mysql数据源的查询,具体是查询mysql数据库中表格tbl1中的c1列数据,因此,协调服务器401可以利用针对mysql数据源的优化器对第一计划树进行优化;而当用户输入的语句为“selectc1fromhive.tbl1”时,该语句只涉及到对hive数据源的查询,具体是查询hive数据库中表格tbl1中的c1列数据,因此,协调服务器401可以利用针对hive数据源的优化器对第一计划树进行优化,此时,利用针对mysql数据源的优化器对第一计划树进行优化则会没有意义,反而会因为执行该优化器而增加优化时长,影响优化效率。45.为避免协调服务器401执行不必要的优化器,本实施例中,协调服务器401在对第一计划树进行优化之前,还可以执行下述步骤s402,以确定利用哪些优化器对第一计划树进行优化。46.s502:协调服务器401根据预设的算子与优化器的对应关系及第一计划树所包括的算子,确定对第一计划树进行优化的优化器集合。47.优化器在优化第一计划树时,通常是根据第一计划树中的算子,对第一计划树的结构和/或内容进行调整。其中,第一计划树中的算子,即为该第一计划树中节点的值。以图2中间所示的第一计划树中的project(映射)节点为例,该节点中的project即为第一计划树中的算子。协调服务器401针对于该算子对第一计划树进行优化时,可以利用pruneproject优化器将project中的列信息(即name和class)下推至叶节点tablescan中。这样,协调服务器401在读取数据时,可以不用读取“student”表格中的所有数据,而可以仅读取该“student”表格中“name”和“class”这两列的数据。相应的,经过pruneproject优化器优化的第一计划树,可以如图6所示。其中,第一计划树中的算子,可以是根据输入语句进行确定的,比如,对于图2所示的sql语句,根据该语句中的“student.namein("xiaoming","xiaozhang","xiaoqiang")”,可以确定第一计划树中的其中一个算子可以为filter(过滤),并且,该filter的过滤条件用于指示协调服务器401从读取的数据中过滤出对应于"xiaoming"、"xiaozhang"以及"xiaoqiang"的数据。48.本实施例中,协调服务器401在获取到第一计划树后,可以获取该第一计划树中每个算子的算子信息,并根据预先建立的算子与优化器之间的对应关系以及该第一计划树中所包括的算子,确定第一计划树中的每个算子所对应的优化器,从而得到对该第一计划树进行优化的优化器集合,该优化器集合中包括至少一个优化器。以此,可以从注册到数据库的全量优化器中,筛选出第一计划树中的算子对应的优化器。其中,协调服务器401可以将筛选出的优化器关联至第一计划树中的算子,以便利用关联第一计划树中算子的优化器对第一计划树进行优化,从而协调服务器401无需执行数据库系统中与第一计划树无关联的优化器,也就可以减少协调服务器401针对于该第一计划树所需执行的优化器数量,提高优化效率。49.其中,算子信息可以被携带于第一计划树中,这样,协调服务器401可以直接从该第一计划树中获取到每个算子的算子信息。在其它实施方式中,第一计划树中可能未携带有算子信息,但是,该第一计划树可以具有与其关联的记录,而协调服务器401可以访问第一计划树对应的记录,并从该记录中读取到第一计划树中的各个算子的算子信息。示例性的,该记录例如可以是与该第一计划树相关联的文件,或者可以是记录有算子信息的内存等。这样,第一计划树可以不用携带算子信息,从而该第一计划树的数据量可以得到减少。50.关于算子与优化器之间的对应关系,在一种示例中,其可以根据用户对算子与优化器的设置,由该数据库中的协调服务器401生成算子与优化器之间的对应关系。比如,在用户将优化器注册至数据库时,优化器可以携带有该优化器对应的算子信息(如该优化器在被开发时可以被预先配置有相应的算子信息),则协调服务器401可以获取每个优化器中配置的算子信息,以此生成算子与优化器之间的对应关系。又比如,在用户将优化器注册至数据库的过程中,用户可以执行算子与优化器关联的设置操作,从而协调服务器401可以基于用户执行的设置操作,生成算子与优化器之间的对应关系。示例性的,该算子与优化器之间的对应关系,具体为算子标识与优化器标识之间的对应关系,例如可以是如下表1所示:51.表1[0052][0053]其中,算子信息可以包括算子标识,即用于在数据库中唯一标识算子,例如表1中所示的算子名称limit、join等,而与算子标识对应的,是优化器的标识,如limitpushdown、pruneproject等。则,算子与优化器之间的对应关系,具体可以是算子标识与优化器标识之间的对应关系。[0054]相应的,当利用算子与优化器之间的对应关系,确定用于对第一计划树进行优化的优化器时,可以先确定第一计划树中各个算子的算子标识,并通过查找该对象关系,确定第一计划树中各个算子的算子标识所对应的优化器,从而所确定出的优化器即为用于对第一计划树进行优化的优化器。如,当第一计划树中包括算子“project”时,通过查找表1所示的对应关系,可以确定对第一计划树进行优化的优化器可以包括“pruneproject”优化器。[0055]值得注意的是,表1中所示的算子与优化器之间的对应关系仅作为一种示例,并不用于限定所建立的对应关系局限于表1,实际应用中,对应关系中的优化器可以多于或者少于表1示例,如可以包括近百个优化器;并且,算子与优化器之间的对应关系的记录形式,不局限于表格,也可以是其它形式等。[0056]在其它可能的实施方式中,算子信息不仅可以包括算子标识,还可以包括算子所应用数据源标识,该数据源标识可以用于标识被访问数据所属的数据源。针对于不同的数据源,可以采用不同的优化器进行优化,如图3中所示的针对于数据源a的优化器2以及针对于数据源b的优化器3等。作为一种示例,当算子信息还包括算子标识以及数据源标识时,算子与优化器之间的对应关系可以如下表2所示:[0057]表2[0058][0059]其中,common,是指其对应的优化器可以适用于多种数据源,而hive,是指其对应的优化器通常仅适用于hive数据源,redis是指其对应的优化器通常仅适用于redis数据源。另外,表2中所示的算子标识、数据源标识以及优化器标识仅作为一种示例,并不用于限定所建立的对应关系局限于表1,也不用于限定对应关系的记录形式局限于表格。[0060]在进一步可能的实施方式中,算子信息除了可以是包括算子标识、算子所应用的数据源标识,还可以包括子算子标识和/或表达式。其中,子算子标识可以用于在数据库系统中唯一标识子算子,当算子包括多个不同的子算子时,为该算子所确定出的优化器也可以是多个(不同优化器对应于不同子算子)。例如,当算子为“filter”时,其包括的子算子可以是“equal”、“notisnull”等,其中,“equal”用于过滤出等于某个特定值的数据,“notisnull”用于过滤出内容不为空的数据(如内容不为空的文件等)。关于表达式,可以用于访问满足该表达式的数据,如针对于“filter”算子,当其具有表达式“this.src="test" "jpg"”时,可以从全量数据中过滤出文件名为“test”并且格式为“jpg”格式的图像数据。其中,当同一种算子具有不同的表达式时,协调服务器可以采用不同的优化器来优化该算子。[0061]除了可以是用户配置上述对应关系以外,在其它可能的实施方式中,协调服务器401也可以是通过机器学习等方式来自动建立算子与优化器之间的对应关系。例如,协调服务器401可以获取历史优化数据,该历史优化数据例如可以是历史优化过程中,对历史计划树产生实际优化效果的历史优化器以及该历史计划树中的历史算子,从而协调服务器401可以根据历史优化数据,生成算子与优化器之间的对应关系,如可以是当历史优化过程中算子与优化器共同出现的比例达到预设比例值时,为该算子与优化器建立对应关系等。[0062]s503:协调服务器401利用所确定出的优化器集合中的优化器对第一计划树进行优化。[0063]在一种示例性的实施方式中,当优化器集合中的优化器包括多个优化器时,协调服务器401可以基于图3所示的优化方式,将第一计划树输入至该优化器集合的第一个优化器中,并将该第一个优化器所输出的计划树再输入至该优化器集合中的第二个优化器。按照这样的优化方式,直至优化器集合中的最后一个优化器对计划树完成优化。[0064]而在其它可能的实施方式中,协调服务器401在确定出每个算子对应的优化器后,可以将每个算子对应的优化器链接到该算子所在的节点。其中,对于链接到同一节点的不同优化器,其执行先后顺序可以按照该节点对应的语法顺序进行确定,或者采用其它方式进行确定,本实施例对此并不进行限定。[0065]当利用优化器集合中的优化器对第一计划树进行优化时,协调服务器401可以按照深度遍历的方式由根节点逐层递归遍历至第一计划树的叶节点。然后,协调服务器401可以从底层节点开始(最底层的节点为叶节点),利用该节点连接的优化器对以该节点为根节点的子树进行优化,即将以该节点为根节点的子树输入至该节点对应的优化器中。其中,叶节点可以是常量或者读取数据的节点(如tablescan节点等),通常链接0个优化器,而其余节点可以链接任意数量的优化器。若利用链接到节点的优化器对以该节点作为根节点的子树进行优化后,该子树的结构发生改变(相应的,第一计划树的结构也发生了改变),则需要对该子树上的节点所链接的优化器进行重新编排,而该子树之外的其它节点所链接的优化器保持不变。[0066]具体实现时,协调服务器401可以利用优化器集合中的第一优化器对第一计划树进行优化,得到第二计划树,该第一优化器可以是优化器集合中的任意一个优化器。当第二计划树中包括第一计划树没有的第一算子时,表明经过该第一优化器的优化后,在该第一计划树中新增了部分算子,则协调服务器401可以根据上述算子与优化器之间的对应关系,确定新增的第一算子所对应的优化器,并将该第一算子对应的优化器添加至原有的优化器集合中;而若经过优化器优化后的第二计划树中不包括第一计划树中的第二算子,则协调服务器401可以从优化器集合中删除该第二算子对应的优化器。如此,协调服务器401可以根据计划树在优化前后的算子变化,重新编排优化器集合中的优化器。[0067]其中,重新编排后所确定的优化器可以是在优化器集合的基础上增加了部分优化器,也可以是在优化器集合的基础上减少了部分优化器,或者在增加了部分优化器的同时也减少了另一部分优化器等。[0068]当对子树完成优化后,协调服务器401可以返回至该节点对应的父节点,并按照类似方式,利用该父节点链接的优化器对以该父节点作为根节点的子树进行优化。基于上述方式进行递归优化,直至利用第一计划树的根节点链接的优化器完成对第一计划树的优化,从而最终所得到的计划树即为期望得到的能够使得执行阶段达到较高效率的优化器。[0069]举例来说,假设协调服务器401为图7右侧所示的第一计划树所确定出的优化器包括pruneoutputcolumns优化器、predicatepushdown优化器、windowfilterpushdown优化器以及pruneproject优化器,分别链接在相应的output节点、filter节点、project节点,如图7所示。协调服务器401在对该第一计划树进行优化时,通过深度遍历,第一个被遍历的节点为tablescan节点(叶节点)。由于该节点并没有链接优化器,因此,跳过该tablescan节点,遍历至其父节点project节点,并利用链接到该project节点的pruneproject优化器对以project节点为根节点的子树进行优化,该pruneproject优化器会对投影列进行优化,具体是将投影列“name”和“class”下推至tablescan节点。这样,协调服务器401在从数据库中读取数据时,仅读取对应于“name”和“class”的数据,以过滤部分无需读取的数据。在将project节点的投影列下推至tablescan节点后,原先第一计划树中的project节点可以无需继续存在,则利用project节点链接的优化器进行优化后,该第一计划树中的节点缩减为3个,如图8所示。[0070]然后,协调服务器401继续遍历至该project节点的父节点,也即为filter节点,并利用链接至该filter节点的predicatepushdown优化器、windowfilterpushdown优化器对以filter节点为根节点的子树进行优化。协调服务器401优先利用predicatepushdown优化器优化该子树,该优化器为谓词下推优化器,会将filter节点上的过滤条件(“xiaoming”、“xiaozhang”、“xiaoqiang”)下推至tablescan节点。这样,协调服务器401在从数据库中读取数据时,在对应于“name”和“class”的数据中,进一步仅读取关于“xiaoming”、“xiaozhang”以及“xiaoqiang”的数据,从而可以进一步过滤部分无需读取的数据。相应的,在将filter节点的过滤条件下推至tablescan节点后,该filter节点可以无需继续存在着,则,利用filter节点链接的predicatepushdown优化器进行优化后,该第一计划树中的节点可以缩减为2个,同时,链接该filter节点的剩余优化器也无需再执行,从而可以丢弃链接至filter节点的剩余优化器。[0071]最后,协调服务器401继续遍历至filter节点的父节点,也即为output节点,并利用链接至该output节点的pruneoutputcolumns优化器对经过前面优化器优化的第一计划树进行优化。该pruneoutputcolumns优化器会精简投影列的数量,而由于过滤条件与投影列一致,因此执行该pruneoutputcolumns优化器不会改变当前第一计划树的结构,最后得到如图8右侧所示的计划树。[0072]如上述举例,在对第一计划树进行优化的过程中,仅需要执行3个优化器,分别为pruneoutputcolumns优化器、predicatepushdown优化器以及pruneproject优化器,而无需执行所有注册到数据库的100个优化器。这样,优化过程中所需执行的优化器,从100减少到3个,从而可以有效提高优化效率。[0073]值得注意的是,上述遍历方式仅作为一种示例性说明,并不用于对协调服务器401的遍历方式进行限定,比如,在其它可能的实施方式中,协调服务器401也可以是采用广度遍历的方式遍历第一计划树中的节点(第一计划树中的节点之间的关联关系较弱或者无关联),并利用各个节点对应的优化器对以该节点作为根节点的子树进行优化。[0074]上文中结合图1至图8,详细描述了本技术所提供的功耗管理方法,下面将结合图9至图10,描述根据本技术所提供的数据库计划树的优化装置和设备。[0075]此外,本技术实施例还提供了一种数据库计划树的优化装置,该装置可以应用于上述图4所示的协调服务器401中。如图9所示,该装置900包括:[0076]生成模块901,用于基于查询语句生成第一计划树,所述第一计划树包括完成所述查询语句所需要执行的算子;[0077]确定模块902,用于根据预设的算子与优化器的对应关系及所述第一计划树所包括的算子,确定对所述第一计划树进行优化的优化器集合;[0078]优化模块903,用于利用所述优化器集合中的优化器对所述第一计划树进行优化。[0079]在一种可能的实施方式中,所述生成模块901,还用于响应针对算子与优化器的设置操作,生成所述算子与优化器的对应关系。[0080]在一种可能的实施方式中,所述生成模块901,还用于:[0081]获取历史优化数据,所述历史优化数据包括对历史计划树中的历史算子以及对所述历史计划树产生优化作用的历史优化器;[0082]根据所述历史优化数据,生成所述算子与所述优化器的对应关系。[0083]在一种可能的实施方式中,所述第一计划树中的每个算子包括算子信息,所述确定模块902,具体用于:[0084]获取所述计划树上的每个算子的算子信息;[0085]根据所述算子信息从所述对应关系中获取所述算子信息对应的优化器;[0086]将所述优化器关联至所述算子。[0087]在一种可能的实施方式中,第一计划树中的每个算子包括算子标识,所述确定模块902,具体用于:[0088]访问所述第一计划树对应的记录,所述记录中包括所述第一计划树上的算子对应的算子信息;[0089]根据所述算子信息从所述对应关系中获取所述算子信息对应的优化器;[0090]将所述优化器关联至所述算子。[0091]在一种可能的实施方式中,所述优化模块903,具体用于:[0092]利用所述优化器集合中的第一优化器对所述第一计划树进行优化,得到第二计划树;[0093]当所述第二计划树中包括所述第一计划树没有的第一算子时,获取所述第一算子对应的第二优化器,并将所述第二优化器添加至所述优化器集合;[0094]当所述第二计划树中不包括第二算子时,从所述优化器集合中删除所述第二算子对应的优化器,所述第二算子为所述第一计划树中的算子。[0095]在一种可能的实施方式中,所述算子与优化器的对应关系,包括算子标识与优化器标识的对应关系;[0096]或者,所述算子与优化器的对应关系,包括算子标识、所述算子所应用的数据源标识以及优化器标识之间的对应关系。[0097]根据本技术实施例的数据库计划树的优化装置900可对应于执行本技术实施例中描述的方法,并且数据库计划树的优化装置900中的各个模块的上述和其它操作和/或功能分别为了实现图5中的各个方法的相应流程,为了简洁,在此不再赘述。[0098]图10提供了一种用于优化数据库计划树的设备,图10所示的计算机1000具体可以用于实现上述图4或图5所示实施例中协调服务器401的功能。[0099]设备1000包括总线1001、处理器1002、通信接口1003和存储器1004。处理器1002、存储器1004和通信接口1003之间通过总线1001通信。总线1001可以是外设部件互连标准(peripheralcomponentinterconnect,pci)总线或扩展工业标准结构(extendedindustrystandardarchitecture,eisa)总线等。总线可以分为地址总线、数据总线、控制总线等。为便于表示,图10中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。通信接口1003用于数据库中的其它设备进行通信,如向执行器402发送经过优化后的计划树等。[0100]其中,处理器1002可以为中央处理器(centralprocessingunit,cpu)。存储器1004可以包括易失性存储器(volatilememory),例如随机存取存储器(randomaccessmemory,ram)。存储器1004还可以包括非易失性存储器(non-volatilememory),例如只读存储器(read-onlymemory,rom),快闪存储器,hdd或ssd。[0101]存储器1004中存储有可执行代码,处理器1002执行该可执行代码以执行前述数据库计划树的优化方法。[0102]具体地,在实现图9所示实施例的情况下,且图9实施例中所描述的各模块为通过软件实现的情况下,执行图9中的生成模块901、确定模块902以及优化模块903的功能所需的软件或程序代码存储在存储器1004中,处理器1002用于执行存储器1004中的指令,执行应用于协调服务器401的数据库计划树的优化方法。其中,对于处理器1002优化后的计划树,可以通过通信接口1003发送给其它设备。[0103]本技术实施例还提供了一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行上述应用于协调服务器401的数据库计划树的优化方法。[0104]本技术实施例还提供了一种计算机程序产品,所述计算机程序产品被计算机执行时,所述计算机执行前述数据库计划树的优化方法的任一方法。该计算机程序产品可以为一个软件安装包,在需要使用前述数据库计划树的优化方法的任一方法的情况下,可以下载该计算机程序产品并在计算机上执行该计算机程序产品。[0105]另外需说明的是,以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。另外,本技术提供的装置实施例附图中,模块之间的连接关系表示它们之间具有通信连接,具体可以实现为一条或多条通信总线或信号线。[0106]通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到本技术可借助软件加必需的通用硬件的方式来实现,当然也可以通过专用硬件包括专用集成电路、专用cpu、专用存储器、专用元器件等来实现。一般情况下,凡由计算机程序完成的功能都可以很容易地用相应的硬件来实现,而且,用来实现同一功能的具体硬件结构也可以是多种多样的,例如模拟电路、数字电路或专用电路等。但是,对本技术而言更多情况下软件程序实现是更佳的实施方式。基于这样的理解,本技术的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在可读取的存储介质中,如计算机的软盘、u盘、移动硬盘、rom、ram、磁碟或者光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,训练设备,或者网络设备等)执行本技术各个实施例所述的方法。[0107]在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。[0108]所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本技术实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、训练设备或数据中心通过有线(例如同轴电缆、光纤、数字用户线(dsl))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、训练设备或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的训练设备、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,dvd)、或者半导体介质(例如固态硬盘(solidstatedisk,ssd))等。当前第1页12当前第1页12
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献