分散数据库检索装置及分散数据库检索方法

文档序号:6365482阅读:137来源:国知局
专利名称:分散数据库检索装置及分散数据库检索方法
技术领域
本发明的实施方式涉及分散数据库检索装置及分散数据库检索方法。
背景技术
为了处理表形式或XML形式等的大量数据而存在由多个服务器构成的分散数据库检索装置。分散数据库检索装置通常具有与用户进行交換的主服务器和实际管理数据的从属服务器。从属服务器既可以全部由相同架构的数据库检索装置构成,也可以由不同架构的 数据库检索装置构成。一般,在对分散数据库检索装置输入了检索式(以下,称作查询)的情况下,主服务器接收查询。主服务器将查询解析,分割为各从属服务器在服务器内部执行的部分和需要在服务器间运算的部分。对于在各从属服务器内执行的部分,各从属服务器生成最优的本地计划。对于服务器间的运算部分,主服务器生成最优的分散计划。另外,所谓本地计划,是从属服务器用来检索从属服务器所具有的数据的计划,所谓分散计划,是用来检索对象的分散数据库具有的数据整体的计划。当生成分散计划吋,决定J0IN(结合)等针对服务器间的数据的结合运算处理、SORT(分类)等针对多个服务器的集合运算处理、分割后的部分查询的结合运算处理等运算处理的顺序和执行的服务器,以使检索应答时间为最短。还决定向执行运算的服务器转送的数据转送方法及格式等。在分散数据库中,为了提高检索性能,希望通过强化分散计划的优化、来降低数据库间的数据交接处理中的数据的转送开销(cost)、及服务器间的数据的运算开销(cost)。以往,分散计划的优化全部通过主服务器实现。但是,主服务器决定全部的分散计划存在许多的问题。首先,分散计划的研究范围如在上述中列举那样,为查询的分割范围、服务器间运算的顺序和执行场所的决定、分割后的查询的结合方法等非常广泛,所以会发生许多的候选计划,为了从其中检索最优的计划而需要许多的信息。因此,主服务器需要密集地取得来自各从属服务器侧的索引或统计信息等并维持、管理。因而,主服务器的机制较复杂,会花费较多管理成本。此外,即使在主服务器全部取得了想要的信息的情况下,在按照每个从属服务器而统计量较大地不同的情况或架构不同的情况下,也有可能对每个从属服务器来说最优的动作不同。在这样的情形中,在针对全部的从属服务器统一的分散计划中,一部分的从属服务器的执行速度成为瓶颈,整体性能有可能下降。但是,如果按照每个从属服务器生成能够进行最优动作的分散计划,则主服务器的分散计划生成的机制变得复杂。即,如果提高主服务器的分散计划处理部的优化功能,则主服务器的优化的机制复杂化。因此,主服务器难以按照各从属服务器的状态而以适合的形式生成分散计划。

发明内容
本发明要解决的技术问题是提供一种不使主服务器侧的机制复杂化而实现高效率的检索的分散数据库检索装置。实施方式的分散数据库检索装置是将主服务器与具备数据库的多个从属服务器连接而构成的,上述主服务器基于输入的询问查询检索数据库。从属服务器具备第2收发部,与主服务器进行数据的收发;本地计划候选生成部,基于所接收到的分散计划生成本地计划候选;以及本地计划选择部,基于所生成的本地计划候选,决定运算开销最低的本地计划。



