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