本發(fā)明要求于2014年3月21日遞交的發(fā)明名稱為“特定列物化調(diào)度”的第61/968,793號(hào)美國(guó)臨時(shí)專利申請(qǐng)案的在先申請(qǐng)優(yōu)先權(quán),以及要求于2015年3月19日遞交的發(fā)明名稱為“用于特定列物化調(diào)度的系統(tǒng)和方法”的第14/663,210號(hào)美國(guó)非臨時(shí)專利申請(qǐng)案的在先申請(qǐng)優(yōu)先權(quán),這些申請(qǐng)以引入的方式并入本文。
技術(shù)領(lǐng)域:
:本發(fā)明主要涉及關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(relationaldatabasemanagementsystem,RDBMS),更具體地,涉及一種用于面向列的RDBMS中的特定列物化的系統(tǒng)和方法。
背景技術(shù):
::面向列的RDBMS為將數(shù)據(jù)表存儲(chǔ)為數(shù)據(jù)列而不是數(shù)據(jù)行的部分的DBMS。在面向列的RDBMS中執(zhí)行查詢期間,經(jīng)常需要整合記錄的多個(gè)列。在執(zhí)行查詢期間,其中一些列被添加到中間結(jié)果。該過(guò)程稱作物化。在面向列的RDBMS中,如何將列物化是確定查詢性能的重要因素?,F(xiàn)有的面向列的RDBMS通常采用固定的早期物化或固定的后期物化。早期物化中,在運(yùn)算符圖的葉子節(jié)點(diǎn)上提取查詢中參考的列,如果上游運(yùn)算符需要,將這些列從子運(yùn)算符傳輸至父運(yùn)算符。后期物化中,在進(jìn)行處理之前,從列的源頭提取運(yùn)算符所需的列,之后丟棄。對(duì)于大多數(shù)面向列的RDBMS,列物化策略是硬編碼的。技術(shù)實(shí)現(xiàn)要素:本發(fā)明涉及在面向列的RDBMS中確定查詢執(zhí)行中的各列的最佳物化調(diào)度。一個(gè)示例實(shí)施例包括一種在RDBMS中動(dòng)態(tài)建立物化調(diào)度的方法。該方法包括:接收查詢文本;將所述查詢文本轉(zhuǎn)換成Rel無(wú)回路有向圖(directedacyclicgraph,DAG);對(duì)所述RelDAG進(jìn)行自底向上的橫斷操作,以創(chuàng)建平行RelDAG;計(jì)算所述平行RelDAG的特定列物化調(diào)度。所述平行RelDAG被轉(zhuǎn)換成函數(shù)調(diào)用和數(shù)據(jù)重整動(dòng)作的DAG,以創(chuàng)建平行語(yǔ)句林。根據(jù)所述平行語(yǔ)句林生成了調(diào)用所述函數(shù)調(diào)用和數(shù)據(jù)重整動(dòng)作的協(xié)調(diào)語(yǔ)句林。所述平行語(yǔ)句林和所述協(xié)調(diào)語(yǔ)句林被轉(zhuǎn)換成一批二元關(guān)聯(lián)表(binaryassociationtable,BAT)運(yùn)算符列表,從而為表格的各列計(jì)算最佳物化調(diào)度。在另一示例實(shí)施例中,RDBMS用于動(dòng)態(tài)建立物化調(diào)度。在另一示例實(shí)施例中,關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng)(relationaldatabasemanagementsystem,RDBMS)用于動(dòng)態(tài)建立物化調(diào)度。所述RDBMS包括:接收工具,用于接收查詢文本;轉(zhuǎn)換工具,用于將所述查詢文本轉(zhuǎn)換成Rel無(wú)回路有向圖(directedacyclicgraph,DAG);執(zhí)行工具,用于對(duì)所述RelDAG進(jìn)行自底向上的橫斷操作,以創(chuàng)建平行RelDAG;計(jì)算工具,用于計(jì)算所述平行RelDAG的特定列物化調(diào)度。所述平行RelDAG被轉(zhuǎn)換成函數(shù)調(diào)用和數(shù)據(jù)重整動(dòng)作的DAG,以創(chuàng)建平行語(yǔ)句林。根據(jù)所述平行語(yǔ)句林生成了調(diào)用所述函數(shù)調(diào)用和數(shù)據(jù)重整動(dòng)作的協(xié)調(diào)語(yǔ)句林。所述平行語(yǔ)句林和所述協(xié)調(diào)語(yǔ)句林被轉(zhuǎn)換成一批二元關(guān)聯(lián)表(binaryassociationtable,BAT)運(yùn)算符列表,從而為表格的各列計(jì)算最佳物化調(diào)度。附圖說(shuō)明為了更完整地理解本發(fā)明及其優(yōu)點(diǎn),現(xiàn)在參考下文結(jié)合附圖進(jìn)行的描述,相同的數(shù)字表示相同的對(duì)象,其中:圖1示出了事物處理性能委員會(huì)(TPC)基準(zhǔn)H(TPC-H)的表模式;圖2示出了結(jié)構(gòu)化查詢語(yǔ)言(SQL)語(yǔ)句的查詢計(jì)劃的語(yǔ)法樹(shù);圖3示出了本發(fā)明提供的特定列物化算法的示例;圖4示出了本發(fā)明提供的平行查詢最佳化的示例方法;圖5示出了平行語(yǔ)句林的示例;圖6示出了協(xié)調(diào)語(yǔ)句林的示例;圖7示出了本發(fā)明提供的平行查詢最佳化的計(jì)算設(shè)備的示例。具體實(shí)施方式以下討論的圖1至7以及該專利文檔中的各種實(shí)施例僅通過(guò)舉例說(shuō)明的方式描述本發(fā)明的原理,而不應(yīng)以任何方式理解為對(duì)本發(fā)明范圍的限制。本領(lǐng)域技術(shù)人員可以理解的是,本發(fā)明的原理可通過(guò)任何一種設(shè)置合理的設(shè)備和系統(tǒng)實(shí)現(xiàn)。在面向列的RDBMS中的特定查詢中,運(yùn)算符的不同集合訪問(wèn)不同的列。因此,對(duì)查詢中的所有列使用單一的物化方法可能會(huì)導(dǎo)致在最佳方式中一些列不能被物化。本發(fā)明實(shí)施例提供用于分布式面向列的RDBMS中的動(dòng)態(tài)特定列物化調(diào)度的方法和裝置。通過(guò)基于執(zhí)行成本選擇物化策略,使物化調(diào)度最佳化,其中所述執(zhí)行成本包括每個(gè)單獨(dú)的交換運(yùn)算符的中央處理單元(centralprocessingunit,CPU)、磁盤(pán)以及網(wǎng)絡(luò)成本。所揭示的實(shí)施例使用動(dòng)態(tài)編程技術(shù)確定最佳物化調(diào)度。子計(jì)劃的最佳調(diào)度與路徑無(wú)關(guān),因此,針對(duì)所揭示的實(shí)施例,動(dòng)態(tài)編程在計(jì)算上是可行的。如前文描述的,傳統(tǒng)物化方案包括早期物化和后期物化。為更好說(shuō)明這些物化方案,下面將描述每個(gè)物化方案的例子。為說(shuō)明早期物化的例子,考慮以下示例查詢1,該示例查詢1基于圖1所示的事物處理性能委員會(huì)(TPC)基準(zhǔn)H(TPC-H)的表模式中的現(xiàn)有表格。示例查詢1:SELECTl_suppkeyfromlineitem,partWHEREl_partkey=p_partkeyANDl_shipdate>‘2008-01-01’;為達(dá)到該示例的目的,假設(shè)表格PART由列p_partkey劃分,表格LINEITEM由列l(wèi)_orderkey劃分?;赑ART和LINEITEM表格中的已知數(shù)據(jù),可以表明,對(duì)于查詢1,連接選擇性大約為50%。如本領(lǐng)域中已知的,連接選擇性為連接結(jié)果中的記錄間存在多少變化(例如,多少個(gè)不同的值)的測(cè)量。低選擇性意味著列中的值沒(méi)有很多變化,而高選擇性意味著列中的值有大量的變化。在表格LINEITEM中的記錄重排之前,可以檢查該連接選擇性,從而確定早期物化和后期物化的成本。計(jì)算該成本之后,發(fā)現(xiàn)對(duì)于查詢1,早期物化(即,整合l_suppkey與l_partkey,然后重排)更好。這是因?yàn)榘l(fā)送50%的行ID和l_suppkey列數(shù)據(jù)的通信/CPU成本將會(huì)比重整全部的l_suppkey列數(shù)據(jù)成本更高。為說(shuō)明后期物化的例子,考慮以下示例查詢2,該示例查詢2也基于圖1所示的TPC-H表格模式。示例查詢2:SELECTl_suppkeyfromlineitem,partWHEREl_partkey=p_partkeyANDl_shipdate>‘2014-10-01’;再次假設(shè)表格PART由列p_partkey劃分,表格LINEITEM由列l(wèi)_orderkey劃分。基于查詢2中不同的shipdate值,可以表明針對(duì)查詢2的連接選擇性大約為1%。能夠確定使用早期物化和后期物化在表格LINEITEM中重排記錄的成本。計(jì)算該成本之后,發(fā)現(xiàn)對(duì)于查詢2,后期物化(即,首先連接,然后提取有用的l_suppkey數(shù)據(jù))更好。這是因?yàn)榉謩e發(fā)送1%的行ID和l_suppkey列數(shù)據(jù)的通信/CPU成本將會(huì)比重整全部的帶有l(wèi)_partkey數(shù)據(jù)的l_suppkey列成本更低。對(duì)于具有多個(gè)表格連接的一些查詢,可以使用本發(fā)明提供的混合物化方案。例如,考慮示例查詢3,該示例查詢3基于圖1所示的TPC-H表格模式。示例查詢3:SELECTl_suppkeyfromlineitem,parta,partbWHEREl_partkey=a.p_partkeyANDl_suppkey=b.p_partkeyANDl_shipdate>‘2008-10-01’;再次假設(shè)表格PART由列p_partkey劃分,表格LINEITEM由列l(wèi)_orderkey劃分。查詢3中,有兩個(gè)表格連接。對(duì)于表格中已知數(shù)據(jù),可以表明針對(duì)“l(fā)_partkey=a.p_partkey”的連接選擇性(第一表格連接)為50%,針對(duì)“l(fā)_suppkey=b.p_partkey”的連接選擇性(第二表格連接)為1%。計(jì)算表格LINEITEM中重排記錄的成本后,發(fā)現(xiàn)對(duì)于查詢3,混合物化更好。也就是,針對(duì)查詢3的最佳物化方案是在第一表格連接中使用早期物化,在第二表格連接中使用后期物化。圖2示出了示例查詢3的查詢計(jì)劃的語(yǔ)法樹(shù)。如圖2所示,語(yǔ)法樹(shù)200包括查詢3中每個(gè)運(yùn)算符的節(jié)點(diǎn)。該語(yǔ)法樹(shù)200為包括多個(gè)節(jié)點(diǎn)201–207的無(wú)回路有向圖(directedacyclicgraph,DAG)。該節(jié)點(diǎn)201代表查詢3中的LINEITEM表格。該節(jié)點(diǎn)201處在語(yǔ)法樹(shù)200底部,因?yàn)長(zhǎng)INEITEM為查詢3中的第一個(gè)運(yùn)算符。節(jié)點(diǎn)202為代表查詢3中數(shù)據(jù)重排或再分布操作的交換節(jié)點(diǎn)。這里,在LINEITEM表格中的數(shù)據(jù)連接到PART表格之前,重排該數(shù)據(jù)。節(jié)點(diǎn)203代表PART表格的第一實(shí)例(實(shí)例A)。節(jié)點(diǎn)204代表重排的LINEITEM表格與PART表格的實(shí)例A的連接,以及SELECT語(yǔ)句。節(jié)點(diǎn)205為代表來(lái)自節(jié)點(diǎn)204的結(jié)果集的數(shù)據(jù)重排的其他交換節(jié)點(diǎn)。節(jié)點(diǎn)206代表PART表格的第二實(shí)例(實(shí)例B)。節(jié)點(diǎn)207代表來(lái)自節(jié)點(diǎn)205的重排的結(jié)果集與PART表格的實(shí)例B的連接。物化成本在這里揭示的實(shí)施例中,特定列物化算法為平行查詢最佳化編譯過(guò)程的一部分,該過(guò)程將結(jié)構(gòu)化查詢語(yǔ)言(SQL)語(yǔ)句轉(zhuǎn)換成并行執(zhí)行計(jì)劃。根據(jù)所揭示的實(shí)施例,使用早期物化或后期物化的決定能夠基于以下遞歸推理。如果并行執(zhí)行計(jì)劃表示為交換節(jié)點(diǎn)的DAG(如圖2所示的語(yǔ)法樹(shù)200),交換節(jié)點(diǎn)E(例如,交換節(jié)點(diǎn)205)上的C列實(shí)現(xiàn)物化的最好方法取決于該列是否在E的子交換節(jié)點(diǎn)E_1(例如,交換節(jié)點(diǎn)202)上實(shí)現(xiàn)物化。例如,如果C列在交換節(jié)點(diǎn)E_1上實(shí)現(xiàn)物化,使C列在交換節(jié)點(diǎn)E上物化的成本將為使C列在交換節(jié)點(diǎn)E_1上物化的成本加上在交換節(jié)點(diǎn)E上重整C列的通信/CPU成本。如果C列沒(méi)有在交換節(jié)點(diǎn)E_1上實(shí)現(xiàn)物化,成本將為交換節(jié)點(diǎn)E上的后期物化成本,該成本為發(fā)送行ID和C列數(shù)據(jù)的通信/CPU成本?;谙惹暗耐评?,給定交換節(jié)點(diǎn)E和并行執(zhí)行交換節(jié)點(diǎn)DAG,可以將計(jì)算C列的最佳物化調(diào)度的問(wèn)題歸納為:選擇物化調(diào)度M,從而通過(guò)遞歸的方法使交換節(jié)點(diǎn)E上各級(jí)L的以下成本最小化。最小化(基于M【L-1】轉(zhuǎn)換C列數(shù)據(jù)的成本+根據(jù)M【L-1】在E【L-1】上使C物化的成本其中,M【L-1】為L(zhǎng)-1級(jí)上的物化選擇,E【L-1】為L(zhǎng)-1級(jí)上的交換節(jié)點(diǎn)。再轉(zhuǎn)向圖2和查詢3,基于先前的推理,可以表明在節(jié)點(diǎn)202(交換_1)上使l_suppkey物化的最好方法為早期物化,而在節(jié)點(diǎn)205(交換_2)上使l_suppkey物化的最好方法為后期物化。根據(jù)本發(fā)明,提供了一種計(jì)算列的最佳物化調(diào)度的方法。在所揭示的方法中,假設(shè)交換節(jié)點(diǎn)的DAG,如圖2所示的語(yǔ)法樹(shù)200,和關(guān)系運(yùn)算符代表分布式執(zhí)行計(jì)劃。當(dāng)父交換節(jié)點(diǎn)需要使列物化,如果成本低于從父交換節(jié)點(diǎn)中的行ID提取該列的成本,所述父交換節(jié)點(diǎn)使該列物化。可以將該方法歸納為以下大綱:在各交換節(jié)點(diǎn)決定是否使列物化。這基于成本比較。如果在前一個(gè)交換節(jié)點(diǎn)使列物化:如果在下一個(gè)交換節(jié)點(diǎn)使列物化:如果在當(dāng)前交換節(jié)點(diǎn)使列物化:前一個(gè)節(jié)點(diǎn)上的物化成本=下一節(jié)點(diǎn)至當(dāng)前節(jié)點(diǎn)的列轉(zhuǎn)換成本+下一節(jié)點(diǎn)的物化成本如果在當(dāng)前交換節(jié)點(diǎn)沒(méi)有使列物化:前一個(gè)節(jié)點(diǎn)上的物化成本=將行ID發(fā)送至源節(jié)點(diǎn)的成本+生成的列的轉(zhuǎn)換成本如果在下一個(gè)交換節(jié)點(diǎn)沒(méi)有使列物化:前一個(gè)節(jié)點(diǎn)上的物化成本=將行ID發(fā)送至源節(jié)點(diǎn)的成本+生成的列的轉(zhuǎn)換成本作為(a)的結(jié)果,如果當(dāng)前交換節(jié)點(diǎn)上需要使該列物化或如果(a.i.1)上的成本小于(a.i.2)上的成本,在當(dāng)前交換節(jié)點(diǎn)上使該列物化。如果在前一個(gè)交換節(jié)點(diǎn)沒(méi)有使列物化:如果在下一個(gè)交換節(jié)點(diǎn)使列物化:如果在當(dāng)前交換節(jié)點(diǎn)使列物化:不在前一個(gè)節(jié)點(diǎn)上物化的成本=0如果在當(dāng)前交換節(jié)點(diǎn)沒(méi)有使列物化:不在前一個(gè)節(jié)點(diǎn)上物化的成本=0如果在下一個(gè)交換節(jié)點(diǎn)沒(méi)有使列物化:不在前一個(gè)節(jié)點(diǎn)上物化的成本=0作為(b)的結(jié)果,在當(dāng)前交換節(jié)點(diǎn)上沒(méi)有使列物化。物化調(diào)度算法圖3示出了本發(fā)明提供的特定列物化算法300的示例。該算法300為能夠代表DAG(或由DAG代表)的無(wú)環(huán)算法的偽代碼。該算法300可以為平行查詢最佳化編譯過(guò)程的一部分,該過(guò)程將結(jié)構(gòu)化查詢語(yǔ)言(SQL)語(yǔ)句轉(zhuǎn)換成并行執(zhí)行計(jì)劃。在特定實(shí)施例中,該算法300可以用于進(jìn)行可以包括混合物化的SQL操作,如查詢3。該算法300可以由能夠進(jìn)行RDBMS操作的計(jì)算設(shè)備執(zhí)行,如圖7(下文描述的)的計(jì)算設(shè)備700。該算法300包括三個(gè)輸入:交換節(jié)點(diǎn)E,L級(jí),C列。如前文所述,交換節(jié)點(diǎn)為用于重排一個(gè)或多個(gè)表格中的記錄的數(shù)據(jù)庫(kù)運(yùn)算符。L級(jí)由系統(tǒng)提供并用于識(shí)別查詢樹(shù)中的級(jí)。這里,為查詢樹(shù)中的級(jí)編號(hào),這樣,查詢樹(shù)的最低級(jí)顯示或指示在樹(shù)的底部,查詢樹(shù)的最高級(jí)顯示或指示在樹(shù)的頂部。該算法300中的陣列K包含不同級(jí)的物化成本。也就是說(shuō),該陣列K的各元素對(duì)應(yīng)一個(gè)級(jí)的物化成本?;?級(jí)的物化成本,算法300中301上指示的IF-THEN-ELSE參數(shù)確定是否有早期調(diào)度或晚期調(diào)度將用于該級(jí)。因此,首先為1級(jí)確定調(diào)度。302中指示的SETCOST運(yùn)算為遞歸函數(shù),該遞歸函數(shù)通過(guò)將交換節(jié)點(diǎn)E的子節(jié)點(diǎn)作為輸入調(diào)用物化調(diào)度算法300,從而在下一個(gè)低級(jí)執(zhí)行該算法300。例如,如果查詢樹(shù)包括四個(gè)級(jí),且在4級(jí)上執(zhí)行該算法300,SETCOST運(yùn)算302用于調(diào)用算法300,從而在3級(jí)上執(zhí)行該算法300。303中指示的SETSCHEDULE運(yùn)算用于通過(guò)在(a)下一個(gè)低級(jí)的成本+早期物化成本和(b)下一個(gè)低級(jí)的成本+后期物化成本之間選擇最小成本為除了1級(jí)的級(jí)別設(shè)定調(diào)度(早期調(diào)度或后期調(diào)度)。然后,304中指示的運(yùn)算基于下一個(gè)低級(jí)(L–1)的成本和L級(jí)的物化成本設(shè)定L級(jí)上的成本。動(dòng)態(tài)編程算法300基于動(dòng)態(tài)編程原則。動(dòng)態(tài)編程為通過(guò)將復(fù)雜問(wèn)題分解為更簡(jiǎn)單的子問(wèn)題解決復(fù)雜問(wèn)題的技術(shù)。動(dòng)態(tài)編程通常用于數(shù)學(xué)、計(jì)算機(jī)科學(xué)、經(jīng)濟(jì)學(xué)和其他領(lǐng)域。頻繁使用動(dòng)態(tài)編程的復(fù)雜問(wèn)題的一個(gè)經(jīng)典例子是在地圖上的兩個(gè)城市或位置之間確定最短路徑,考慮了該區(qū)域可用的不同路線和中間點(diǎn)。為能夠使用動(dòng)態(tài)編程解決復(fù)雜問(wèn)題,該復(fù)雜問(wèn)題本身必須具備某種屬性。首先,該復(fù)雜問(wèn)題必須包括重疊的子問(wèn)題。其次,該復(fù)雜問(wèn)題必須具有最佳子結(jié)構(gòu)。如果一個(gè)問(wèn)題不具備這些屬性,那么使用動(dòng)態(tài)編程解決該問(wèn)題也許是不可能的或可能導(dǎo)致次佳的解決方案。物化算法300包括重疊的子問(wèn)題。例如,L級(jí)上的最佳調(diào)度是基于L-1級(jí)上的最佳調(diào)度確定的,而L-1級(jí)上的最佳調(diào)度是基于L-2級(jí)上的最佳調(diào)度確定的,依此類推。因此,可以認(rèn)為不同級(jí)的決定是重疊的。同樣地,物化算法300包括最佳子結(jié)構(gòu)。例如,算法300中的301上的IF-THEN-ELSE參數(shù)基于1級(jí)的物化成本為該級(jí)確定最佳調(diào)度,然后算法300基于下一個(gè)低級(jí)上的調(diào)度為較高級(jí)確定最佳調(diào)度。因此,基于最低級(jí)性能成本(即最快執(zhí)行時(shí)間),物化算法300包括最佳子結(jié)構(gòu)。已經(jīng)證明使用動(dòng)態(tài)編程得到了解決復(fù)雜問(wèn)題的全局的最佳方案。動(dòng)態(tài)編程與貪婪算法不同。貪婪算法可以查找解決子問(wèn)題的局部最佳方案,但是經(jīng)??梢缘贸鋈值拇渭呀鉀Q方案。例如,就兩個(gè)城市之間的最短路徑的問(wèn)題而論,貪婪算法可以得到解決一個(gè)交叉口的交通堵塞的局部最佳方案,但是該局部最佳方案可能只對(duì)于該交叉口是最佳的,當(dāng)在全局的解決方案中考慮該兩個(gè)城市之間的全部路線時(shí),可能會(huì)得到整體上的次佳路線。如上文所述,該算法300可以為平行查詢最佳化編譯過(guò)程的一部分,該算法將SQL語(yǔ)句轉(zhuǎn)換成并行執(zhí)行計(jì)劃。可以將一種針對(duì)該查詢文本至并行計(jì)劃轉(zhuǎn)換過(guò)程的用于錨定執(zhí)行特定列算法300的上下文的方法總結(jié)在圖4描述的下列方法中。圖4示出了本發(fā)明提供的平行查詢最佳化的示例方法。為便于說(shuō)明,方法400被描述為與圖3的算法300一起使用。然而,方法400可以與任何合適的算法一起使用以及在任何合適的系統(tǒng)中使用。該方法400可以由能夠進(jìn)行RDBMS操作的計(jì)算設(shè)備,如圖7(下文描述的)的計(jì)算設(shè)備700執(zhí)行,或由其他合適的設(shè)備或系統(tǒng)執(zhí)行。在步驟401中,將查詢文本轉(zhuǎn)換成語(yǔ)法樹(shù)。在步驟402中,檢測(cè)該語(yǔ)法樹(shù)的語(yǔ)義正確性。在步驟403中,將該語(yǔ)法樹(shù)轉(zhuǎn)換成關(guān)系運(yùn)算符(rel)的DAG,如本領(lǐng)域中已知的,可以將該DAG稱作RelDAG。在步驟404中,該RelDAG的葉子節(jié)點(diǎn)上注釋有聚類信息。在步驟405中,當(dāng)子Rel的輸出的聚類屬性與父Rel的輸入的聚類屬性不相容時(shí),通過(guò)該RelDAG的自底向上的橫斷操作,在該父Rel和該子Rel之間插入交換節(jié)點(diǎn)。將產(chǎn)生的DAG稱為平行RelDAG。該平行RelDAG可能與圖2所述的DAG200相似。在步驟406中,執(zhí)行特定列物化算法(例如,算法300),從而為各列計(jì)算最佳物化調(diào)度。在步驟407中,根據(jù)下述詳細(xì)說(shuō)明,將平行RelDAG轉(zhuǎn)換成函數(shù)調(diào)用和數(shù)據(jù)重整動(dòng)作的DAG。每個(gè)函數(shù)對(duì)應(yīng)兩個(gè)相鄰交換節(jié)點(diǎn)之間的平行RelDAG的分片。每個(gè)數(shù)據(jù)重整動(dòng)作對(duì)應(yīng)一個(gè)交換節(jié)點(diǎn)。將每個(gè)函數(shù)轉(zhuǎn)換成語(yǔ)句林,其中,語(yǔ)句代表邏輯BAT運(yùn)算符?;谄渥诱Z(yǔ)句產(chǎn)生的表達(dá)式,該邏輯BAT運(yùn)算符產(chǎn)生表達(dá)式。為產(chǎn)生表達(dá)式,該邏輯BAT運(yùn)算符對(duì)RelDAG分片進(jìn)行深度優(yōu)先的橫斷操作。針對(duì)每個(gè)Rel,針對(duì)Rel輸出的每個(gè)表達(dá)式,且針對(duì)源表格分區(qū)的每個(gè)組合,為所述表達(dá)式生成語(yǔ)句DAG。每個(gè)函數(shù)將其子交換節(jié)點(diǎn)輸出的列數(shù)據(jù)作為輸入。每個(gè)函數(shù)的輸出為該函數(shù)的頂部Rel輸出的表達(dá)式。該函數(shù)的輸出變成該函數(shù)的父交換節(jié)點(diǎn)的數(shù)據(jù)重整動(dòng)作的輸入。需要注意的是,行ID通常由Rel輸出。在該交換節(jié)點(diǎn)上,每個(gè)數(shù)據(jù)重整動(dòng)作重整待物化的列。通過(guò)行ID提取子交換節(jié)點(diǎn)沒(méi)有輸出的待物化的列。將每個(gè)數(shù)據(jù)重整動(dòng)作轉(zhuǎn)換成包含每個(gè)重整的列的一個(gè)語(yǔ)句DAG的語(yǔ)句林。所產(chǎn)生的語(yǔ)句林稱作平行語(yǔ)句林。圖5示出了平行語(yǔ)句林500的示例。然后,在步驟408中,根據(jù)平行語(yǔ)句林的深度優(yōu)先遍歷序列,生成調(diào)用函數(shù)和數(shù)據(jù)重整動(dòng)作的語(yǔ)句DAG。所產(chǎn)生的語(yǔ)句DAG稱作協(xié)調(diào)語(yǔ)句林。圖6示出了協(xié)調(diào)語(yǔ)句林600的示例。在步驟409中,將平行語(yǔ)句林和協(xié)調(diào)語(yǔ)句林轉(zhuǎn)換成一批BAT運(yùn)算符列表。每個(gè)列表對(duì)應(yīng)函數(shù)、數(shù)據(jù)重整動(dòng)作或協(xié)調(diào)程序。雖然圖4示出了用于平行查詢最佳化的方法400的一個(gè)例子,圖4可能出現(xiàn)各種變化。例如,雖然顯示為一系列步驟,圖4中的各步驟可以重疊、平行出現(xiàn)、以不同順序出現(xiàn)或出現(xiàn)任意次。圖7示出了用于執(zhí)行圖3的物化算法300或圖4的平行查詢最佳化方法400的計(jì)算設(shè)備700的例子。如圖7所示,該計(jì)算設(shè)備700包括計(jì)算塊703,其帶有處理塊705和系統(tǒng)存儲(chǔ)器707。該處理塊705可以為用于執(zhí)行軟件指令的任何類型的可編程電子設(shè)備,但通常為一個(gè)或多個(gè)微處理器。該系統(tǒng)存儲(chǔ)器707可以同時(shí)包括只讀存儲(chǔ)器(read-onlymemory,ROM)709和隨機(jī)存取存儲(chǔ)器(randomaccessmemory,RAM)711。如本領(lǐng)域的技術(shù)人員所理解的,該只讀存儲(chǔ)器709和該隨機(jī)存取存儲(chǔ)器711都可以存儲(chǔ)該處理塊705執(zhí)行的軟件指令。該處理塊705和該系統(tǒng)存儲(chǔ)器707通過(guò)總線713或交替的通信結(jié)構(gòu)直接或間接連接至一個(gè)或多個(gè)外部設(shè)備。例如,該處理塊705或該系統(tǒng)存儲(chǔ)器707可以直接或間接連接至一個(gè)或多個(gè)其他存儲(chǔ)設(shè)備715。該存儲(chǔ)設(shè)備715可以包括,例如,“硬”磁盤(pán)驅(qū)動(dòng)器、固體狀態(tài)磁盤(pán)驅(qū)動(dòng)器、光盤(pán)驅(qū)動(dòng)器和可移動(dòng)磁盤(pán)驅(qū)動(dòng)器等。該處理塊705和該系統(tǒng)存儲(chǔ)器707也可以直接或間接連接至一個(gè)或多個(gè)輸入設(shè)備717和一個(gè)或多個(gè)輸出設(shè)備719。該輸入設(shè)備717可以包括,例如,鍵盤(pán)、定點(diǎn)設(shè)備(如鼠標(biāo)、觸摸板、手寫(xiě)筆、軌跡球或操縱桿)、觸摸屏、掃描儀、攝像機(jī)和麥克風(fēng)等。該輸出設(shè)備719可以包括,例如,顯示設(shè)備、打印機(jī)和揚(yáng)聲器等。這樣的顯示設(shè)備可以用于顯示視頻圖像。由計(jì)算設(shè)備700的各個(gè)例子可知,外部設(shè)備715–719中的一個(gè)或多個(gè)中可以內(nèi)置計(jì)算塊703?;蛘撸獠吭O(shè)備715–719中的一個(gè)或多個(gè)可以在計(jì)算塊703的外殼的外面并通過(guò),例如,通用串行總線(UniversalSerialBus,USB)連接或數(shù)字視頻接口(digitalvisualinterface,DVI)連接與總線713相連接。隨著一些實(shí)施,計(jì)算塊703也可以直接或間接連接至一個(gè)或多個(gè)網(wǎng)絡(luò)接口卡(networkinterfacescards,NIC)721,從而與組成網(wǎng)絡(luò)的其他設(shè)備通信。根據(jù)一個(gè)或多個(gè)通信協(xié)議,如傳輸控制協(xié)議(transmissioncontrolprotocol,TCP)和互聯(lián)網(wǎng)協(xié)議(Internetprotocol,IP),網(wǎng)絡(luò)接口卡721將來(lái)自計(jì)算塊703的數(shù)據(jù)和控制信號(hào)轉(zhuǎn)化為網(wǎng)絡(luò)消息。并且,網(wǎng)絡(luò)接口卡721可以使用任何合適的連接代理(或代理的組合)連接到網(wǎng)絡(luò),包括例如無(wú)線收發(fā)器、調(diào)制解調(diào)器或以太網(wǎng)連接。需要理解的是,計(jì)算設(shè)備700只是作為一個(gè)例子說(shuō)明,而不是為了限定??梢酝ㄟ^(guò)一個(gè)或多個(gè)計(jì)算設(shè)備實(shí)現(xiàn)本發(fā)明各實(shí)施例,該一個(gè)或多個(gè)計(jì)算設(shè)備包括圖7所示的計(jì)算設(shè)備700的組件,或包括組件的交替組合,包括圖7未示出的組件。例如,可以通過(guò)多處理器計(jì)算機(jī)、部署在網(wǎng)絡(luò)中的多個(gè)單和/或多處理器計(jì)算機(jī)或二者的一些組合實(shí)現(xiàn)本發(fā)明各實(shí)施例。本發(fā)明描述的算法為查詢中每個(gè)交換運(yùn)算符上各列計(jì)算最佳物化調(diào)度。這優(yōu)于針對(duì)查詢中所有交換運(yùn)算符使用固定的早期物化或固定的后期物化的現(xiàn)有的物化調(diào)度算法??梢酝ㄟ^(guò)從上到下遍歷并行執(zhí)行圖,識(shí)別沒(méi)有調(diào)度的列來(lái)實(shí)現(xiàn)這里揭示的算法。對(duì)于每個(gè)這樣的列,動(dòng)態(tài)編程應(yīng)用于計(jì)算遞歸(或自下而上)方式中的物化調(diào)度。L-1級(jí)上的最小物化成本不會(huì)隨著大于或等于L級(jí)的級(jí)上的物化的選擇而變化。計(jì)算復(fù)雜性與并行執(zhí)行圖的高度和列數(shù)成線性比例關(guān)系。本發(fā)明的實(shí)施例已經(jīng)在模擬測(cè)試中證實(shí),將分布式查詢處理的互連帶寬要求平均減少10%–30%。假設(shè)節(jié)點(diǎn)間通信成本大約為總查詢處理成本的25%,這將分布式查詢處理的總成本減少2.5%–7.5%。在某些實(shí)施例中,一個(gè)或多個(gè)所述設(shè)備的部分或全部功能或流程由計(jì)算機(jī)可讀程序代碼構(gòu)成的且內(nèi)嵌于計(jì)算機(jī)可讀介質(zhì)中的計(jì)算機(jī)程序來(lái)實(shí)現(xiàn)或提供支持。術(shù)語(yǔ)計(jì)算機(jī)可讀程序代碼摂包括任意類型的計(jì)算機(jī)代碼,包括源代碼、目標(biāo)代碼以及可執(zhí)行代碼。術(shù)語(yǔ)“計(jì)算機(jī)可讀介質(zhì)”包括任何類型的可以被計(jì)算機(jī)訪問(wèn)的非易失性介質(zhì),比如,只讀存儲(chǔ)器(ROM)、隨機(jī)存取存儲(chǔ)器(RAM)、硬盤(pán)驅(qū)動(dòng)器、光盤(pán)(CD)、數(shù)字化視頻光盤(pán)(DVD)或者任何其他類型的存儲(chǔ)器。為本專利文檔中使用的特定術(shù)語(yǔ)和短語(yǔ)進(jìn)行定義是有幫助的。術(shù)語(yǔ)“包括”和“包含”以及它們的派生詞表示沒(méi)有限制的包括。術(shù)語(yǔ)“或者”是包容性的,意為和/或。短語(yǔ)“與……關(guān)聯(lián)”和“與其關(guān)聯(lián)”以及其派生的短語(yǔ)意味著包括,被包括在內(nèi)、與……互連、包含、被包含在內(nèi)、連接到或與……連接、耦合到或與……耦合、可與……通信、與……配合、交織、并列、接近、被綁定到或與……綁定、具有、具有……屬性,等等。雖然本發(fā)明就某些實(shí)施例和一般相關(guān)方法方面進(jìn)行了描述,但是對(duì)本領(lǐng)域技術(shù)人員而言,對(duì)實(shí)施例和方法的各種更改和變更將是顯而易見(jiàn)的。因此,示例實(shí)施例的上述描述不限定或約束本發(fā)明。正如以下權(quán)利要求定義,其它修改、替代以及變更也是可能的,而不偏離本發(fā)明的精神和范圍。當(dāng)前第1頁(yè)1 2 3 當(dāng)前第1頁(yè)1 2 3