图I是有关第I实施方式的分散数据库检索装置的整体结构图的一例。图2是表示作为登记在有关第I实施方式的数据库中的数据的I种的XML数据的一例的不意图。图3是表示作为登记在有关第I实施方式的数据库中的数据的I种的XML数据的一例的不意图。图4是表示有关第I实施方式的从属服务器所保持的数据库信息的一例的示意图。图5是表示有关第I实施方式的主服务器所保持的从属服务器群信息的一例的示意图。图6是表示有关第I实施方式的分散数据库检索处理的一例的流程图。图7是表示有关第I实施方式的相对于XML的询问语言XQuery的一例的示意图。图8是表示在有关第I实施方式的查询分割部中生成的部分查询的一例的图。图9是表示在有关第I实施方式的分散计划生成部中生成的分散计划的一例的图。图10是表示由有关第I实施方式的分割查询结合运算追加部进行的分散计划修正处理的一例的流程图。图11是表示进行了有关第I实施方式的分割查询结合运算追加处理后的分散计划的一例的不意图。图12是表示在有关第I实施方式的本地计划选择部中生成的本地计划的一例的示意图。图13是表示有关第I实施方式的本地计划候选生成处理的一例的流程图。图14是表示有关第I实施方式的本地计划候选生成处理的一例的流程图。图15是表示有关第I实施方式的本地计划候选生成处理的一例的流程图。图16是表示在有关第I实施方式的本地计划候选生成部中生成的本地计划的一例的示意图。图17是表示在有关第I实施方式的本地计划候选生成部中生成的本地计划的一例的示意图。图18是表示在有关第I实施方式的本地计划候选生成部中生成的本地计划的一例的示意图。图19是表示在有关第I实施方式的本地计划候选生成部中生成的本地计划的一例的示意图。图20是表示在有关第I实施方式的本地计划候选生成部中生成的本地计划的一例的示意图。图21是表示在有关第I实施方式的本地计划候选生成部中生成的本地计划的一例的示意图。图22是表示在有关第I实施方式的本地计划候选生成部中计算运算开销时使用 的參数的一例的流程图。图23是表示有关第I实施方式的分散计划更新部将分散计划更新的处理的一例的流程图。图24是表示在有关第I实施方式的分散计划更新部中更新的分散计划的一例的示意图。图25是有关第2实施方式的分散数据库检索装置的整体结构图的一例。图26是表示由有关第2实施方式的模式(schema)变更部变更前的模式的一例的示意图。图27是表示有关第2实施方式的分散数据库检索处理的一例的流程图。图28是表示进行了有关第2实施方式的本地计划顺序决定处理后的本地计划的一例的不意图。图29是表不有关第2实施方式的模式生成部生成分散计划的模式的处理的一例的流程图。图30是表示由有关第2实施方式的模式变更部变更后的新的模式的一例的示意图。图31是表示有关第2实施方式的模式变更部将在分散计划的运算中输入的数据的模式更新的处理的一例的流程图。图32是表示作为进行了有关第2实施方式的模式变更部进行的模式生成处理后的结果而得到的输入输出模式的一例的图。
具体实施例方式以下,參照附图对实施方式的分散数据库检索装置进行说明。(第I实施方式)图I是表示第I实施方式的分散数据库检索装置的功能结构的结构图。本实施方式的分散数据库检索装置基于从用户输入的检索式(以下,称作询问查询)进行检索,并输出检索结果。如图I所示,本实施方式的分散数据库检索装置是作为主服务器发挥功能的计算机O、和作为从属服务器发挥功能的计算机I 计算机N相连接而构成的。作为主服务器的计算机O具备语法解析部11、查询分割部12、分散计划生成部13、分割查询结合运算追加部14、分散计划更新部15、分散计划执行部16、收发部17(第I收发部)、和信息存储部20 (第I存储装置)。信息存储部20具备保存从属服务器群信息的从属服务器群信息存储部21、和保存后述的分散计划的分散计划存储部22。另外,所谓从属服务器群信息,是全部的从属服务器的名称或位置、以及登记件数等关于从属服务器拥有的数据库的信息,是从属服务器拥有的数据库的信息的一部分。主服务器基于该从属服务器群信息决定对从属服务器发送哪个数据。语法解析部11将从用户给出的询问查询51进行语法解析。查询分割部12具备将询问查询51分割的功能,基于由语法解析部11得到的询问查询51的语法解析结果和从属服务器群信息表21,以服务器内运算及服务器间运算为单 位将询问查询51分割。将分割后的询问查询51称作部分查询。另外,所谓服务器内运算,是将询问查询51在各从属服务器内处理。此外,所谓服务器间运算,是从多个从属服务器收集数据而在主服务器内运算的处理。分散计划生成部13是作为分散计划生成机构发挥功能的,基于由查询分割部12得到的部分查询和从属服务器群信息表21的信息,生成分散计划。即,分散计划生成部13基于保存在从属服务器群信息存储部21中的从属服务器的名称或位置、以及登记件数等,生成决定分割后的服务器内运算和服务器间运算的运算顺序、运算执行场所以及在服务器间收发的数据的内容而得到的分散计划。另外,所谓在服务器间收发的数据的内容,例如是从属服务器的数据、从属服务器的数据的一部分、平均值等从属服务器的数据运算结果、或者最大值、多个从属服务器的数据组合等服务器间运算結果。分散计划生成部13具备分割查询结合运算追加部14和分散计划更新部15。分割查询结合运算追加部14将由分散计划生成部13得到的分散计划按照图10的流程图所示的分割查询结合运算追加处理进行修正。以下,将修正后的分散计划称作修正分散计划。关于分割查询结合运算追加处理在后面叙述。分散计划更新部15是作为分散计划更新机构发挥功能的,进行基于从本地计划选择部、从属服务器发送来的本地计划将修正分散计划更新的分散计划更新处理。关于分散计划修正处理在后面叙述。分散计划执行部16基于由分散计划更新部15更新后的分散计划执行运算。收发部17具有作为数据收发机构的功能。接着,对作为从属服务器的计算机I N进行说明。计算机I N是作为从属服务器发挥功能的,具备本地计划选择部31、本地计划候选生成部32、本地计划执行部33、收发部34(第2收发部)、和信息存储部40 (第2存储装置)。信息存储部40具备保持数据库信息的数据库信息存储部41、保持本地计划的本地计划存储部42、和保持检索对象的实际的数据(以下,称作保存数据)的保存数据存储部43,上述数据库信息是所保存的数据的模式(schema)信息及件数等统计信息等与保存在数据库中的数据有关的信息。本地计划选择部31是作为本地计划生成机构发挥功能的,具备本地计划候选生成部32。本地计划选择部31生成通过由分割查询结合运算追加部14得到的修正分散计划中的、与自身的服务器关联的部分计划所构成的本地计划。基于本地计划选择部生成的本地计划,本地计划候选生成部3进ー步制作本地计划的候选。本地计划选择部31从自身制作出的本地计划和由本地计划候选生成部32制作出的本地计划候选之中,计算由估计执行时间或估计执行计算量构成的运算开销。本地计划选择部31决定计算出的运算开销为最小的计划作为本地计划。本地计划执行部33基于由本地计划选择部31得到的本地计划实施运算。收发部34具有与主服务器的收发部17相同的功能。这里,在图2及图3中,表示登记在从属服务器的保存数据存储部43中的数据的一例。另外,本实施方式的登记在从属服务器的保存数据存储部43中的数据以XML的格式形式记述。另外,图2所示的数据是关于书籍的发行年数、标题、著者、价格的数据。图3所示的数据是关于某个奖项的获奖年度、获奖者、获奖的书籍的标题、获奖者的性别的数据。图4是从属服务器的数据信息存储部41所保持的数据库的信息的一例。如图4 所示,数据库信息被作为具有“登记节点” 112、“登记数” 113、和“索引信息” 114的项目的数据库信息表111加以保持。“登记节点” 112表示登记在从属服务器的保存数据存储部43中的XML数据所具有的节点名,这里,包括处于哪个节点之下地进行记述。另外,所谓节点,是构成XML数据的要素或属性等。“登记数” 113表示在从属服务器的保存数据存储部43中登记的XML数据中各登记节点112出现的次数。“索引信息” 114记述有对登记节点112设定的索引的种类。索引的种类例如是数值索引或字符索引。另外,在图4中,作为一例而表示计算机I至计算机4的数据库信息表111-1 111-4。图5是保存在作为主服务器的计算机O所保持的从属服务器群信息存储部21中的从属服务器群信息21的一例。如图5所示,从属服务器群信息被作为具有“服务器名” 122、“收集信息(Collection信息)” 123、“登记文档数” 124的项目的从属服务器群信息表121加以保持。在“服务器名” 122中保存有从属服务器的名称。在“收集信息” 123中保存有登记的XML数据的保存场所的名称(以下,称作收集名)。本实施方式的分散数据库由于即使在不同的从属服务器中也能够拥有相同的收集信息123,所以用户能够通过指定收集名来对特定的XML数据的集合内进行检索。“登记文档数” 124保存有登记在收集(Collection)中的XML数据的数量。 这里,參照图6至图25,对本实施方式的分散数据库检索装置的处理进行说明。图6是表示本实施方式的分散数据库检索装置的检索处理的一例的流程图。另外,假设本实施方式的分散数据库检索装置在计算机I 4的数据库信息存储部41中保存有图4所示的数据库信息。首先,由用户对主服务器输入作为检索式的询问查询51 (步骤SI)。这里,在图7中表示由用户输入的询问查询51的一例。图7所示的询问查询51通过作为XML数据的询问语言的XQuery记述。另外,图7所示的询问查询51的意思是“输出有过去的获奖经历的男性作家的著书中的于1990年以后出版的书的标题和价格”。
输入的询问查询51的第I行的从for开始的一个语句将拥有在"publisher"的Collection中登记的book的名称的节点中的、将属性节点year的值数值化后的结果大于等于1990的节点保存到变量$x中。由此,取得于1990年以后出版的书的ー览。另外,在XQuery中,变量被表现为以"$ "开始的字符串。接着,第2行的从for开始的一个语句在选择拥有在"prizewinners"的Co 11 ec t i on中登记的pr i z eWinner的名称的节点中的、将gender的子节点的值字符串化后的结果与"male"的字符串相等的节点之后,将作为其子节点的name保存到变量$y中,由此取得有获奖经历的男性作家的名称的ー览。接着,在第3、4、5行的从let开始的ー个语句中,将作为在第I行取得的book的子节点的author、title、price的节点分别保存到变量$z、$u、$v中,由此取得书的著者名、标题和价格。接着,在第6行的从where开始的ー个语句中,取得男性作家的名称与书的著者名一致者的组合。最后,在第7行的从return开始的ー个语句中,对在第6行取得的组合制作出用List的名称的节点包围的XML并返还给用户。由此,取得满足条件的书的标题和价格。 如果将图7所示的询问查询51输入到主服务器中,则主服务器的语法解析部11对询问查询51进行语法解析(步骤S2)。由语法解析部11得到的语法解析结果被发送给主服务器的查询分割部12。接收到语法解析结果的查询分割部12基于从属服务器群信息表21的信息,进行将询问查询51分割为部分查询的询问查询51分割处理,上述部分查询以在各从属服务器内处理的服务器内运算以及从多个从属服务器收集数据而运算的服务器间运算为単位(步骤S3)。S卩,查询分割部12基于语法解析部11的语法解析的结果,将询问查询51分割为部分查询。查询分割部12參照从属服务器群信息表121,按照这些部分查询的每ー个,判断部分查询的内容是服务器间运算还是服务器内运算。这里,将作为查询分割部12的分割结果的部分查询的ー览即部分查询ー览表131的一例表示在图8中。图8所示的部分查询ー览表131具有保存对部分查询依次分配的号码的“号码”132、保存分割而得到的部分查询的“部分查询内容” 133、保存部分查询是服务器内运算还是服务器间运算的“服务器间/服务器内运算” 134、将保存有运算所需要的数据的计算机名保存的“对应服务器” 135的项目。以下,參照图7至图8对由查询分割部12进行的询问查询的分割处理具体地进行说明。查询分割部12基于从属服务器群信息表121,确定保持各部分查询的运算中使用的数据的计算机。在图8中,着眼于图7所示的询问查询51中的Collection(;/ publisher")和 Collection(" prizewinner")这两个收集信息。即,使用这些收集信息检索图5所示的从属服务器群信息表121。即,查询分割部12判断为Collection(" publisher")存在于计算机I至3中,Collection(;/ prizewinner;/ )存在于计算机 4 中。进而,查询分割部12着眼于对Collection实施的"/"、" //"、" > ="、"="这样的XQuery的运算,判断运算是否需要来自多个不同的计算机的值。在运算需要来自多个不同的计算机的值的情况下,将该运算判断为服务器间运算。另外,在是利用来自ー个计算机的值进行的运算的情况下,将该运算判断为服务器内运算。如图8所示,在询问查询51中,为了使"/ "、" // "、" > = 1990 "等运算全部能够在作为输入的数据的计算机上实施,$X> $Z、$u、$v保存有全部都在相同的计算机上运算出的数据。另外,关于服务器内运算,用几个运算単位分割。在图8中,以"for"、" let"等赋值语句发生的単位分割,发生号码I 5的部分查询。另外,以"for"、" let"这样的赋值语句的単位分割是I例,实际上也可以以更细的运算单位分割,也可以以更大的运算单位分割。另ー方面,在"where$y = $z"的运算中,由于$y是计算机4的数据,$z是存在于计算机I到3中的数据,所以设为是服务器间运算。接着,下面的"return〈List> {$u} {$v}〈/List〉"的运算是返回最终结果的运算,所以判断为需要收集拥有知、$v的数据的计算机I到3的数据来进行运算的服务器间运
算。 接着,分散计划生成部13基于图8所示的部分查询ー览表131和图5所示的从属服务器群信息表121,生成分散计划(步骤S4)。将所生成的分散计划保存到分散计划表141 中。在图9中表示分散计划表141的一例。分散计划表141具有“运算号码” 142、“部分查询号码” 143、“运算内容” 144、“事前执行运算号码” 145、“执行场所” 146、“发送场所” 147、“输入变量” 148、“输出变量” 149的项目。“运算号码” 142表示对每个运算分配的号码。“部分查询号码” 143保存图8所示的部分查询表131中的部分查询号码132的项目中分配的号码。在没有被分配部分查询号码132的情况下为空栏。“运算内容” 144保存各运算的内容。这里,分散计划生成部13将图8所示的部分查询ー览表131中的服务器内运算原样设为服务器内运算,部分查询ー览表131中的服务器间运算记述表示具体操作的运算内容。进而,在部分查询ー览表131中的服务器间运算的前后,由于需要数据的发送、数据接收的运算,所以新添加。“事前执行运算号码” 145在有必须在执行该运算之前执行的运算的情况下,保存该运算号码。“执行场所” 146保存执行运算的场所(计算机)。在数据的发送和数据接收的运算的情况下,将运算结果的数据的发送目的地保存到“发送场所” 147中。即,执行场所146是数据的发送源的计算机,发送场所147是数据的发送目的地的计算机。“输入变量” 148在运算中需要输入数据的情况下被保存,将保存着该数据的变量的名称的列表加以保存。“输出变量” 149在运算制作新的值的情况下,保存其保存目的地的变量的名称的列表。另外,图9所示的分散计划表141的运算号码I至5对应于图8所示的部分查询ー览表131的号码I至5。此外,分散计划表141的运算号码10及11对应于图8所示的部分查询一览表131的号码6、7。此外,关于在部分查询ー览表131中在服务器内/服务器间运算134中保存有“月艮务器间运算”的部分查询号码6的运算,在运算内容144中保存有“服务器间联合(服务器将JOIN)”。即,保存基于部分查询内容133的具体的运算内容。同样,关于部分查询号码7的运算,在运算内容144中保存有“返还数据制作”的具体的运算。另外,所谓“服务器间联合”,是将保存在两个变量中的数据中值相等的组合保留的运算,所谓“返还数据制作”,是利用输入的数据制作新的XML数据的运算。分散计划生成部13仅着眼干“服务器间运算”,决定执行顺序及执行场所。具体而言,图9所示的分散计划表141中,由于服务器间运算的运算内容144是服务器间联合和返还数据制作的两种,所以判断为在执行服务器间联合后进行返还数据制作运算时,作为对象的数据较少,效率较高。此外,在本实施方式中,服务器间运算作为由主服务器实施的运算,决定了执行场所。另外,为了将服务器间运算在主服务器中执行,需要收集处于各从属服务器中的数据。因此,分散计划生成部13追加分散计划表141的运算号码6及运算号码8,在各自的运算内容144中保存作为从属服务器对主服务器发送数据的运算的“数据发送”。接着,为了主服务器接收在运算号码6及8中发送的数据而追加运算号码7及9,在各自的运算内容144中保存作为主服务器从从属服务器接收数据的运算的“数据接收”。 另外,在本实施方式中决定为将服务器间运算由主服务器执行,但也可以不是主服务器,而例如决定为由多个从属服务器执行。分散计划生成部13基于图8中记载的部分查询内容133,保存输入变量148及输出变量149。例如,设为在"for in"、" let :="的" "中写入的变量是输出变量149,在其以外的场所中写入的变量是输入变量148。此外,在数据发送运算中,输入变量148成为输出变量149。进而,在数据接收运算中,数据发送运算的输出变量149成为输入变量148和输出变量149。另外,服务器内运算由分散计划生成部13以顺序关系不会混乱的方式配置为任意的顺序,。这样,本实施方式的分散计划生成部13仅研究部分查询ー览表131的“服务器间运算”。由此,研究范围被限定,所以分散计划生成部131能够容易地生成分散计划。接着,分割查询结合运算追加部14对分散计划生成部13生成的分散计划追加“分割查询结合”运算,进行执行分散计划的修正的分割查询结合运算追加处理(步骤S5)。这里,參照图10,具体地说明分割查询结合运算追加部14对保存在图9所示的分散计划表141中的分散计划进行分割查询结合运算追加处理时的动作。另外,在该分割查询结合运算追加处理中,使用i及j这样的变量。i大于等于I的整数,并且小于等于对象的分散计划的运算号码(I ^ I <分散计划的运算号码的最大值)。此外,在分割查询结合运算追加处理的开始时刻,i = I。此外,设分散计划的运算号码的最大值为“max”。此外,设运算号码142为i的分散计划的运算是运算E。另外,假设j是与i同样性质的变量,运算号码142为j的分散计划的运算是运算S。分割查询结合运算追加部14如果从分散计划生成部13接收到分散计划,则首先,作为初始化处理而设i = I、分散计划的运算号码的最大值=max(步骤S10)。分割查询结合运算追加部14取得记载在图9中的分散计划表141中的运算号码i的运算E (步骤S20)。接着,分割查询结合运算追加部14判断是否所取得的运算E是服务器间运算并且i幸max (步骤S30)。在所取得的运算E是服务器间运算并且iデmax的情况下,即在运算E是最后的运算以外的情况下(步骤S30为“是”),设为j = 1(步骤S40)。
接着,取得分散计划表141的运算号码j的运算S (步骤S50)。分割查询结合运算追加部14參照图9的分散计划表141,判断是否运算S的运算内容144是数据发送并且保存在发送场所147中的计算机是从属服务器(步骤S60)。在运算S的运算内容144是“数据发送”并且发送场所147的计算机是从属服务器的情况下(步骤S60为“是”),分割查询结合运算追加部14制作保存有在运算S的输入变量147和运算E的输入变量147中共通出现的变量的列表(以下,称作varList)(步骤S70)。接着,制作保存有从运算S的输入变量147中除去了处于varList中的变量所得到的变量的列表(以下,称作newVarList)(步骤S80)。分割查询结合运算追加部14判断是否制作出的varList不为空、并且包含在该varList中的变量不与运算S的输入变量147完全一致、并且输出varlist的变量的运算与输出newVarList的变量的运算能够并行执行(步骤S90)。另外,这里说明在图9所不的分散计划表141中,输出varlist的变量的运算与输出newVarList的变量的运算是否能够并行执行的判断方法。该方法是,在反复回溯调查ー个运算的事前执行运算号码145以及该事前执行运算号码145的运算的事前执行运算号码 145时,在另ー个运算不作为事前执行运算号码存在的情况下,判断为两个运算能够并行执行。即,在运算A的事前执行运算号码145中有运算B的运算号码的情况下,必需在执行运算B之后执行运算A,所以判断为不能并行执行。回到图10的步骤S90的说明。在varList不是空、并且包含在该varList中的变量不与运算S的输入变量147完全一致、并且输出varlist的变量的运算与输出newVarList的变量的运算能够并行执行的情况下(步骤S90为“是”),将以下5个运算插入到运算E之后,在插入后,在i中代入i+5(i = i+5)(步骤S100)。在第I个运算中,运算内容144是"数据发送",输入变量148和输出变量149是包含在varList中的变量,执行场所146是"运算S的发送场所147",发送场所147是"运算S的执行场所146"。在第2个运算中,运算内容144是"数据接收",输入变量148和输出变量149是包含在varList中的变量,执行场所146是"运算S的发送场所147",发送场所147是"运算S的执行场所146"。在第3个运算中,运算内容144是"分割查询结合",输入变量148是包含在varList中的变量,执行场所146是"运算S的执行场所146"。另外,所谓运算内容是“分割查询结合”,是将对某个变量分别并行进行处理而得到的结果再次合为I个的运算。在第4个运算中,运算内容144是"数据发送",输入变量148和输出变量149是包含在newVarList中的变量,执行场所146是"运算S的执行场所146","发送场所147是运算S的发送场所147"。在第5个运算中,运算内容144是"数据接收",输入变量148和输出变量149是newVarList,执行场所146是"运算S的执行场所146",发送场所147是"运算S的发送场所"。接着,为了变更在运算S中发送的变量而实施3个处理(步骤S110)。第I个是,将运算S的输入变量148和输出变量149的内容变更为VarList的值。第2个是,取得运算S接下来的运算R。运算R是与运算S对应的运算内容144"数据接收"的运算。第3个是,将R的输入变量148和输出变量149列表的内容变更为varList的值。然后,向步骤S120前进。另外,在运算S不是数据发送、或者执行场所146的计算机不是从属服务器的情况下(步骤S60为“否”),也向步骤S120前进。此外,在varList为空或与运算S的输入变量列表完全一致、或输出varlist的变量的运算和输出newVarList的变量的运算不能并行执行的情况下(步骤S90为“否”的情况下),也前进到步骤S120。在步骤S120中,分割查询结合运算追加部14在j中代入j+l(j = j+1)(步骤S120)。S卩,在步骤S60为“否”的情况下、或在步骤S90为“否”的情况下、或者接着步骤SllO进行步骤S120。接着步骤S120,分割查询结合运算追加部14判断j是否比i小(步骤S130)。在j比i小的情况下(步骤S130为“是”),回到步骤S50而重复处理。在j比i小的情况下 (步骤S130为“否”)前进到步骤S140,在i中代入i+l(i = i+1)(步骤S140)。在运算E不是服务器间运算、或i =max的情况下(步骤S30为“否”),前进到步骤S140。S卩,在步骤S130为“否”的情况下、或者在步骤S30为“否”的情况下继续进行步骤S140的处理。接着步骤S140,分割查询结合运算追加部14判断i是否小于等于max(步骤S150)。即,判断是否对全部的部分查询进行了分割查询运算追加处理。在i小于等于max的情况下(步骤S150为“是”),分割查询结合运算追加部14回到步骤S20而重复处理。在i比max大的情况下(步骤S150为“否”),分割查询结合运算追加部14结束处理。这里,在图11中,表示分割查询结合运算追加部14对图9所示的分散计划进行上述分割查询结合运算追加处理后的结果为修正后的分散计划(以下,称作修正分散计划)的一例。记载在图9的分散计划表141中的分散计划中,由于运算I至10不是服务器间运算,所以分割查询结合运算追加部14每次将i増加1,直到i成为10 (图10的步骤S20、步骤S30、步骤S140、步骤S150)。如果成为i = 10,则运算E是服务器间运算(步骤S30为“是”),所以在变量j中代入I (步骤S40)。另外,基于运算E的部分查询号码,參照分散计划表141进行运算E是否是服务器间运算的判断。接着,在j成为6之前不是数据发送,所以将j每次增加I (步骤S50、步骤S60为“否”、步骤S120、步骤S130)。如果j成为6,则由于运算S的运算内容是数据发送,并且执行场所146的计算机是从属服务器(步骤S60为“是”),所以制作保存有在运算号码6的输入变量148和运算号码10的输入变量148中共通出现的变量$z的变量列表varList (步骤S70)。制作从所取得的运算号码6的输入变量148除去varList的变量列表后的保存有变量$u、变量$y的变量列表newVarList (步骤S80)。由于varList不是空、与运算号码6的输入变量列表也不完全一致、并且将varlist和newVarList的变量输出的运算能够并行执行,所以在追加图11的运算号码11-15这5个运算后,将i加5而代入15(步骤S90、步骤S100)。接着,在运算号码6的数据发送和运算号码7的数据发送的输入变量148和输出变量149中代入varList的值变量$z (步骤 SI 10)。接着,由于在j成为8之前不是数据发送,所以单纯地将变量j每次增加I (步骤S50、步骤S60、步骤S120、步骤S130)。在j是8的情况下,由于运算内容144是数据发送,并且执行场所146是从属服务器,所以取得保存有在运算号码8的输入变量和运算号码10的输入变量列表中共通地出现的变量$y的变量列表varList (步骤S70)。由于所取得的varList虽然不是空,但与运算号码8的输入变量列表完全一致(步骤S90为“否”),所以对j加I (步骤SS120)。以后,由于没有数据发送运算,所以将i增加I而代入16(步骤S120、步骤S130、步骤S140、步骤S150)。接着,由于i为16的运算是服务器间运算,但i等于max(步骤S150为“是”),所以回到步骤S20,重复处理。并且,如果i的值超过max (步骤S150为“否”),则分割查询结合运算追加部14结束处理。其结果,制作出分散计划。在图11中表示修正后的分散计划 的表151。即,分散计划结合运算追加部14将计划改写为将服务器间运算和其他运算尽可能并行执行然后结合的形式。如上所述,如果分割查询结合运算追加部14将分散计划修正,则主服务器的收发部17对从属服务器发送修正后的修正分散计划。此时,也可以对全部从属服务器发送修正分散计划。此外,也可以參照执行场所而仅对有关联的从属服务器发送修正分散计划。从属服务器的本地计划选择部31生成针对接收到的由分割查询结合手顺追加部14修正后的分散计划中的、与自身的服务器关联的部分的本地计划候选(步骤S6)。这里,将由本地计划选择部31生成的本地计划的候选在图12中例示。图12所示的本地计划候选2是作为计算机2的从属服务器的本地计划选择部31基于图11所记载的分散计划和图4所记载的数据库信息111生成的、关于计算机2的本地计划候选的一例。如图12所示的本地计划候选2所示,本地计划候选2具有“运算号码”302、“部分查询号码”303、“运算内容” 304、“事前执行运算号码”305、“执行场所” 306、“发送场所” 307、“输入变量” 308、“输出变量” 309的项目。另外,本实施方式的本地计划候选及后述的本地计划具有的项目302 309与本实施方式的分散计划表具有的项目142 149相同。另外,在图12所示的本地计划候选2中,在计算机2中对于来自图4的数据库信息的book之下的year属性节点设定了数值索引。因此,通过运算“数值索引”实现用最初的运算号码I对应于部分查询号码I的部分查询的处理。运算“数值索引”是下述运算针对设定了使节点拥有的值数值化后的值索引化的数值索引后得到的节点,高速地取得满足与给出的数值之间的比较条件的节点或者拥有该节点的文档的最初的节点。具体而言,本地计划选择部31从数值索引内找出满足属性节点year的值大于等于1990的条件的book节点,保存到变量$x中。运算号码2、4、5分别实施处理部分查询号码3、4、5的部分查询的运算“TRAVERSE (遍历)”。另外,所谓运算“遍历”,是从XML内的某个节点(输入)向某个节点(输出)探索的运算。具体而言,从保存在由运算号码I求出的$x中的book节点取得作为子节点的author、title、price,分别保存到变量$z、$u、$v中。运算号码3、6、7、8是将由分散计划制作的数据发送、数据接收、分割查询结合运算原样保留后的运算。
接着,參照图13,说明本地计划候选生成部32基于图12的本地计划候选2再次生成本地计划候选的本地计划候选生成处理(图6的步骤S7)。图13是表示本地计划候选生成处理的一例的流程图。另外,该本地计划候选生成处理使用i这样的变量。i大于等于1,并且小于等于对象的本地计划选择部31所生成的本地计划候选的列表(以下,称作inputPlanList)内的要素数(I < i < inputPlanList内的要素数)。首先,本地计划候选生成部32取得图12所示的本地计划候选(步骤S200)。本地计划候选生成部32设i = I、inputPlanList内的要素数=max(步骤S210)。接着,本地计划候选生成部32从inputPlanList取得第i个本地计划候选plan (步骤S220)。本地计划候选生成部32基于所取得的plan,实施后述的分割查询结合的实施变量的组合样式生成处理,制作包括该plan的新的本地计划候选列表(步骤S230)。所谓分割查询结合的实施变量的组合样式生成处理,是使分割查询结合前后实施的运算变 化而生成各种各样的本地计划候选的处理,通过图14的流程图在后面叙述详细情況。本地计划候选生成部32取得通过分割查询结合的实施变量的组合样式生成处理得到的新的本地计划候选列表(以下,称作nextPlanList)(步骤S240)。这里,使用j这样的变量。j大于等于I,并且小于等于nextPlanList内的要素数(I < j < nextPlanList内的要素数)。此外,此时j = I, nextPlanList内的要素数=finalMax(步骤S250)。接着,本地计划候选生成部32从nextPlanList中取得第j个本地计划候选nextPlan(步骤S260)。本地计划候选生成部32基于所取得的nextPlan实施分割查询结合的实施场所样式生成处理,制作包括nextPlan的新的本地计划候选列表(步骤S270)。所谓分割查询结合的实施场所样式生成处理,是通过使分割查询结合运算的执行场所变化而生成各种本地计划候选的处理,通过图15的流程图在后面叙述详细情況。本地计划候选生成部32基于分割查询结合的实施场所样式生成处理結果,制作新的本地计划候选列表finalPlanList (步骤S280)。将制作出的finalPlanList内的本地计划候选追加到作为最终输出的输出候选计划列表outputList中(步骤S290)。接着,前进到步骤S300,在j中代入j+1 (j = j+1)(步骤S300)。本地计划候选生成部32判断该j是否小于等于finalMax (步骤S310)。在j小于等于finalMax的情况下(步骤S310为“是”),回到步骤S260,重复处理。在j比finalMax大的情况下(步骤S310为“否”),前进到步骤S320,在i中代入i+l(i = i+1)(步骤 S320)。接着,判断i是否小于等于max(步骤S330)。在i小于等于max的情况下(步骤S330为“是”),回到步骤S220,重复处理。在i比max大的情况下结束。最终输出是保存在outputList中的本地计划候选列表,本地计划选择部31从该本地计划候选列表中最终选择I个本地计划。接着,按照图14的流程图,说明由本地计划候选生成部32进行的、图13的步骤S230中的分割查询结合的实施变量的组合样式生成处理。另外,该分割查询结合的实施变量的组合样式生成处理使用i这样的变量。i大于等于1,并且小于等于输入对象的本地计划候选plan的运算号码(I < i < plan的运算号码的最大值)。首先,本地计划候选生成部32将plan登记到作为最终输出的临时候选列表nextPlanList中(步骤S400)。此外,本地计划候选生成部32设i = I、plan的运算号码的最大值=max (步骤S410)。接着,本地计划候选生成部32取得所输入的本地计划候选plan的运算号码i的运算E (步骤S420)。在所取得的运算E是分割查询结合运算的情况下(步骤S430为“是”),取得Plan的第i+Ι个运算号码的数据发送运算S,再取得运算S的输入变量的全部组合样式的列表 varPatternList (步骤 S440)。接着,设j := I、nextPlanList内的要素数=nextMax (步骤S450)。接着,取得nextPlanList 的第 j 个计划 nextPlan (步骤 S460)。接着,设 k := I、varPatternList 内的要素数=VtMax (步骤S470)。接着,制作复制了 nextPlan的内容后的新的本地计划候选newPlan (步骤 S480)。接着,本地计划候选生成部32实施以下3个处理(步骤S490)。第I个是,取得varPatternList的第k个要素targetVars的处理,第2个是,取得newPlan的第i+Ι个运 算号码的数据发送运算AS的处理,第3个是,取得newPlan的第i_l个运算号码的数据接收运算AR的处理。接着,判断运算AS的输入变量列表与targetVars的内容是否一致(步骤S500)。在运算AS的输入变量列表为空的情况下(步骤S500为“是”),不需要运算E、运算AS、运算AR,所以将各运算内容变更为du_y(空)。du_y是什么都不做的运算,在后面删除。这里,由于运算号码错开,所以不删除。接着,为了变更处于比运算E靠前的数据发送运算的输入输出变量和事前执行运算号码以便事前发送不进行分割查询结合的变量,实施以下4个处理(步骤S520)。第I个是,取得以运算E的输入变量为输入变量的数据发送运算BS的处理,第2个是,向BS的输入输出变量列表追加包含在targetVars中的变量的处理,第3个是,取得输出targetVars的变量的运算的运算号码列表PreExeList的处理,第4个是,在BS的事前执行运算号码中KApreExeList的值的处理。本地计划候选生成部32将进行了步骤S520的处理之后的newPlan追加到newPlanList 中(步骤 S530)。然后,在k中代入k+1 (k = k+1)(步骤S540),判断k是否小于等于vtMax(步骤S550)。在k小于等于vtMax的情况下(步骤S550为“是”),回到步骤S480,重复处理。在k比vtMax大的情况下(步骤S550为“否”),前进到步骤S560中,在j中代入j+1 (j =j+1)(步骤 S560)。本地计划候选生成部32判断j是否小于等于nextMax(步骤S570)。在j小于等于nextMax的情况下(步骤S570为“是”),回到步骤S460,重复处理。在j比nextMax大的情况下(步骤S570为“否”),前进到步骤S580,将newPlanList内的要素全部转移到nextPlanList中(步骤S580)。然后,向步骤S590前进,在i中代入i+1 (i : = i+Ι)(步骤S590)。另外,在运算E不是分割查询结合的情况下(步骤S430为“否”),也前进到步骤S590,在i中代入i+1 (i = i+1)(步骤S590)。S卩,在步骤S430为“否”时或接着步骤S580进行步骤S590的处理。本地计划候选生成部32判断i是否小于等于max (步骤S600)。在i小于等于max的情况下(步骤S600为“是”),回到步骤S420,重复处理。在i比max大的情况下结束。处理的结束后的最终输出是保存在nextPlanList中的本地计划候选列表,回到图13的步骤S240而继续本地计划候选生成部32的处理。接着,按照图15的流程图对分割查询结合的实施场所样式生成处理进行说明。另夕卜,该分割查询结合的实施场所样式生成处理使用i这样的变量。i大于等于1,并且小于等于输入对象的本地计划候选nextPlan的运算号码(I < i < nextPlan的运算号码的最大值)。本地计划候选生成部32将nextPlan登记到作为最终输出的最终候选列表finalPlanList 中(步骤 S700)。此外,在处理的开始时刻,设i = I、nextPlan的运算号码的最大值=max (步骤S710)。首先,分割查询结合的实施场所样式生成处理取得所输入的本地计划候选 nextPlan的运算号码i的运算E (步骤S720)。在所取得的运算E是分割查询结合运算的情况下(步骤S730为“是”),取得nextPlan的第i+Ι个运算号码的运算S (步骤S740)。接着,设 j : = KfinalPlanList 内的要素数=finalMax (步骤 S750)。接着,取得 finalPlanList的第j个计划finalPlan(步骤S760)。接着,制作复制了 finalPlan的内容后的新的本地计划候选newPlan (步骤S770)。接着,本地计划候选生成部32为了将分割查询结合的执行场所变更为主服务器而实施以下5个处理(步骤S780)。第I个是,取得分割结合运算E紧后面的发送数据运算S的处理。第2个是,取得分割查询结合运算E紧前面的接收数据运算R的处理。第3个是,将运算R的运算内容变更为发送数据运算、对输入输出变量追加S的输入变量、将执行场所变更为运算S的发送目的地一S的发送源的处理。第4个处理是,将变为不需要的运算S的运算内容变更为dummy的处理。第5个处理是,将运算E的执行场所变更为S的发送源的处理。接着,前进到步骤S790,将在步骤S780中修正后的newPlan追加到新计划列表newPlanList中(步骤S790)。接着,前进到步骤S800,在j中代入j+1 (j = j+1)(步骤S800)。接着,判断j是否小于等于finalMax (步骤S810)。在j小于等于finalMax的情况下(步骤S810为“是”),回到步骤S760,重复处理。在j比finalMax大的情况下(步骤S810为“否”),前进到步骤S820 JfnewPlanList内的要素全部转移到finalPlanList中(步骤S820)。再向步骤S830前进。此外,在运算E不是分割查询结合的情况下(步骤S730为“否”),也前进到步骤S830,在i中代入i+1 (i = i+1)(步骤S830)。S卩,在步骤S730为“否”时或接着步骤S820进行步骤S830的处理。接着,判断i是否小于等于max (步骤S840)。在i小于等于max的情况下(步骤S840为“是”),回到步骤S720而重复处理。在i比max大的情况下,前进到步骤S850。步骤S850是,将处于finalPlanList内的全部的本地计划候选内的运算中的、运算内容为dummy者删除而结束(步骤S850)。最终输出是保存在finalPlanList中的本地计划候选列表,回到图13的步骤S280,继续本地计划候选生成部32的处理。在图12所示的本地计划候选2是由本地计划选择部31得到的本地计划候选的情况下,将进行上述本地计划候选生成处理后的结果而得到的新的本地计划候选2-1至2-6表示在图16至图21中。具体地说明本地计划候选生成部32生成这些本地计划候选2-1至2-6的处理。首先,图12的本地计划候选2作为分割查询结合的实施变量的组合样式处理的输入被传递(图 13 的步骤 S200、S210、S220、S230)。接着,在分割查询结合的实施变量的组合样式处理中,将输入的图12的本地计划候选2(以下,设为plan)登记到临时候选列表(以下,设为nextPlanList)中(图14的步骤S400)。接着,在plan中,由于在i成为7之前不是分割查询结合运算,所以将变量i每次增加I (步骤S420、S430、S550、S540)。i为7时的运算E是分割查询结合,所以取得运算号码为8的运算S,作为S的输入变量($u、$v)的全部组合而将3个组合($u)、($v)、($u、$v)保存到varPatternList中(步骤S440)。接着,设j = I,取得作为nextPlanList内的第I个要素最先登记的图12的plan作为nextPlan(步骤S450、S460)。接着,制作将nextPlan 复制而成的 newPlan (步骤 S480)。
接着,取得varPatternList的第I个要素($u),取得newPlan的运算号码8的数据发送运算AS和运算号码6的数据接收运算AR(步骤S490)。由于AS的输入变量($u、$v)与($u)不一致,所以取得发送分割查询结合的输入变量的运算号码3的数据发送运算,对输入输出变量追加处于分割查询结合的对象以外的变量$u。再将输出变量$u的运算号码4追加到运算号码3的事前执行运算号码中(步骤S500、S520)。将由此得到的newPlan追加到newPlanList中(步骤S530)。将作为newPlan的本地计划候选2_1的内容表示在图16中。其中,在图16所示的本地计划候选2-1中,已删除运算内容du_y的运算。接着,在k中代入2,再次制作复制了图12的plan而成的newPlan (步骤S480)。接着,取得varPatternList的第2个要素($v),取得newPlan的运算号码8的数据发送运算AS和运算号码6的数据接收运算AR(步骤S490)。由于AS的输入变量($u、$v)与($v)不一致,所以取得发送分割查询结合的输入变量$z的运算号码3的数据发送运算,在输入输出变量中追加处于分割查询结合的对象以外的变量扒。再将输出变量$v的运算号码5追加到运算号码3的事前执行运算号码中(步骤S500、S520)。将由此得到的newPlan追加到newPlanList中(步骤S530)。将作为newPlan的本地计划候选2-2的内容表示在图17中。其中,在图17所示的本地计划候选2-2中,已删除运算内容du_y的运算。接着,在k中代入3,再次制作复制了图12的plan而成的newPlan (步骤S480)。接着,取得varPatternList的第3个要素($u、$v),取得newPlan的运算号码8的数据发送运算AS和运算号码6的数据接收运算AR(步骤S490)。由于AS的输入变量($u、$v)和varPatternList的第3个要素($u、$v)完全一致,所以将运算E、AS、AR的运算内容变更为dummy (步骤S510)。接着,取得发送分割查询结合的输入变量的运算号码3的数据发送运算,在输入输出变量中追加处于分割查询结合的对象以外的变量$u、$v。进而,将输出变量$u、$v的运算号码4、5追加到运算号码3的事前执行运算号码中(步骤S520)。将由此得到的newPlan追加到newPlanList中(步骤S530)。将作为该newPlan的本地计划候选2-3的内容表示在图18中。其中,在图18所示的本地计划候选2-3中,已删除运算内容dummy的运算。接着,在k中代入4(步骤S540)。接着,varPatternList由于要素数仅到3,所以在j中代入2 (步骤S590、S580)。接着,nextPlanList由于要素数只有I个,所以将到目前为止得到的newPlanList内的3个本地计划候选图16、17、18所示的本地计划候选转移到nextPlanList中(步骤S570、S560)。nextPlanList在该时刻作为要素而拥有图12、图16至图18的本地计划候选。接着,即使在i中代入8以后的值,也不存在分割查询结合,所以结束分割查询结合的实施变量的组合样式生成处理(步骤S550、S540、S420、S430)。接着,作为分割查询结合的实施变量的组合样式生成处理的输出列表而取得保存有图12、图16至图18的本地计划候选的nextPlanList (图13的步骤S240)。接着,在j中代入1,取得作为nextPlanList的第I个要素的图12的本地计划候选nextPlan (步骤S250、S260)。接着,nextPlan作为分割查询结合的实施场所样式生成处理的输入被传递(步骤 S270)。接着,将作为分割查询结合的实施场所样式生成处理的输入传递来的图12的本地计划候选nextPlan登记到最终候选列表finalPlanList中(图15的步骤S700)。接着,在i中代入1(步骤S710)。
在nextPlan中,在i成为7之前不是分割查询结合运算,所以将变量i每次增加1(步骤S720、S730、S830、S840)。i为7时的运算E是分割查询结合,所以取得运算号码为8的数据发送运算S(步骤S740)。接着,在j中代入I,取得作为finalPlanList内的第I个要素而最初登记的、图12所示的本地计划候选nextPlan作为finalPlan (步骤S750、S760)。接着,制作复制了 finalPlan而成的newPlan (步骤S770)。为了将部分查询号码的执行场所变更为主服务器而进行以下的处理(步骤S780)。最先取得运算号码8的发送数据运算S和运算号码6的接收数据运算R。接着,将R变更为发送数据运算,输入输出变量变更为添加了 S的输入变量$u、$v后的变量,将执行场所变更为"计算机2 —O"。进而,将S的运算内容变更为dummy。最后,将E的执行场所变更为计算机O。接着,将由此得到的newPlan追加到newPlanList中(步骤S790)。将作为newPlan的本地计划候选2-4的内容表示在图19中。其中,在图19所示的本地计划候选2-4中,已删除运算内容du_y的运算。接着,在j中代入2,但finalPlanList由于要素数仅有I个,所以将到目前为止得到的newPlanList内的I个本地计划候选2_4转移到finalPlanList中(步骤S800、S810、S820)。接着,由于即使在i中代入8以后的值也不存在分割查询结合,所以将到目前为止在finalPlanList中得到的各本地计划候选内存在的运算内容为du_y的运算删除,分割查询结合的实施场所样式生成处理结束(步骤S830、S840、S850)。接着,作为分割查询结合的实施场所样式生成处理的输出列表而取得保存有图12、图19的本地计划候选的finalPlanList (图13的步骤S280)。接着,将finalPlanList内的要素图12、图19的本地计划候选转移到输出候选计划列表outputList中(步骤S290)。接着,在j中代入2,取得作为nextPlanList的第2个要素的图16的本地计划候选nextPlan (步骤S300、S310、S260)。接着,nextPlan作为分割查询结合的实施场所样式生成处理的输入被传递(步骤S270)。在分割查询结合的实施场所样式生成处理中,图16所示的本地计划候选2-1与图12所示的本地计划候选2相比,计划的形式除了输入输出变量149以外是大致相同的,由于是与图12所示的本地计划候选2为输入的情况相同的动作,所以省略图16所示的本地计划候选2-1为输入的情况下的详细说明。分割查询结合的实施场所样式生成处理的输出列表finalPlanList的内容成为图16、图20的本地计划候选列表。接着,将finalPlanList内的要素图16、图20的本地计划候选转移到输出候选计划列表outputList中(步骤S290)。接着,在j中代入3,取得作为nextPlanList的第3个要素的图17的本地计划候选nextPlan (步骤S300、S310、S260)。接着,nextPlan作为分割查询结合的实施场所样式生成处理的输入被传递(步骤S270)。在分割查询结合的实施场所样式生成处理中,图17所示的本地计划候选2-2与图12所示的本地计划候选2相比,计划的形式除了输入输出变量149以外是大致相同的,由于是与图12所示的本地计划候选2为输入的情况相同的动作,所以省略图17所示的本地计划候选2-2为输入的情况下的详细说明。分割查询结合的实施场所样式生成处理的输出列表finalPlanList的内容成为图17、图21的本地计划候选列表。将finalPlanList内的要素图17、图21的本地计划候选转移到输出候选计划列 表outputList中(步骤S290)。接着,在j中代入4,取得作为nextPlanList的第4个要素的图18的本地计划候选nextPlan (步骤S300、S310、S260)。接着,nextPlan作为分割查询结合的实施场所样式生成处理的输入被传递(步骤S270)。将作为分割查询结合的实施场所样式生成处理的输入传递来的图18的本地计划候选nextPlan登记到最终候选列表finalPlanList中(图15的步骤S700)。接着,在i中代入1(步骤S720)。接着,在nextPlan中,将变量i每次增加I,但由于到最后之前不存在分割查询结合运算,所以转移到步骤S850中(步骤S720、S730、S830、S840)。在步骤S850中,删除在登记于finalPlanList中的图18所示的本地计划候选2_3内存在的运算内容为dummy的运算,分割查询结合的实施场所样式生成处理结束(步骤S850)。分割查询结合的实施场所样式生成处理的输出列表finalPlanList的内容成为图19的本地计划候选列表。将finalPlanList内的要素图19的本地计划候选2_4转移到输出候选计划列表outputList中(步骤S290)。接着,在j中代入5 (步骤S300)。由于登记在nextPlanList中的要素数仅为4,所以在i中代入2(步骤S310、S320)。由于inputPlanList的要素数仅为1,所以结束本地计划候选生成处理。登记在最终得到的本地计划候选列表outputList中的本地计划候选是图16至图21。在图12的本地计划候选2中,通过运算号码7,在计算机2中将由于在服务器间运算中需要而通过运算号码3的数据发送运算发送来的变量$z与通过和服务器间运算并行执行的运算4、5得到的变量$u、$v分割結合。图16所示的本地计划候选2-1相对于图12所示的本地计划候选2是如下本地计划候选通过使运算号码4不与服务器间运算并行执行,而在运算号码3的数据发送运算中发送变量$z和$u,在运算号码7的分割结合中与$v分割結合。图17所示的本地计划候选2-2相对于图12所示的本地计划候选2是如下本地计划候选通过使运算号码5不与服务器间运算并行执行,而在运算号码3的数据发送运算中发送变量$z和$v,在运算号码7的分割结合中与$u分割結合。图18所示的本地计划候选2-3相对于图12所示的本地计划候选2是如下本地计划候选通过使运算号码4、5不与服务器间运算并行执行,在运算号码3的数据发送运算中发送变量$Z、$V和$u而不进行分割結合。图19所示的本地计划候选2-4相对于图12所示的本地计划候选2,是执行场所不是计算机2而是计算机O的情况下的本地计划候选。图20所示的本地计划候选2-5相对于图16所示的本地计划候选2_1,是执行场所不是计算机2而是计算机O的情况下的本地计划候选。图21所示的本地计划候选2-6相对于图17所示的本地计划候选2-2,是执行场所不是计算机2而是计算机O的情况下的本地计划候选。如以上这样,在图12以及图16至图21所示的本地计划候选中,生成网罗了进行分割结合运算的情况和不进行的情况下的本地计划候选、以及在进行分割结合运算的情况下在分割结合时作为对象的全部变量的組合、和分割结合的实施场所是主服务器或从属服务器的组合在内的本地计划候选。
本地计划选择部31从这些本地计划候选中计算由估计执行时间或估计执行计算量构成的开销,选择开销为最小的本地计划(步骤S8)。这里,说明本地计划候选的估计执行时间计算的一例。本地计划候选的估计执行时间例如基于在图22中举出的各运算的处理估计时间用的參数、和包含在本地计划中的运算来计算。各运算的參数例如是“数值索引0.001msec/输出变量的件数”、“TRAVERSE(遍历)1msec/输入变量的件数”、“分割查询结合lmsec/输入变量的件数”、“服务器间J0IN(联合):1msec/输入变量的件数”、“数据发送5msec+(O. OOlmsec/输入变量的件数)X变量的数”、“数据接收5mSec+(0.001mSec/输入变量的件数)X变量的数”等。另夕卜,预先根据运算内容设定在输出变量中保存的件数。这里,以下说明图12所示的本地计划候选2的估计时间的计算处理的一例。另夕卜,根据图4可知,在计算机2中登记有I万件XML数据,所以由此计算各运算的估计执行时间。(I)在数值索引中使用" > ="运算的情况下,估计整体的10%命中。因此,估计I万件的10%即1000件命中。因而,数值索引的估计计算时间为O. OOlmsec/输出变量的件数 X 1000 件=lmsec。(2)遍历的输入变量的件数根据(I)的结果,估计为1000件。假设输出不变化而估计为1000件。因而,遍历的估计计算时间为lmsec/输入变量的件数X 1000件=1000msec。(3)数据发送的输入变量的件数根据(2)的结果,估计为1000件。因而,数据发送的估计计算时间为5msec+0. OOlmsec/输入变量的件数X 1000X I = 6msec。(4)遍历的输入变量的件数根据(2)的结果,估计为1000件。假设输出不变化而估计为1000件。因而,遍历的估计计算时间为lmsec/输入变量的件数X 1000件=1000msec。(5)遍历的输入变量的件数根据(4)的结果,估计为1000件。假设输出不变化而估计为1000件。因而,遍历的估计计算时间为lmsec/输入变量的件数X 1000件=1000msec。(6)关于数据接收的输入变量的件数,在主服务器中执行服务器间联合而削减到40 %,估计为400件。因而,数据接收的估计计算时间为5msec+0. OOlmsec/ 输入变量的件数 X 400>< I N 6msec。(7)分割查询结合的输入件数根据(5)、(6)而估计共计为1400件。因而,分割查询结合的估计计算时间为lmsec/输入变量的件数X 1400件=1400msec。(8)在(3)中向主服务器进行数据发送后,在主服务器中执行图11的分散计划的运算号码10的服务器间联合。这里,设为服务器间联合的估计计算时间在分散计划生成部13中以与本地计划候选的估计计算时间同样的考虑方式计算后、与分散计划一起发送给从属服务器。在分散计划生成部13中,服务器间联合的输入件数假定为各从属服务器的登记数据数的1/3左右来加以计算。因而,服务器间联合的估计时间为lmsec/输入变量的件数 X 11250 件 +3 = 3750msec。另外,在图11中,作为能够由分割查询结合运算追加部14与运算号码10的服务器间联合并行执行的运算而举出的、运算号码4、5的服务器内运算,对应于本地计划候选2的运算号码4、5的遍历。因此,可知运算号码4、5与运算号码3、6以及服务器间联合并行实施,所以本地计划候选2的估计时间为以下两个估计时间的较长者。(1) + (2) + (3) + (8) + (6) + (7) = 6163msec
(1) + (2) + (4) + (5) + (7) = 4401msec结果,估计为6163msec。作为另一例,在将本地计划候选2-3在计算机2中执行时,全部处理不能并行执行,所以估计时间为将(I)、(2)、(3)、(4)、及(5)的运算与服务器间联合相加后的值。即,为lmsec+1000msec+1000msec+1000msec+6msec+3750msec = 6757msec,计算出本地计划候选2相对而言在包含服务器间联合时变快。这样,通过对本地计划候选的估计计算时间也加上由主服务器执行的服务器间运算的估计时间,能够判断通过由分割查询结合运算追加部追加后的分割查询结合进行的优化是否有效。在本实施方式中,假设计算机I选择图18所示的本地计划候选2-3,计算机2选择图12所示的本地计划候选2,计算机3选择图19所示的本地计划候选2-4分别作为本地计划。各计算机的本地计划选择部31将所选择的本地计划发送给主服务器的分散计划更新部15。如果本地计划选择部31将所选择的本地计划发送给分散计划更新部15,则从属服务器执行对象的本地计划(步骤S9)。接收到本地计划的主服务器的分散计划更新部15与从属服务器进行的步骤S9并行地进行分散计划更新处理(步骤S10)。这里,说明主服务器的分散计划更新部15在计算机I、计算机2、计算机3分别选择了图18、图12、图19的本地计划候选的情况下按照图23的流程图对图11的分散计划进行分散计划的更新的情况下的分散计划更新处理。另外,该分散计划更新处理使用i这样的变量。i大于等于1,并且小于等于对象的从属服务器数(I ^ i <从属服务器数)。在处理的开始时刻,是i = I。此外,设从属服务器数=max (步骤S900)。分散计划更新部15取得计算机号码i的本地计划LPlan (步骤S910)。接着,检查分散计划与本地计划之间的关于分割查询结合的差分(步骤S920)。通过差分检查,在LPlan中判断分割查询结合是否被完全删除(步骤S930)。在LPlan中分割查询结合被完全删除的情况下(步骤S930为“是”),从处于分散计划中的分割查询结合以及处于其前后的数据发送运算、数据接收运算的执行场所中删除计算机i (步骤S940)。接着,判断删除后的结果分割查询结合运算的执行场所是否为空(步骤 S950)。在分割查询结合运算的执行场所为空的情况下(步骤S950为“是”),将处于分散计划中的分割查询结合以及处于其前后的数据发送运算、数据接收运算删除(步骤S960)。接着,前进到步骤S970。此外,在分割查询结合运算的执行场所不是空的情况下(步骤S950为“否”),前进到步骤S970。进而,在LPlan中分割查询结合没有被完全删除的情况下(步骤S930为“否”),前进到步骤S970。S卩,在步骤S930为“否”的情况下、或者在步骤S950为“否”的情况下、或者接着步骤S960进行步骤S970的处理。在步骤S970中,判断在LPlan中是否变更了分割查询结合的执行场所。在LPlan中变更了分割查询结合的执行场所的情况下(步骤S970为“是”),从处于分散计划中的分割查询结合、处于其前后的数据发送运算、以及数据接收运算的执行场 所中删除计算机i (步骤S980)。接着,判断删除后的结果分割查询结合运算的执行场所是否为空(步骤S990)。在分割查询结合运算的执行场所为空的情况下(步骤S990为“是”),将处于分散计划中的分割查询结合以及处于其前后的数据发送运算、数据接收运算删除(步骤S1000)。接着,前进到步骤S990。此外,在分割查询结合运算的执行场所不是空的情况下(步骤S990为“否”),前进到步骤S1010。S卩,在步骤S990为“否”的情况下或接着步骤S1000进行步骤S1010的处理。在步骤S1010中,判断变更了 LPlan的执行场所后的分割查询结合是否已经存在于分散计划内。在将LPlan的执行场所变更后的分割查询结合不是已经存在于分散计划内的情况下(步骤SlOlO为“否”),将变更了执行场所后的分割查询结合、以及处于其前后的数据发送、数据接收的运算追加到分散计划中(步骤S1030)。接着,前进到步骤S1040。此外,在变更了 LPlan的执行场所后的分割查询结合已经存在于分散计划内的情况下(步骤S1010为“否”),对执行场所追加计算机i (步骤S1020)。接着,前进到步骤S1040。进而,在LPlan中没有变更分割查询结合的执行场所的情况下(步骤S970为“否”),前进到步骤S1040。S卩,在步骤S970为“否”的情况下、或接着步骤S1020、或接着步骤S1030进行步骤S1040的处理。在步骤S1040中,在i中代入i+1 (i = i+1)(步骤S1040)。接着,判断i是否小于等于max (步骤S1050)。在i小于等于max的情况下(步骤S1050为“是”),回到步骤S910而重复处理。在i比max大的情况下结束。图24中示出在计算机1、2、3的本地计划分别是本地计划候选2_3、本地计划候选
2、本地计划候选2-4的情况下对图11所示的分散计划进行上述分散计划更新处理后的结果而得到的分散计划。图24所示的分散计划3具有“运算号码”312、“部分查询号码”313、“运算内容”314、“事前执行运算号码”315、“执行场所” 316、“发送场所” 317、“输入变量” 318、“输出变量” 319的项目。该分散计划3具有的项目312至319与分散计划表141具有的项目142至149以及本地计划候选2、2-1至2_6具有的项目302至309相同。首先,在i中代入1,检查作为计算机I选择的本地计划的本地计划候选2-3与图11的分散计划之间的关于分割查询结合的差分(步骤S900、S910、S920)。在本地计划候选2-3中,由于计算机I的分割查询结合被完全删除,所以从图11的分散计划的分割查询结合以及处于其前后的数据发送、数据接收运算(图24的运算号码11-15)的执行场所中删除计算机I (步骤S940)。接着,由于分割查询结合的执行场所不是空,所以分散计划更新部15检查本地计划候选2-3,检查分割查询结合的执行场所是否没有被变更(步骤S950、S970)。由于执行场所没有被变更,所以在i中代入2(步骤S1040、S1050)。接着,设i为2,检查图11的分散计划与作为计算机2选择的本地计划的本地计划候选2之间的关于分割查询结合的差分(步骤S920)。由于图12所示的本地计划候选2中计算机2的分割查询结合没有被删除,执行场所也没有变化,所以在i中代入3 (步骤S930、S970、S1040、S1050)。 接着,设i为3,检查图11的分散计划与作为计算机3选择的本地计划的本地计划候选2-4之间的关于分割查询结合的差分(步骤S920)。由于本地计划候选2-4中计算机3的分割查询结合没有被删除,所以接着检查分割查询结合的执行场所是否被变更(步骤 S930、S970)。此外,由于本地计划候选2-4中分割查询结合的执行场所被变更,所以从分散计划的分割查询结合以及处于其前后的数据发送、数据接收运算(图24的运算号码11-15)的执行场所中删除计算机3 (步骤S980)。由于分割查询结合的执行场所不是空,所以分散计划更新部15接着确认变更了执行场所后的分割查询结合是否插入在分散计划中(步骤S980.S1010)。由于没有被插入在分散计划中,所以将变更了执行场所后的分割查询结合以及处于其前后的数据发送、数据接收运算插入到分散计划中(图24的运算号码14、15、16)(步骤S1030)。接着,在i中代入4,但由于计算机数到3为止,所以结束处理(步骤S1040、S1050)。最终得到图24的分散计划3。分散计划执行部16执行分散计划3的运算(图6的步骤Sll)。另外,分散计划3的执行与从属服务器的本地计划执行部33的执行相互在数据的收发中处于依存关系,例如并行执行、或等待从对方发送数据。即,主服务器的收发部17和从属服务器的收发部34ー边进行数据的交換一边执行分散计划。如上所述,根据本实施方式,对于由用户输入到主服务器中的询问查询,主服务器仅实施与除了部分查询的结合处理以外的服务器间运算关联的部分的优化,部分查询的结合的优化由从属服务器实施。即,主服务器能够将部分查询的结合处理从优化的范围中除夕卜,所以与全部在主服务器侧优化的情况相比能够以简单的机制实现。S卩,主服务器以不依存于从属服务器決定的部分查询的结合处理的形式临时决定部分查询的结合处理。从属服务器基于每个服务器的数据库信息将部分查询的结合处理优化。进而,从属服务器将该部分查询的结合处理的结果通知给主服务器,由此,主服务器生成效率较高的分散计划。此外,关于分割查询结合运算,从属服务器侧进行优化,所以能够生成适合于各从属服务器的高效率的计划。因而,根据本发明的实施方式,关于询问查询51,通过从主服务器決定的分散计划的范围中去除与分割查询结合运算有关的运算来使主服务器的分散计划优化的机制简洁化,在此基础上,从属服务器分别以最优的形式实施上述范围的优化。由此,能够实现高效率的查询处理。(第2实施方式)參照附图对第2实施方式的分散数据库检索装置进行说明。另外,对于与第I实施方式的分散数据库检索装置相同的结构赋予相同的标号并省略说明。图25是表示第2实施方式的分散数据库检索装置的功能结构的结构图。如图25所示,本实施方式的分散数据库检索装置是在图I所示的分散数据库检索装置的结构中还具有模式生成部18、35和模式变更部19、36的结构。所谓模式(schema),是保持所保存的数据的种类或位置信息的数据构造。模式生成部18、35生成在各服务器中进行的运算的结果而输入输出的数据的模 式。例如,主服务器具备的模式生成部18生成分散计划的各运算的输入输出数据的模式。此外,从属服务器具备的模式生成部35生成本地计划的各运算的输入输出数据的模式。模式变更部19、36在将通过分散计划或本地计划的各运算得到的数据传递给下个运算时变更该数据的模式。主服务器的模式变更部19在将通过分散计划或本地计划的各运算的输出得到的数据传递给分散计划接下来的运算的输入时变更数据的模式。从属服务器的模式变更部36将通过分散计划或本地计划的各运算的输出而得到的数据传递给本地计划接下来的运算时变更该数据的模式。这里,在图26中表示在由本实施方式的模式变更部19变更前的模式中包含的项目的一例。所谓变更前的模式,即是由后述的模式生成部18生成的模式。所谓模式,是保持所保存的数据的种类或位置信息的构造,如图26所示,在本实施方式中,具有“可变区域” 401、“变量 ” 402-i(i是大于等于I的整数)、和“扩展变量$#e(Vl…,Vn) ” 403的项目。“扩展变量$#e(Vl, -,Vn) ”403的“$#e”装入与“变量 ”402_i的“ ”不一致的唯一的字符串,在“ (VI,…,Vn)”中装入用“,”分隔的η个唯一的任意的字符串。所谓“可变区域” 401,是保存用来在服务器间传递数据时吸收列(column)数的差异的数据的项目。“变量 ” 402-i是保存各变量的数据的项目,“扩展变量$#e (VI,…,Vn) ”403是保存从变量“VI ”到变量“Vn”的全部变量的数据的项目。另外,“变量 ” 402-i按照输入输出的每个数据而保存各种各样的变量。这里,參照图27,对本实施方式的分散数据库检索装置的检索处理的一例进行说明。图27是表示本实施方式的分散数据库检索装置的检索处理的一例的流程图。另外,关于步骤SI至S8以及SlO的处理,与图6所示的流程图相同,所以省略说明。在图27的步骤S1-S8中决定了本地计划后,本地计划选择部37实施对所決定的本地计划中未決定执行顺序的部分进行确定的本地计划顺序决定处理(步骤S12)。这里,所谓未決定执行顺序的部分,是本地计划的各运算的事前执行号码相等的运算的集合。这些运算由于没有指定以哪个顺序执行,所以能够以任意的顺序执行。即,通过本地计划顺序决定处理唯一地决定这些运算的执行顺序。在图28中表示图12所示的本地计划候选2通过本地计划顺序决定处理(步骤S12)唯一地决定了未決定的运算集合的顺序后的結果。在图12所示的本地计划候选2中,运算号码2、4、5的各运算的事前执行号码是1,执行顺序未決定。在图29中决定为以运算号码2、4、5的顺序执行,将运算号码4的事前执行号码从I改写为2,将运算号码5的事前执行号码从I改写为4。将在步骤S12中的本地计划顺序决定处理后决定了运算顺序的本地计划通过发送部34发送给主服务器。如果主服务器接收到该本地计划,则分散计划更新部10进行分散计划更新处理(步骤S10)。与步骤SlO并行,从属服务器的模式生成部35生成该本地计划内的各运算的输入模式及输出模式(以下,称作输入输出模式)(步骤S14)。所谓输入模式,是所输入的数据的模式。所谓输出模式,是通过运算输出的数据的模式。这里,參照图29,具体地说明模式生成部35对于图28所示的本地计划进行模式生成处理(步骤S14)时的动作。另外,在该模式生成处理中,使用i这样的变量。i是大于等于I的整数,并且小于等于对象的本地计划的运算号码(I ^ i <本地计划的运算号码的最大值)。此外,在模式生成处理的开始时刻,是i = I。此外,将本地计划的运算号码的最大值设为“max”。此外, 将运算号码301为i的本地计划的运算设为运算S。模式生成部35如果从本地计划选择部31接收到本地计划,则首先,作为初始化处理而设i = I、本地计划的运算号码的最大值=max(步骤S1110)。接着,判断i是否小于等于max (步骤SI 110)。在i小于等于max的情况下(步骤SlllO为“是”),取得运算号码i的运算S(步骤S1120)。接着,判断在运算S中是否有输出变量(步骤S1130)。在运算S中有输出变量的情况下(步骤S1130为“是”),将运算S的输出变量追加到输出模式和变量列表VL中。进而,对每个变量准备到达号码列表RL和利用号码列表UL(步骤S1140)。接着,根据各运算的事前执行号码取得运算S和比运算S靠后执行的运算号码的列表AL (步骤S1150)。接着,对于运算S的各输出变量,在对每个变量准备的到达运算号码列表RL中登记保存在列表AL中的运算号码(步骤S1160)。然后,前进到步骤S1170。另外,在运算S中没有输出变量的情况下(步骤S1130为“否”),也前进到步骤S1170。在步骤SI 170中,判断在运算S中是否有输入变量(步骤SI 170)。在运算S中有输入变量的情况下(步骤S1170为“是”),循着运算S的事前执行运算号码,取得在比运算S靠前执行的运算号码的列表BL(步骤SI 180)。接着,对于运算S的各输入变量,在对每个变量准备的利用运算号码列表UL中登记保存在列表BL中的运算号码(步骤S1200)。然后,前进到步骤S1210。另外,在运算S中没有输入变量的情况下(步骤S1170为“否”)也前进到步骤S1210。在步骤S1210中,在i中代入i+l(i = i+1)(步骤S1210)。接着,回到步骤S1110。在i比max大的情况下(步骤SlllO为“否”),前进到步骤S1220。这里,使用j这样的变量。j大于等于1,并且小于等于变量列表VL内的要素数(I彡j彡VL内的要素数)。此外,此时是j = 1,设VL内的要素数=vmax (步骤S1220)。接着,判断j是否小于等于vmax(步骤S1230)。在j小于等于vmax的情况下(步骤S1230为“是,,),从变量列表VL取得第j个变量var (步骤S1240)。接着,取得在变量var的到达运算号码列表RL和利用号码列表UL中共通出现的运算号码列表CL(步骤S1250)。接着,对列表CL内的运算号码的各运算的输出模式追加变量var (步骤S1260)。接着,在j中代入j+1 (j = j+1)(步骤S1270)。接着,回到步骤S1230。在j比vmax大的情况下(步骤S1230为“否”),在i中代入I (i = I)(步骤S1280)。接着,判断i是否小于等于max (步骤S1290)。在i小于等于max的情况下(步骤S1290为“是”),取得运算号码i的运算S(步骤S1300)。接着,将事前执行运算号码的运算的输出模式复制到运算S的输入模式中(步骤S1310)。接着,对运算S的输出模式的开头追加可变区域,对最末尾追加扩展变量$#e()(步骤S1320)。接着,在i中代入i+l(i := i+Ι)(步骤S1330)。接着,回到步骤S1290。在i比max大的情况下(步骤S1290为“否”),结束处理。另外,图29所示的流程图在从属服务器的模式生成部18的模式生成处理S15中也仅存在对象是本地计划还是分散计划的差异,动作是同样的。
这里,在图30中,表示在通过图28所示的本地计划顺序决定处理得到的本地计划中,进行了上述模式生成处理后的结果而得到的输入输出模式的一例。图30所示的输入输出模式表500表不运算号码500、输入模式I、输入模式2、输出模式502的项目。在输入输出模式表500的运算号码501中,保存有与进行了模式生成处理后的计划的运算号码相对应的运算号码。输入模式I保存有在模式生成处理中生成的输入模式的第I个输入模式。输入模式2保存有在模式生成处理中生成的输入模式的第2个输入模式。输出模式504保存有在模式生成处理中生成的输出模式。具体地说明模式生成处理部18计算该输入输出模式表500的处理。首先,图28的本地计划作为模式生成处理的输入被传递。接着,在i中代入1,在max中代入8 (步骤S1100)。接着,由于i小于等于max,所以取得运算号码I的运算S(步骤S1110、S1120)。由于运算S拥有输出变量$x,所以将$x追加到输出模式504和变量列表VL中。进而,准备针对$x的到达号码列表RL和利用号码列表UL (步骤S1130、S1140)。接着,循着事前执行号码,将运算S的运算号码I和比运算S靠后执行的运算号码2-8保存到到达号码列表RL中(步骤S1150、S1160)。由于运算S不拥有输入变量,所以在i中代入2,取得运算号码2的运算 S (步骤 S1210、S1110、S1120)。由于运算S拥有输出变量$z,所以将$z追加到输出模式504和变量列表VL中。进而,准备针对$z的到达号码列表RL和利用号码列表UL (步骤SI 130、SI 140)。接着,循着事前执行号码,将运算S的运算号码2和比运算S靠后执行的运算号码3-8保存到到达号码列表RL中(步骤S1150、S1160)。接着,由于运算S拥有输入变量$x,所以将比S靠前执行的运算号码I登记到利用运算号码UL中。(步骤S1170、S1180、S1200)。接着,取得运算号码3的运算S (步骤S1210、S1110、S1120)。由于运算S拥有输出变量$z,所以将$z追加到输出模式504和变量列表VL中。进而,准备针对$z的到达号码列表RL和利用号码列表UL (步骤SI 130、SI 140)。接着,循着事前执行号码,将运算S的运算号码3和比运算S靠后执行的运算号码3、6-8保存到到达号码列表RL中(步骤S1150、S1160)。接着,由于拥有输入变量$z,所以将比S靠前执行的运算号码1、2登记到$z的利用运算号码UL中(步骤S1130、S1170、S1180、S1200)。接着,取得运算号码4的运算S (步骤S1210、S1110、S1120)。由于运算S拥有输出变量$u,所以将$u追加到输出模式504和变量列表VL中。进而,准备针对$u的到达号码列表RL和利用号码列表UL (步骤SI 130、SI 140)。接着,循着事前执行号码,将运算S的运算号码4和比运算S靠后执行的运算号码5、7、8保存到到达号码列表RL中(步骤S1150、S1160)。接着,由于运算S拥有输入变量$x,所以将比S靠前执行的运算号码1、2登记到利用运算号码UL中(步骤S1170、S1180、S1200)。接着,取得运算号码5的运算S (步骤S1210、S1110、S1120)。用于运算S拥有输出变量$v,所以将$v追加到输出模式504和变量列表VL中。进而,准备针对$v的到达号码列表RL和利用号码列表UL (步骤SI 130、SI 140)。接着,循着事前执行号码,将运算S的运算号码5和比运算S靠后执行的运算号码7、8保存到到达号码列表RL中(步骤S1150、S1160)。接着,由于运算S拥有输入变量$x,所以将比S靠前执行的运算号码1、2、4登记到利用运算号码UL中(步骤S1170、S1180、S1200)。接着,取得运算号码6的运算S (步骤S1210、S1110、S1120)。
由于运算S拥有输出变量$z,所以将$z追加到输出模式504和变量列表VL中。进而,准备针对$z的到达号码列表RL和利用号码列表UL (步骤SI 130、SI 140)。接着,循着事前执行号码,将运算S的运算号码6和比运算S靠后执行的运算号码7、8保存到到达号码列表RL中(步骤S1150、S1160)。接着,由于拥有输入变量$z,所以将比S靠前执行的运算号码1-3登记到$z的利用运算号码UL中(步骤S1130、S1170、S1180、S1200)。接着,取得运算号码7的运算S (步骤S1210、S1110、S1120)。由于运算S不拥有输出变量、而拥有输入变量$z,所以将比S靠前执行的运算号码1-6登记到$z的利用运算号码UL中(步骤SI 130、SI 170、SI 180、S1200)。接着,取得运算号码 8 的运算 S (步骤 S1210、S1110、S1120)。由于运算S拥有输出变量$u和$v,所以将$u和$v追加到输出模式504和变量列表VL中。进而,准备针对$u和$v的到达号码列表RL和利用号码列表UL(步骤SI 130、S1140)。接着,循着事前执行号码,将运算S的运算号码8保存到到达号码列表RL中(步骤S1150、S1160)。接着,由于拥有输入变量$u、$v,所以将比S靠前执行的运算号码1_7登记到$u、$v的利用运算号码UL中(步骤S1130、S1170、S1180、S1200)。接着,由于i超过了 max,所以在j中代入1,在vmax中代入VL的要素数4 (步骤S1210、SI 110、S1220)。接着,取得作为变量列表的第I个要素的变量$x(步骤S1230、S1240)。由于变量$x的利用号码列表UL的各要素是1、2、4,到达运算号码RL是1-8,所以对共通出现的运算号码1、2、4的输出模式504追加$x(步骤S1250、S1260)。接着,取得VL的第 2 个变量 $z (步骤 S1270、S1230、S1240)。由于变量$z的利用号码列表UL的各要素是1_6,到达运算号码RL是2_8,所以对共通出现的运算号码2-6的输出模式504追加$z (步骤S1250、S1260)。接着,取得VL的第 3 个变量 $u (步骤 S1270、S1230、S1240)。由于变量$u的利用号码列表UL的各要素是1-7,到达运算号码RL是4、5、7、8,所以对共通出现的运算号码4、5、7的输出模式504追加$u(步骤S1250、S1260)。接着,取得VL 的第 4 个变量 $v (步骤 S1270、S1230、S1240)。由于变量$v的利用号码列表UL的各要素是1-7,到达运算号码RL是5、7、8,所以对共通出现的运算号码5、7的输出模式504追加$v (步骤S1250、S1260)。接着,在i中代入I,取得运算号码I的运算S (步骤S1270、S1230、S1280)。由于运算号码I没有输入,所以对输出模式504追加可变区域和扩展变量$#e(),取得运算号码2的运算S (步骤S1300-S1320、S1280、S1290)。将运算号码I的输出模式504复制到运算号码2的输入模式I中,对输出模式504追加可变区域和扩展变量$#e(),取得运算号码3的运算S (步骤S1300-S1320、S1280、S1290)。将运算号码2的输出模式504复制到运算号码3的输入模式I中,对输出模式504追加可变区域和扩展变量$#e(),取得运算号码4的运算S (步骤S1300-S1320、S1280、S1290)。将运算号码2的输出模式504复制到运算号码4的输入模式I中,对输出模式504追加可变区域和扩展变量$#e(),取得运算号码5的运算S (步骤S1300-S1320、S1280、 S1290)。将运算号码4的输出模式504复制到运算号码5的输入模式I中,对输出模式504追加可变区域和扩展变量$#e(),取得运算号码6的运算S (步骤S1300-S1320、S1280、S1290)。将运算号码3的输出模式504复制到运算号码6的输入模式I中,对输出模式504追加可变区域和扩展变量$#e(),取得运算号码7的运算S (步骤S1300-S1320、S1280、S1290)。分别将运算号码5的输出模式504复制到运算号码7的输入模式I中,将运算号码6的输出模式504复制到输入模式2中,对输出模式504追加可变区域和扩展变量$#e O,取得运算号码8的运算S (步骤S1300-S1320、S1280、S1290)。将运算号码7的输出模式504复制到运算号码8的输入模式I中,对输出模式504追加可变区域和扩展变量$#e O而结束(步骤S1300-S1320、S1280、S1290)。模式生成处理的输出结果的一例是图30所不的输入输出模式表500。另外,在图30中,在输入模式仅有I个的情况下保存到输入模式I的项目中,在有两个的情况下将第2个保存到输入模式2的项目中,但输入模式的项目也可以根据需要而增減。这里,对与步骤S14并行执行的主服务器的处理进行说明。分散计划生成部23进行分散计划更新处理(步骤S10),在将分散计划更新后,基于更新后的分散计划实施对未决定执行顺序的部分进行确定的分散计划顺序决定处理(步骤S13)。步骤S13的分散计划顺序决定处理除了对象的计划不是本地计划而是分散计划以外与步骤S12相同。接着,模式生成部18生成所決定的分散计划内的各运算的输入输出模式(步骤
S15)。步骤S15的模式生成处理除了对象的计划不是本地计划而是分散计划以外与步骤S14相同。如果由主服务器和从属服务器分别进行模式生成处理,则主服务器和从属服务器分别基于所生成的输入输出模式执行计划。即,从属服务器的本地计划执行部36基于在模式生成处理(步骤S14)中生成的输入输出模式执行本地计划(步骤S9)。此外,主服务器的分散计划执行部16基于在模式生成处理(步骤S15)中生成的模式,执行分散计划(步骤 SI I)。
在本地计划执行(步骤S9)中,本地计划执行部33在实施本地计划的各运算时,将输入的数据和准备好的输入模式传递给模式变更部36,实施模式变更处理(步骤S16)。此外,在分散计划执行(步骤Sll)中也同样,分散计划执行部16在实施分散计划的各运算时,将输入的数据和准备好的输入模式传递给模式变更部19而实施模式变更处理(步骤
S16)。这里,參照图31,对在步骤S16中主服务器的模式变更部19执行分散计划时进行的模式变更处理进行说明。模式变更部19取得作为分散计划执行部16接着执行的运算的输入的拥有模式S的数据D、和由模式生成部18预先准备的运算的输入模式T (步骤S1400)。接着,判断模式S与模式T的变量的项目是否一致(步骤S1410)。在模式S与模式T的变量的项目不一致的情况下(步骤S1410为“否”),取得模 式S的扩展变量$#e的变量列表VL,判断列表是否是空(步骤S1420)。在模式S的扩展变量$#e的变量列表VL不是空的情况下(步骤S1420为“否”),将扩展变量列表VL内的各变量追加作为模式S的变量的项目,将VL变更为空(步骤S1430)。接着,取得存在于模式S中但不存在于模式T中的变量的项目的列表DL (步骤S1430)。接着,前进到步骤S1450。另外,在模式S的扩展变量$#e的变量列表VL为空的情况下(步骤S1420为“是”),也前进到步骤S1450。在步骤S1450中,判断变量的项目列表DL内的变量是否在模式S中非连续地排列(步骤 S1450)。在变量的项目列表DL内的变量在模式S中非连续地排列的情况下(步骤S1450为“是,,),将模式S和数据D的各数据改写,以使变量的项目列表DL内的变量连续(步骤S1460)。接着,前进到步骤S1470。另外,在变量的项目列表DL内的变量在模式S中没有非连续地排列的情况下(步骤S1420为“否”),也前进到步骤S1470。在步骤S1470中,从模式S的变量的项目中删除列表DL内的变量,追加到扩展变量$#e的变量列表中(步骤S1470)。接着,在数据D的可变区域的项目中保存列表DL内的变量的合计尺寸并结束(步骤S1480)。另外,在模式S与模式T的变量的项目一致的情况下(步骤S1410为“是”)也结束。另外,关于图31所示的流程图,在针对本地计划执行部33的运算进行的模式变更部36的处理时,也仅存在对象是本地计划还是分散计划的差异,动作是同样的。这里,參照图31,具体地说明模式变更部19对图26所示的计算机O的运算号码7的输入模式、和从计算机I、计算机2、计算机3发送来的各数据的模式进行模式变更处理时的动作。在分散计划为图24、计算机I、计算机2、计算机3的本地计划为图12、图18、图16所示的本地计划候选时的、分散计划的运算号码7的接收运算的实施时进行该模式变更处理。首先,取得图26的计算机O的运算号码7的输入模式T、和从计算机I发送来的数据的模式S (步骤S1400)。由于模式S与模式T的变量项目一致,所以结束处理(步骤S1410)。接着,取得计算机O的运算号码7的输入模式T、和从计算机2发送来的数据的模式S (步骤S1400)。由于模式S与模式T的变量项目不一致,并且S的扩展变量$#e的变量列表是空,所以作为存在于模式S中而不存在于模式T中的变量,取得$u和$v (步骤S1410、步骤S1420、步骤S1440)。由于变量$u和$v在模式S中连续排列,所以从模式S的项目中删除变量$u和$v,追加到扩展变量$#e的变量列表中(步骤S1450、步骤S1470)。最后,将$u和$v的变量的合计尺寸保存到扩展区域中(步骤S1480)。接着,取得计算机0的运算号码7的输入模式T、和从计算机3发送来的数据的模式S (步骤S1400)。由于模式S与模式T的变量项目不一致,并且S的扩展变量$#e的变量列表为空,所以作为存在于模式S中而不存在于模式T中的变量,取得$u(步骤S1410、步骤S1420、步骤S1440)。由于变量$u在模式S中连续排列,所以从模式S的项目中删除变量$u,追加到扩展变量$#e的变量列表中(步骤S1450、步骤S1470)。最后,将$u的变量的合计尺寸保存到扩展区域中(步骤S1480)。将模式变更处理的结果表示到图32中。图32是表示模式变更处理后的模式所包括的项目的一例。如图32所示,在本实施方式中,在模式变更处理后,具有“可变区域” 401、“变量 ” 402、和“扩展变量$#e (VI...,Vn) ” 403的项目。另外,说明了在主服务器的分散计划的运算和从属服务器的本地计划的运算中交 接数据时实施上述模式变更处理的事例,但在同一服务器内、或从属服务器间的运算中交接数据时也能够采用。在图24中,在运算号码6的服务器间联合之前接收变量$z。但是,由图18、图12、图19的本地计划候选可知,计算机I发送变量$z、$u、$v这3组数据,计算机2发送变量$z,计算机3发送变量$z、$u这两组数据。因此,这样下去成为处理列数不同的表。因而,在主服务器的模式变更部18中,将模式变更,以便能够将图26所示的各计算机的数据的模式如图32所示那样看作全部计算机的数据为相同的模式。在图24中,在运算号码6的服务器间联合中仅需要变量$z,所以在除此以外还包含变量的情况下,全部作为保存有I个可变长数据的扩展变量$#e的列加以处理。并且,在可变区域中存储有可变长区域的尺寸。由此,在服务器间联合的执行时能够全部作为相同形式的表加以处理。根据本实施方式的分散数据库检索装置,由于对每个从属服务器制作本地计划,所以有可能按照每个从属服务器而分散计划的一部分不同。即,有可能按照每个从属服务器而发送的数据的模式不同。本实施方式在这样的情况下,通过在模式变更部18、20中变更在交接数据时发送的一侧的数据的模式(输入模式)与接收的数据的模式(输出模式)的差异,实现作为相同模式的数据进行处理。S卩,在按照每个从属服务器制作效率较高的本地计划的情况下,有时存在多个不同的模式的数据。这样,在按照每个从属服务器制作效率较高的本地计划的情况下,需要将多个不同的模式的数据统一处置的处理。如上所述,根据本实施方式,能够将多个不同模式的数据统一地处置。此外,在本实施方式中,仅通过仅模式、或者模式和数据的一部分的区域的改写,就能够实现统一地处置多个不同模式的数据。以上,说明了本发明的实施方式,但这些实施方式是作为例子提示的,并不意味着限定发明的范围。这些新的实施方式能够以其他各种形态实施,在不脱离发明的主旨的范围内能够进行各种省略、替换、变更。这些实施方式及其变形包含在发明的范围及主旨中,并且包含在权利要求书所记载的发明和其等价的范围中。
权利要求
1.一种检索方法,是多个从属服务器与主服务器连接而成的分散数据库检索装置的检索方法,上述从属服务器具有存储数据的数据库,上述主服务器存储上述数据库的管理信息,基于询问查询检索上述数据,上述检索方法包括 基于上述询问查询,生成对多个数据库中存储的数据进行检索的分散计划的步骤,上述分散计划包括由上述从属服务器分别运算的服务器内运算处理,或者包括上述服务器内运算以及从上述多个从属服务器收集数据并在主服务器中运算的服务器间运算处理;在上述分散计划中存在能够与上述服务器间运算处理并行执行的运算,并且存在既需要执行该运算后的结果也需要上述服务器间运算处理的结果的运算的情况下,对上述分散计划追加分割查询结合运算的步骤,上述分割查询结合运算是,并行地执行能够与上述服务器间运算处理并行执行的运算与上述服务器间运算,并且将通过能够与上述服务器间运算处理并行执行的运算得到的数据及通过上述服务器间运算得到的数据相结合; 从该分散计划中提取与上述从属服务器关联的计划的步骤; 生成将包含在上述提取出的计划中的上述分割查询结合运算部分以及与分割查询结合运算关联的数据的收发运算变更后得到的本地计划候选的步骤; 生成将包含在所生成的上述本地计划候选中的上述分割查询结合运算部分以及与分割查询结合运算关联的数据的收发运算变更后的新的本地计划候选的步骤; 计算所生成的上述本地计划候选及上述提取出的计划各自的运算开销,选择上述运算开销为最小的计划作为本地计划的步骤;以及 基于上述选择出的本地计划将上述分散计划更新的步骤。
2.一种分散数据库检索装置,由具有存储数据的数据库的多个从属服务器与基于询问查询检索上述数据的主服务器连接而成, 上述主服务器具备 存储部,存储上述从属服务器具有的各数据库的管理信息; 分散计划生成部,基于上述询问查询,生成对多个数据库中存储的数据进行检索的分散计划,上述分散计划包括由上述从属服务器分别运算的服务器内运算处理,或者包括上述服务器内运算以及从上述多个从属服务器收集数据并在主服务器中运算的服务器间运算处理; 分割查询结合运算追加部,在上述分散计划中存在能够与上述服务器间运算处理并行执行的运算,并且存在既需要执行该运算后的结果也需要上述服务器间运算处理的结果的运算的情况下,对上述分散计划追加分割查询结合运算,上述分割查询结合运算是,并行地执行能够与上述服务器间运算处理并行执行的运算与上述服务器间运算,并且将通过能够与上述服务器间运算处理并行执行的运算得到的数据及通过上述服务器间运算得到的数据相结合;以及 分散计划更新部,基于从上述从属服务器接收到的本地计划,将上述分散计划更新; 上述从属服务器具备 本地计划候选生成部,从上述分散计划中提取与上述从属服务器关联的计划,生成将包含在上述提取出的计划中的上述分割查询结合运算部分以及与分割查询结合运算关联的数据的收发运算变更后得到的本地计划候选;以及 本地计划选择部,计算所生成的上述本地计划候选及上述提取出的计划各自的运算开销,选择上述运算开销为最小的计划作为本地计划。
3.如权利要求2所述的分散数据库检索装置, 具备模式变更部,在上述服务器间运算中,收发的数据的列在上述主服务器和上述从属服务器中不同的情况下,该模式变更部使上述列为存储有可变长的数据的列。
4.一种主服务器,与具有存储数据的数据库的多个从属服务器连接构成分散数据库装置,基于输入的询问查询,检索上述数据库,上述主服务器具备 存储部,存储上述从属服务器具有的各数据库的管理信息; 分散计划生成部,基于上述询问查询,生成对多个数据库中存储的数据进行检索的分散计划,上述分散计划包括由上述从属服务器分别运算的服务器内运算处理,或者包括上述服务器内运算以及从上述多个从属服务器收集数据并在主服务器中运算的服务器间运算处理; 分割查询结合运算追加部,在上述分散计划中存在能够与上述服务器间运算处理并行执行的运算,并且存在既需要执行该运算后的结果也需要上述服务器间运算处理的结果的运算的情况下,对上述分散计划追加分割查询结合运算,上述分割查询结合运算是,并行地执行能够与上述服务器间运算处理并行执行的运算与上述服务器间运算,并且将通过能够与上述服务器间运算处理并行执行的运算得到的数据及通过上述服务器间运算得到的数据相结合;以及 分散计划更新部,基于从上述从属服务器接收到的本地计划,将上述分散计划更新。
5.一种从属服务器,具备数据库,多个上述从属服务器与基于输入的询问查询检索上述数据库的主服务器连接构成分散数据库检索系统,上述从属服务器具备 本地计划候选生成部,在从主服务器接收到的分散计划中提取与上述从属服务器关联的计划,生成将包含在上述提取出的计划中的上述分割查询结合运算部分以及与分割查询结合运算关联的数据的收发运算变更后得到的本地计划候选;以及 本地计划选择部,计算所生成的上述本地计划候选及上述提取出的计划各自的运算开销,选择上述运算开销为最小的计划作为本地计划。
6.如权利要求5所述的从属服务器, 在上述本地计划选择部计算的上述本地计划候选的运算开销中,还包括由上述分割查询结合运算追加部追加的分割查询结合运算的运算开销。
全文摘要
本发明提供一种不使主服务器侧的机制复杂化而实现高效率的检索的分散数据库检索装置。实施方式的分散数据库检索装置是,将基于所输入的询问查询检索数据库的主服务器与具备数据库的多个从属服务器连接而构成的。从属服务器具备与主服务器进行数据的收发的第2收发部、基于接收到的分散计划生成本地计划候选的本地计划候选生成部、和基于所生成的本地计划候选决定运算开销为最低的本地计划的本地计划选择部。
文档编号G06F17/30GK102831138SQ201210048380
公开日2012年12月19日 申请日期2012年2月28日 优先权日2011年6月14日
发明者黑田洋介 申请人:株式会社东芝, 东芝解决方案株式会社
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1