專利名稱:Discosql結(jié)構(gòu)化查詢的分布式處理的制作方法
DISCOSQL:結(jié)構(gòu)化查詢的分布式處理
背景
因?yàn)橛?jì)算設(shè)備在全世界的互連性日益增加,這些計(jì)算設(shè)備所收集和生成的 數(shù)據(jù)以指數(shù)速率增長(zhǎng)。使用傳統(tǒng)方法處理這一數(shù)量日益增加的數(shù)據(jù)的時(shí)間因此 也將指數(shù)增長(zhǎng)。對(duì)于企業(yè)、教育和政府機(jī)構(gòu)以及提供或者消費(fèi)從數(shù)十億個(gè)單獨(dú) 數(shù)據(jù)點(diǎn)導(dǎo)出的服務(wù)的其它機(jī)構(gòu)而言,以高效的方式管理這樣大量的數(shù)據(jù)變得至 關(guān)緊要。因而,隨著所收集和生成的數(shù)據(jù)量增長(zhǎng),用于存儲(chǔ)、管理和操作這些 數(shù)據(jù)的基礎(chǔ)設(shè)施也需要擴(kuò)展。
傳統(tǒng)上,使用容錯(cuò)存儲(chǔ)系統(tǒng)和并行處理算法來(lái)高效地處理大量數(shù)據(jù)。容錯(cuò) 存儲(chǔ)系統(tǒng)使大量數(shù)據(jù)能夠跨數(shù)百或甚至數(shù)千廉價(jià)的存儲(chǔ)介質(zhì)來(lái)存儲(chǔ),而不管這 些存儲(chǔ)介質(zhì)中至少一個(gè)出現(xiàn)故障而使存儲(chǔ)在其上的數(shù)據(jù)無(wú)法訪問(wèn)的風(fēng)險(xiǎn)。并行 處理或者算法使大量數(shù)據(jù)能夠通過(guò)簡(jiǎn)單地跨廉價(jià)的處理設(shè)備諸如存在于現(xiàn)代 計(jì)算硬件中的多核微處理器來(lái)劃分必要的運(yùn)算量來(lái)得到高效的收集和處理。
然而,盡管容錯(cuò)存儲(chǔ)系統(tǒng)可按通用方式實(shí)現(xiàn),使得單個(gè)容錯(cuò)存儲(chǔ)算法可用 于存儲(chǔ)任何類型的信息,但并行處理算法按其性質(zhì)是專用于它們所尋求解決的 特定問(wèn)題或者它們所尋求完成的特定任務(wù)的。因而,搜索引擎可使用相同的容 錯(cuò)存儲(chǔ)機(jī)制作為氣象預(yù)報(bào)引擎,但明顯地它們各自依賴于極為不同的并行處理 算法。
概述
即使對(duì)于有經(jīng)驗(yàn)的程序設(shè)計(jì)者而言,生成執(zhí)行并行處理所需的計(jì)算指令也 是一項(xiàng)令人氣餒的任務(wù)。例如,為生成可利用并行處理的算法,程序設(shè)計(jì)者必 須考慮數(shù)量不斷變化的各獨(dú)立進(jìn)程,必須標(biāo)識(shí)和劃出其算法中可以并行執(zhí)行的 那些方面,以及必須慮及跨進(jìn)程邊界的信息通信,等等。因此,在一個(gè)實(shí)施例 中,普通的結(jié)構(gòu)化査詢命令可以翻譯成中間形式,從而允許簡(jiǎn)化從并行處理中 受益的算法的生成。該中間形式可充分利用可包含針對(duì)并行處理來(lái)優(yōu)化的、可 在沒(méi)有任何并行處理方法的高級(jí)知識(shí)的情況下使用的若干核心命令的現(xiàn)有技
5術(shù)。這些核心命令可基于在并行或分布式計(jì)算中普遍使用的操作,諸如將數(shù)據(jù)
劃分成各個(gè)集合或者"桶(bucket)"中、聚合并行輸出、并行地處理數(shù)據(jù)、
以及聯(lián)結(jié)兩個(gè)并行輸出。
在一替換實(shí)施例中,提供了支持將結(jié)構(gòu)化査詢包含在用諸如可提供針對(duì)并 行處理來(lái)優(yōu)化的核心命令的語(yǔ)言等較高級(jí)程序設(shè)計(jì)語(yǔ)言編寫的程序代碼中的 機(jī)制。該結(jié)構(gòu)化査詢最初可被翻譯成與該較高級(jí)程序設(shè)計(jì)語(yǔ)言兼容的形式,并 且這樣的翻譯可利用針對(duì)并行處理來(lái)優(yōu)化的核心命令。接著,可將原始地以該 較高級(jí)程序設(shè)計(jì)語(yǔ)言編程的代碼與該結(jié)構(gòu)化査詢的翻譯形式一起編譯成針對(duì) 并行處理來(lái)優(yōu)化的形式。
在另一替換實(shí)施例中,提供了支持將結(jié)構(gòu)化查詢包含在使用諸如可提供針 對(duì)并行處理來(lái)優(yōu)化的核心命令的腳本語(yǔ)言等腳本語(yǔ)言編寫的腳本中的機(jī)制。該 結(jié)構(gòu)化査詢最初可被翻譯成中間形式,諸如與一較高級(jí)程序設(shè)計(jì)語(yǔ)言兼容的形 式。接著,該結(jié)構(gòu)化査詢的翻譯形式可被編譯成針對(duì)并行處理來(lái)優(yōu)化的形式而 腳本可解釋成針對(duì)并行處理來(lái)優(yōu)化的形式。腳本的解釋和結(jié)構(gòu)化査詢的翻譯形
式的編譯兩者都可以引用用于生成針對(duì)并行處理來(lái)優(yōu)化的指令的等價(jià)庫(kù)。 提供本概述以便用簡(jiǎn)化形式介紹在下面的詳細(xì)描述中進(jìn)一步描述的一些
概念。本概述不旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在
用于限制所要求保護(hù)的主題的范圍。
通過(guò)參考附圖閱讀以下詳細(xì)描述,將使其它特征和優(yōu)點(diǎn)顯而易見(jiàn)。
附圖描述
結(jié)合附圖閱讀下面的詳細(xì)描述將最好地理解它們,附圖中
圖1是包括多個(gè)互連設(shè)備的示例性網(wǎng)絡(luò)的框圖,這些互連設(shè)備中的一些可 并行地執(zhí)行操作;
圖2是示例性計(jì)算設(shè)備的框圖; 圖3是"處理"核心命令的框圖; 圖4是"分發(fā)"核心命令的框圖; 圖5是"聚合"核心命令的框圖6是在"分發(fā)"核心命令之后執(zhí)行的"聚合"核心命令的框6圖7是"聯(lián)結(jié)"核心命令的框圖; 圖8是"叉積"核心命令的框圖; 圖9是示出結(jié)構(gòu)化査詢的翻譯的框圖;以及 圖IO是示出對(duì)嵌入式結(jié)構(gòu)化查詢的支持的框圖。
詳細(xì)描述
下面的描述涉及提供用于基于一個(gè)或多個(gè)結(jié)構(gòu)化査詢生成針對(duì)并行處理 來(lái)優(yōu)化的指令的機(jī)制。結(jié)構(gòu)化査詢可以基于所使用的結(jié)構(gòu)化查詢命令來(lái)翻譯成 中間形式。在一個(gè)實(shí)施例中,中間形式可以包括高級(jí)程序設(shè)計(jì)語(yǔ)言中的指令或 者與之兼容,使得中間形式的后續(xù)編譯可以充分利用預(yù)先存在的用于生成針對(duì) 并行處理來(lái)優(yōu)化的指令的機(jī)制。獨(dú)立的結(jié)構(gòu)化查詢首先可翻譯成中間形式且隨 后可編譯成可并行地跨多個(gè)進(jìn)程或處理器執(zhí)行的較低級(jí)的計(jì)算機(jī)可執(zhí)行指令。
在一替換實(shí)施例中,結(jié)構(gòu)化查詢可以與用高級(jí)程序設(shè)計(jì)語(yǔ)言或者用腳本語(yǔ) 言編寫的命令和指令合并。與高級(jí)程序設(shè)計(jì)語(yǔ)言指令合并的結(jié)構(gòu)化査詢首先可 翻譯成與高級(jí)程序設(shè)計(jì)語(yǔ)言兼容或者甚至與之等價(jià)的形式,且隨后經(jīng)翻譯的結(jié) 構(gòu)化查詢和其它高級(jí)程序設(shè)計(jì)語(yǔ)言指令可編譯成針對(duì)并行處理來(lái)優(yōu)化的較低 級(jí)計(jì)算機(jī)可執(zhí)行指令。相反,合并到腳本中的結(jié)構(gòu)化査詢首先可翻譯成與高級(jí) 程序設(shè)計(jì)語(yǔ)言兼容的形式,且隨后經(jīng)翻譯的結(jié)構(gòu)化査詢可編譯成針對(duì)并行處理 來(lái)優(yōu)化的較低級(jí)計(jì)算機(jī)可執(zhí)行指令,同時(shí)支持腳本可解釋成針對(duì)并行處理來(lái)優(yōu) 化的較低級(jí)計(jì)算機(jī)可執(zhí)行指令。在一個(gè)實(shí)施例中,結(jié)構(gòu)化查詢的翻譯形式的解 釋和支持腳本的編譯都可引用等價(jià)的較低級(jí)計(jì)算機(jī)可執(zhí)行指令庫(kù)。
在此描述的技術(shù)集中于但非限制于基于結(jié)構(gòu)化査詢語(yǔ)言(SQL)語(yǔ)句生成 針對(duì)并行處理來(lái)優(yōu)化的指令。然而,下面描述的實(shí)施例都不使用在用于結(jié)構(gòu)化
査詢的其它計(jì)算機(jī)語(yǔ)言中不存在的SQL的任何方面。因此,盡管下面提供的 特定示是使用SQL示出的,但在此提供的描述不旨在受此限制。同樣,盡管 在下面提供的特定示例示出將SQL語(yǔ)句翻譯成CW吾句,但所依賴的0#計(jì)算機(jī) 程序設(shè)計(jì)語(yǔ)言的任何方面都可在諸如Visual Basic⑧或0++等大量其它較高級(jí) 計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言中找到。因而,僅出于說(shuō)明目的而對(duì)C弁的使用不意味著 將下面的描述限制于任何特定的較高級(jí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。
7轉(zhuǎn)到圖l,示出示例性網(wǎng)絡(luò)系統(tǒng)99,它包括網(wǎng)絡(luò)90本身、客戶機(jī)計(jì)算設(shè) 備50、文件系統(tǒng)41、以及諸如服務(wù)器計(jì)算設(shè)備10、 20和30等多個(gè)服務(wù)器計(jì) 算設(shè)備,它們都連接到網(wǎng)絡(luò)90。文件系統(tǒng)41可以在客戶機(jī)計(jì)算設(shè)備50、服務(wù) 器計(jì)算設(shè)備IO、 20和30之一或者某個(gè)其它計(jì)算設(shè)備的本地,或者它可以分布 在諸如計(jì)算設(shè)備10、 20、 30或50等多個(gè)計(jì)算設(shè)備之間。文件系統(tǒng)41可以包 括可用作SQL語(yǔ)句60所針對(duì)的輸入數(shù)據(jù)40的一個(gè)或多個(gè)文件。更具體地, SQL語(yǔ)句60可以包含用于對(duì)輸入數(shù)據(jù)40進(jìn)行排序、分類或其它處理的SQL 命令。
在一個(gè)實(shí)施例中,SQL語(yǔ)句60可以由翻譯器70處理,翻譯器70可以產(chǎn) 生在圖1中由程序80表示的中間形式。程序80可以包含計(jì)算機(jī)編程命令,包 括針對(duì)并行處理來(lái)優(yōu)化的核心命令。在編譯后,程序80的命令可以產(chǎn)生一個(gè) 或多個(gè)可以用SQL語(yǔ)句60所指定的方式與諸如輸入數(shù)據(jù)40等數(shù)據(jù)進(jìn)行交互 的計(jì)算機(jī)可執(zhí)行程序。盡管在圖1中SQL語(yǔ)句60被示為獨(dú)立元素,但在一替 換實(shí)施例中,SQL語(yǔ)句被合并到用較高級(jí)程序設(shè)計(jì)語(yǔ)言編寫的程序代碼中,或 者合并到用腳本語(yǔ)言編寫的腳本中。在任一情形中,SQL語(yǔ)句60仍可由翻譯 器70翻譯成中間形式,諸如程序80。然而在這些情形中,所得到的計(jì)算機(jī)可 執(zhí)行程序可以包含從程序80的編譯和宿主程序代碼的編譯或宿主腳本的解釋 而導(dǎo)出的指令。
通過(guò)針對(duì)并行處理進(jìn)行優(yōu)化,程序80可以在編譯后執(zhí)行至少部分地由 SQL語(yǔ)句60指定的數(shù)據(jù)操縱,這比由單個(gè)進(jìn)程執(zhí)行該處理的情況快了若干數(shù) 量級(jí)。例如,如果輸入數(shù)據(jù)40包含數(shù)百萬(wàn)億字節(jié)的數(shù)據(jù),則使用單個(gè)計(jì)算設(shè) 備處理該數(shù)據(jù)要花費(fèi)數(shù)日甚至數(shù)星期才能完成。為在合理的時(shí)間內(nèi)處理這樣大 小的數(shù)據(jù),多個(gè)計(jì)算設(shè)備(其每一個(gè)可以主存一個(gè)或多個(gè)獨(dú)立進(jìn)程)可以獨(dú)立 地并且并行地處理輸入數(shù)據(jù)40的某個(gè)部分,從而以與并行操作的獨(dú)立進(jìn)程的 數(shù)量成比例的因子來(lái)減少了處理時(shí)間。
現(xiàn)代服務(wù)器計(jì)算設(shè)備通常包括能夠執(zhí)行多個(gè)同時(shí)進(jìn)程的多個(gè)處理器。此 外,虛擬機(jī)技術(shù)通常使這樣的服務(wù)器計(jì)算設(shè)備能夠并行地執(zhí)行比所安裝處理器 的物理數(shù)量更多的進(jìn)程。然而,僅為了簡(jiǎn)化說(shuō)明和描述,并且不是因?yàn)樗枋?的機(jī)制中有任何固有限制,下面的描述將按照服務(wù)器計(jì)算設(shè)備10、 20和30包括能夠同時(shí)執(zhí)行單個(gè)進(jìn)程的單個(gè)處理器來(lái)進(jìn)行。
盡管并非所需,但下面的描述將在由一個(gè)或多個(gè)計(jì)算設(shè)備執(zhí)行的計(jì)算機(jī)可 執(zhí)行指令(諸如程序模塊)的一般上下文中進(jìn)行。更具體地,除非另有說(shuō)明, 否則這些描述將參考由一個(gè)或多個(gè)計(jì)算設(shè)備或外圍設(shè)備執(zhí)行的動(dòng)作和操作的 符號(hào)表示。因此,可以理解,有時(shí)稱為由計(jì)算機(jī)執(zhí)行的這些動(dòng)作和操作包括處 理單元對(duì)表示結(jié)構(gòu)化形式的數(shù)據(jù)的電信號(hào)的操縱。該操縱變換數(shù)據(jù)或者在存儲(chǔ) 器的單元中維護(hù)該數(shù)據(jù),這用本領(lǐng)域技術(shù)人員所熟知的方式重新配置或者以其 它方式改變計(jì)算設(shè)備或者外圍設(shè)備的操作。在其中維護(hù)數(shù)據(jù)的數(shù)據(jù)結(jié)構(gòu)是具有 由該數(shù)據(jù)的格式所定義的特定屬性的物理單元。
一般而言,程序模塊包括執(zhí)行特定任務(wù)或者實(shí)現(xiàn)特定抽象數(shù)據(jù)類型的例 程、程序、對(duì)象、組件、數(shù)據(jù)結(jié)構(gòu)等等。此外,本領(lǐng)域技術(shù)人員將會(huì)了解,計(jì) 算設(shè)備不必限于常規(guī)的個(gè)人計(jì)算機(jī),并且包括其它計(jì)算配置,包括手持式設(shè)備、 多處理器系統(tǒng)、基于微處理器或者可編程消費(fèi)電子產(chǎn)品、網(wǎng)絡(luò)PC、小型計(jì)算 機(jī)、大型計(jì)算機(jī)等等。同樣,計(jì)算設(shè)備不必限于獨(dú)立的計(jì)算設(shè)備,因?yàn)檫@些機(jī) 制也可在其中任務(wù)由通過(guò)通信網(wǎng)絡(luò)鏈接的遠(yuǎn)程處理設(shè)備來(lái)執(zhí)行的分布式計(jì)算 環(huán)境中實(shí)踐。在分布式計(jì)算環(huán)境中,程序模塊可以位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ) 設(shè)備中。
參考圖2,示出示例性計(jì)算設(shè)備100。計(jì)算設(shè)備100可以表示圖1的計(jì)算 設(shè)備10、 20、 30或50中的任一個(gè)。示例性計(jì)算設(shè)備100可包括但不限于一個(gè) 或多個(gè)中央處理單元(CPU) 120、系統(tǒng)存儲(chǔ)器130、和將包含系統(tǒng)存儲(chǔ)器在內(nèi) 的各種系統(tǒng)組件耦合到處理單元120的系統(tǒng)總線121。系統(tǒng)總線121可以是若 干總線結(jié)構(gòu)中的任一種,包括存儲(chǔ)器總線或存儲(chǔ)器控制器、外圍總線、和使用 各種總線體系結(jié)構(gòu)中的任一種的局部總線。
計(jì)算設(shè)備100 —般還包括計(jì)算機(jī)可讀介質(zhì),計(jì)算機(jī)可讀介質(zhì)可包括可由計(jì) 算設(shè)備100訪問(wèn)的任何可用介質(zhì)并且包括易失性和非易性介質(zhì)以及可移動(dòng)和不 可移動(dòng)介質(zhì)。作為示例而非限制,計(jì)算機(jī)可讀介質(zhì)可包括計(jì)算機(jī)存儲(chǔ)介質(zhì)和通 信介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括以存儲(chǔ)諸如計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模 塊或其它數(shù)據(jù)等信息的任何方法或技術(shù)實(shí)現(xiàn)的介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不 限于RAM、 ROM、 EEPROM、閃存或其它存儲(chǔ)器技術(shù),CD-ROM、數(shù)字多功能盤(DVD)或其它光盤存儲(chǔ),磁盒、磁帶、磁盤存儲(chǔ)或其它磁存儲(chǔ)設(shè)備,或
者可用于存儲(chǔ)所需信息并且可由計(jì)算設(shè)備ioo訪問(wèn)的任何其它介質(zhì)。通信介質(zhì)
一般以諸如載波或者其它傳輸機(jī)制等已調(diào)制數(shù)據(jù)信號(hào)來(lái)體現(xiàn)計(jì)算機(jī)可讀指令、 數(shù)據(jù)結(jié)構(gòu)、程序模塊或其它數(shù)據(jù),并且包括任何信息傳送介質(zhì)。作為示例而非 限制,通信介質(zhì)包括有線介質(zhì),諸如有線網(wǎng)絡(luò)或直接線連接,以及無(wú)線介質(zhì),
諸如聲學(xué)、RF、紅外和其它無(wú)線介質(zhì)。任何上述各項(xiàng)的組合也應(yīng)當(dāng)包括在計(jì)算 機(jī)可讀介質(zhì)的范圍內(nèi)。
系統(tǒng)存儲(chǔ)器130包括易失性和/或非易失性存儲(chǔ)器形式的計(jì)算機(jī)存儲(chǔ)介質(zhì), 諸如只讀存儲(chǔ)器(ROM) 131和隨機(jī)存取存儲(chǔ)器(RAM) 132?;据斎?輸出 系統(tǒng)133 (BIOS)包含在諸如啟動(dòng)時(shí)幫助在計(jì)算設(shè)備100內(nèi)的元件之間傳送信 息的基本例程,它通常存儲(chǔ)在ROM131中。RAM132—般包含可由處理單元 120立即訪問(wèn)和/或當(dāng)前正在操作的數(shù)據(jù)和/或程序模塊。作為示例而非限制, 圖2示出了操作系統(tǒng)134、其它程序模塊135和程序數(shù)據(jù)136。
計(jì)算設(shè)備100還可包括其它可移動(dòng)/不可移動(dòng)、易失性/非易失性計(jì)算機(jī)存 儲(chǔ)介質(zhì)。僅作為示例,圖2示出了讀寫不可移動(dòng)、非易失性磁介質(zhì)的硬盤驅(qū)動(dòng) 器141。可與該示例性計(jì)算設(shè)備一起使用的其它可移動(dòng)/不可移動(dòng)、易失性/非 易失性計(jì)算機(jī)存儲(chǔ)介質(zhì)包括但不限于,磁帶盒、閃存卡、數(shù)字多功能盤、數(shù)字 錄像帶、固態(tài)RAM、固態(tài)ROM等等。硬盤驅(qū)動(dòng)器141通常通過(guò)不可移動(dòng)存 儲(chǔ)器接口,諸如接口 140連接到系統(tǒng)總線121。
上面討論且在圖2所示出的驅(qū)動(dòng)器及其相關(guān)聯(lián)的計(jì)算機(jī)存儲(chǔ)介質(zhì)為計(jì)算 設(shè)備100提供對(duì)計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序模塊和其它數(shù)據(jù)的存儲(chǔ)。例 如在圖2中,硬盤驅(qū)動(dòng)器141被示為存儲(chǔ)操作系統(tǒng)144、其它程序模塊145和 程序數(shù)據(jù)146。注意這些組件可以與操作系統(tǒng)134、其它程序模塊135和程序 數(shù)據(jù)136相同,也可以不同。操作系統(tǒng)144、其它程序模塊145和程序數(shù)據(jù)146 在此給出不同的標(biāo)號(hào)以說(shuō)明至少它們是不同的副本。
與下面的描述相關(guān),計(jì)算設(shè)備100可在使用到一個(gè)或多個(gè)遠(yuǎn)程計(jì)算機(jī)的邏 輯連接的網(wǎng)絡(luò)化環(huán)境中運(yùn)行。為了簡(jiǎn)化說(shuō)明,計(jì)算設(shè)備100在圖2中示為連接 到不限于任何特定網(wǎng)絡(luò)或連網(wǎng)協(xié)議的網(wǎng)絡(luò)90。圖2所示的邏輯連接是一般網(wǎng)絡(luò) 連接171,它可以是局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)或其它網(wǎng)絡(luò)。計(jì)算設(shè)備100通過(guò)網(wǎng)絡(luò)接口或適配器170連接到一般網(wǎng)絡(luò)連接171,而網(wǎng)絡(luò)接口或適配 器170進(jìn)而連接到系統(tǒng)總線121。在網(wǎng)絡(luò)化環(huán)境中,相對(duì)于計(jì)算設(shè)備100所描 繪的程序模塊或者其部分或外圍設(shè)備可以存儲(chǔ)在通過(guò)一般網(wǎng)絡(luò)連接171在通信 上耦合到計(jì)算設(shè)備100的一個(gè)或多個(gè)其它計(jì)算設(shè)備的存儲(chǔ)器中??梢粤私?,所 示的網(wǎng)絡(luò)連接是示例性的并且可以使用在計(jì)算設(shè)備之間建立通信鏈路的其它 手段。
然而,無(wú)論使用什么特定的網(wǎng)絡(luò)連接和通信協(xié)議,只要計(jì)算設(shè)備50可以 用適當(dāng)?shù)姆绞脚c服務(wù)器計(jì)算設(shè)備IO、 20和30通信,則該計(jì)算設(shè)備可以使用這 些服務(wù)器計(jì)算設(shè)備來(lái)并行地執(zhí)行可完成針對(duì)輸入數(shù)據(jù)40的功能的程序80的編 譯版本。為使程序80的創(chuàng)建更容易,可以提供可像較高級(jí)程序設(shè)計(jì)語(yǔ)言的任 何其它命令一樣使用的核心命令,除了這些命令并非生成用于在單個(gè)處理器上 執(zhí)行的指令而是改為生成為在多個(gè)并行處理器上正確執(zhí)行所需的適當(dāng)指令以 外。
圖1的翻譯器70可以在將SQL語(yǔ)句60的SQL命令變換成程序80時(shí)利 用這些核心命令。具體地,程序80可以包括較高級(jí)計(jì)算機(jī)編程指令,包括下 面詳細(xì)描述的核心命令中的一個(gè)或多個(gè)。此外,程序80的后續(xù)編譯可以利用 與支持程序設(shè)計(jì)者直接使用的核心命令的庫(kù)相同的庫(kù)。
為描述對(duì)用于并行地執(zhí)行結(jié)構(gòu)化査詢的機(jī)制的提供,下面的描述最初以對(duì) 可用于生成程序80的核心命令的描述來(lái)進(jìn)行。后續(xù)描述隨后將集中于使用這 些核心命令作為用于生成針對(duì)并行處理來(lái)優(yōu)化的計(jì)算機(jī)可執(zhí)行指令的過(guò)程的 一部分。
轉(zhuǎn)到這些核心命令,一個(gè)這樣的核心命令可以使程序設(shè)計(jì)者能夠并行地將 一個(gè)函數(shù)應(yīng)用于數(shù)據(jù),從而與串行執(zhí)行該函數(shù)相比有可能顯著地減少執(zhí)行該函 數(shù)所需的時(shí)間。例如,如果程序設(shè)計(jì)者想要從幾十億個(gè)網(wǎng)頁(yè)的集合中標(biāo)識(shí)出使 用某個(gè)特定詞語(yǔ)的每個(gè)網(wǎng)頁(yè),則程序設(shè)計(jì)者所編寫的搜索函數(shù)可由數(shù)千個(gè)并行 操作的獨(dú)立處理器來(lái)執(zhí)行,每一獨(dú)立處理器使用該函數(shù)搜索僅僅幾千個(gè)網(wǎng)頁(yè)。 因而搜索這些網(wǎng)頁(yè)的速度將比單個(gè)處理器由其自己執(zhí)行同一函數(shù)來(lái)搜索所有 幾十億個(gè)網(wǎng)頁(yè)的情況要快幾千倍。
轉(zhuǎn)到圖3,參考功能圖200示出了這樣一個(gè)核心命令,其在下文稱為"處理"命令。在程序80內(nèi)使用處理命令210可以允許執(zhí)行參考服務(wù)器計(jì)算設(shè)備 10、 20和30所示出的操作。具體地,程序設(shè)計(jì)者可以指定要作為輸入來(lái)提供 給處理命令210的函數(shù)。處理命令210隨后可跨多個(gè)進(jìn)程來(lái)并行地應(yīng)用該函數(shù)。 例如,如圖3所示,如果程序設(shè)計(jì)者所指定的函數(shù)相對(duì)于輸入數(shù)據(jù)40執(zhí)行某 個(gè)動(dòng)作,則可跨服務(wù)器計(jì)算設(shè)備10、 20和30來(lái)將該數(shù)據(jù)劃分成數(shù)據(jù)段230、 240和250,隨后所指定的函數(shù)220可如圖所示地并行地操作每個(gè)數(shù)據(jù)段。
因?yàn)樘幚砗诵拿?10向程序設(shè)計(jì)者提供并行地處理可由程序設(shè)計(jì)者自 己編寫來(lái)適合其特定需求的各種各樣的函數(shù)的能力,所以處理命令是非常通用 的。然而,特別是在數(shù)據(jù)交互領(lǐng)域內(nèi)存在若干常用函數(shù),可以將這些函數(shù)提供 給程序設(shè)計(jì)者以避免迫使每個(gè)程序設(shè)計(jì)者在不必進(jìn)行定制的時(shí)候獨(dú)立地編寫 他們自己的版本。因而,設(shè)想了其它一些核心函數(shù),它們向程序設(shè)計(jì)者提供了 對(duì)較為普遍使用的數(shù)據(jù)處理函數(shù)的簡(jiǎn)化訪問(wèn)。
一個(gè)這樣的核心命令可以允許根據(jù)可由程序設(shè)計(jì)者指定的一個(gè)或多個(gè)準(zhǔn) 則來(lái)并行地將多個(gè)數(shù)據(jù)段劃分成子部分。這樣一個(gè)核心命令(下文中稱為"分 發(fā)"命令)由圖4的功能圖300示出。如圖所示,在程序80中與一個(gè)由圖4 中的變量"N"表示的指定值一起使用分發(fā)命令310,使程序設(shè)計(jì)者能夠?qū)⒏?個(gè)數(shù)據(jù)部分并行地劃分成由值"N"所指定的多個(gè)子部分。例如,輸入數(shù)據(jù)40 可以在并行操作的多個(gè)不同進(jìn)程之間分發(fā),諸如由獨(dú)立的服務(wù)器計(jì)算設(shè)備10、 20和30所表示的進(jìn)程。每個(gè)分發(fā)的數(shù)據(jù)230、 240和250隨后可分別由服務(wù)器 計(jì)算設(shè)備10、 20和30并行地劃分成子部分320、 330和340。
除了將數(shù)據(jù)劃分成子部分之外,數(shù)據(jù)處理領(lǐng)域中常見(jiàn)的另一個(gè)操作是將兩 個(gè)或多個(gè)獨(dú)立的數(shù)據(jù)集合聚合成單個(gè)數(shù)據(jù)集合。因而,可以向編程者提供對(duì)普 遍使用的命令的簡(jiǎn)化訪問(wèn)的另一個(gè)核心命令是"聚合"核心命令,在一個(gè)實(shí)施 例中該核心命令的操作由圖5的功能圖400示出。如圖所示,聚合命令410在 被用于程序80中時(shí)可以使各自分別有權(quán)訪問(wèn)數(shù)據(jù)段230、 240和250的服務(wù)器 計(jì)算設(shè)備10、 20和30將這些數(shù)據(jù)段中的每一個(gè)組合到單個(gè)數(shù)據(jù)集合420中。
在一替換實(shí)施例中,當(dāng)與先前描述的分發(fā)命令310結(jié)合使用時(shí),聚合命令 410可以執(zhí)行略有不同的默認(rèn)函數(shù)。轉(zhuǎn)到圖6,所示的功能圖500示出在一起 使用分發(fā)和聚合命令時(shí)它們的操作。具體地,在程序80中組合分發(fā)和聚合命令510可以使由服務(wù)器計(jì)算設(shè)備10、 20和30分別并行處理的數(shù)據(jù)段230、 240 和250在最初分別被劃分成子部分320、 330和340,然后分別被聚合到數(shù)據(jù)集 合520、 530和540中。具體地,通過(guò)將子部分320的第一子部分與子部分330 和340的第一子部分聚合到第一聚合數(shù)據(jù)集合520中、通過(guò)將子部分320的第 二子部分與子部分330和340的第二子部分聚合到第二聚合數(shù)據(jù)集合530中、 并通過(guò)以此方式聚合子部分320、 330和340的所有子部分來(lái)聚合子部分320、 330和340。
如本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到的,圖6所示的分發(fā)和聚合命令的組合510 是經(jīng)常使用的映射命令,可通過(guò)它們根據(jù)某個(gè)指定準(zhǔn)則來(lái)分類其各部分為數(shù)據(jù) 段230、 240和250的數(shù)據(jù)集合。因此,在一個(gè)實(shí)施例中,分發(fā)和聚合核心命 令的組合可以通過(guò)根據(jù)圖6的功能圖500執(zhí)行的映射命令來(lái)抽象。
盡管聚合命令410可以組合來(lái)自由單個(gè)在前命令所輸出的多個(gè)數(shù)據(jù)集合
的或存儲(chǔ)在文件中的數(shù)據(jù),但在另一個(gè)實(shí)施例中,可以提供核心命令來(lái)用于組 合來(lái)自其中每個(gè)集合都是一個(gè)在前命令的輸出的多個(gè)集合的數(shù)據(jù)。因而,這樣
的核心命令將能夠組合兩個(gè)或多個(gè)在前命令的輸出。
圖7的功能圖600所示出的一個(gè)這樣的核心命令是"聯(lián)結(jié)"核心命令。通 過(guò)在程序80中使用聯(lián)結(jié)命令610,程序設(shè)計(jì)者可使先前執(zhí)行的并由輸出620、 630和640表示的第一操作的輸出與也是在先前執(zhí)行的并由輸出625、 635和 645表示的第二操作的輸出組合起來(lái)。更具體地,將被稱為"左"和"右"的 這兩個(gè)在前操作的結(jié)果相組合,使得第一位的"左"結(jié)果與第一位的"右"結(jié) 果組合起來(lái),第二位的"左"與第二位的"右"結(jié)果組合起來(lái),并且以該方式 繼續(xù)直到組合了所有結(jié)果為止。例如,如圖7所示,第一操作的第一位的輸出 630與第二操作的第一位的輸出625組合起來(lái),即使輸出630是由與輸出625 的計(jì)算設(shè)備不相同的計(jì)算設(shè)備所生成的。同樣,第一操作的第二位的輸出620 與第二操作的第二位的輸出645組合起來(lái)。因?yàn)檫@種配對(duì),在一個(gè)實(shí)施例中, 聯(lián)結(jié)命令可應(yīng)用于具有相同數(shù)量的結(jié)果的兩個(gè)在前操作。
可以提供來(lái)用于組合兩個(gè)在前命令的輸出的另一個(gè)核心命令是"叉積"核 心命令,該命令組合第一命令輸出的每個(gè)數(shù)據(jù)段與第二命令輸出的每個(gè)數(shù)據(jù) 段。更具體地,第一命令的第一位的輸出可與第二命令的第一位的輸出、第二
13命令的第二位的輸出以及實(shí)際上與第二命令的每一個(gè)輸出組合起來(lái)。同樣,第 一命令的第二位的輸出可以與第二命令的每個(gè)輸出組合起來(lái),對(duì)于第一命令的 所有輸出都繼續(xù)這樣的組合。因而,由叉積核心命令產(chǎn)生的輸出段可以等于第 一命令的輸出的數(shù)量與第二命令的輸出的數(shù)量的乘積。因?yàn)橛刹娣e核心命令執(zhí) 行的組合的性質(zhì),第一和第二命令的輸出的數(shù)量對(duì)于叉積命令不必相等就能正 確地操作。
轉(zhuǎn)到圖8,功能圖700示出叉積命令710的示例性操作。具體地,如在圖 7中所示,第一操作可生成輸出620、 630和640,而第二操作可生成輸出625、 635和645。然而,如在圖8所示,叉積命令710可使得第一操作的第一輸出 630不僅與第二操作的第一輸出625組合起來(lái),還如圖所示,與第二操作的第 二輸出645以及第二操作的由框635概括表示的所有其它輸出組合起來(lái)。同樣, 如圖所示,第一操作的第二輸出620可與第二操作的第一輸出625、第二操作 的第二輸出645以及第二操作的所有其它輸出635組合起來(lái)。因此,叉積命令 710分別跨并行執(zhí)行叉積命令的各處理器(諸如服務(wù)器計(jì)算設(shè)備10、 20和30) 產(chǎn)生多個(gè)輸出720、多個(gè)輸出730和多個(gè)輸出740。
除了上述核心命令之外,還可提供對(duì)核心命令的抽象以允許更容易地訪問(wèn) 核心命令的經(jīng)常使用的版本。 一個(gè)這樣的抽象是上述映射命令,它抽象了分發(fā) 和聚合核心命令的組合。另一個(gè)抽象是"分類"命令,它可以是專門用于并行 地應(yīng)用分類函數(shù)的處理核心命令210。這樣一個(gè)分類命令鏡像上述處理核心命 令210,除了分類命令專門將分類函數(shù)并行地應(yīng)用于數(shù)據(jù)段之外。核心命令的 另一個(gè)抽象是"合并"命令,它是專門用于聚合在前操作的分類結(jié)果的聚合核 心命令410。具體地,聚合核心命令410的另一個(gè)抽象是"輸出"命令,它可 以將在前操作的結(jié)果聚合到文件或者其它輸出目的地中。
上述核心命令可以使程序設(shè)計(jì)者能夠生成可被編譯成針對(duì)跨多個(gè)處理器 或進(jìn)程并行執(zhí)行而優(yōu)化的形式的程序,諸如程序80。然而,在許多情形中,需 要對(duì)例如輸入數(shù)據(jù)40執(zhí)行的數(shù)據(jù)處理可以更高效地按照結(jié)構(gòu)化查詢來(lái)表示, 如使用諸如SQL這樣的語(yǔ)言生成的結(jié)構(gòu)化查詢。在這些情形中,不需要對(duì)程 序80進(jìn)行編程,而是翻譯器70可以自動(dòng)地從諸如SQL語(yǔ)句60等結(jié)構(gòu)化査詢 中生成程序80。因此,翻譯器70可以通過(guò)充分利用支持上述核心命令的較高級(jí)程序設(shè)計(jì)語(yǔ)言來(lái)提供對(duì)SQL語(yǔ)句60的并行處理以及其伴隨而來(lái)的所有好 處。
轉(zhuǎn)到圖9,所示的功能圖800包括SQL語(yǔ)句890、程序810、翻譯器70 和可由程序810的編譯版本執(zhí)行的操作的功能圖示。圖9所示的示例性SQL 語(yǔ)句890包括用于從在該示例中名為"sample.txt"的文件820獲得信息的SQL 命令。具體地,如熟悉SQL的技術(shù)人員所知道的,示例性SQL語(yǔ)句890請(qǐng)求 在輸入文件820中出現(xiàn)超過(guò)五次的所有"token (標(biāo)記)"的列表。同樣,如前 所示,如果輸入文件820是若干萬(wàn)億字節(jié)的大小,這樣的請(qǐng)求在由單個(gè)處理器 執(zhí)行的情況下需要花費(fèi)若干小時(shí)或更多。
可在諸如圖9的SQL語(yǔ)句890等SQL語(yǔ)句中使用的一個(gè)非標(biāo)準(zhǔn)的SQL 命令是"SCHEMA (模式)"關(guān)鍵字。如將示出的,因?yàn)榉g器70可利用上 述核心命令,包含諸如分類、聯(lián)結(jié)等各種比較操作,所以存在對(duì)有意義地解釋 由SQL語(yǔ)句890所引用的數(shù)據(jù)(諸如輸入數(shù)據(jù)820)的數(shù)據(jù)類型的需求。因此, 可提供SCHEMA關(guān)鍵字來(lái)定義在輸入數(shù)據(jù)820中出現(xiàn)的數(shù)據(jù)類型。例如,在 所示的示例SQL語(yǔ)句890中,SCHEMA關(guān)鍵字可伴隨有表示輸入數(shù)據(jù)802包 含數(shù)據(jù)的單個(gè)部分或"列"并且在該部分內(nèi)的數(shù)據(jù)可被稱為"token"的信息。 另外,作為SCHEMA關(guān)鍵字的一部分所呈現(xiàn)的信息還可表示"token"數(shù)據(jù)是 "string (字符串)"類型的。這樣的信息可允許更準(zhǔn)確地處理數(shù)據(jù),因?yàn)槿绫?領(lǐng)域的技術(shù)人員所知道的,數(shù)據(jù)類型直接影響解釋,特別是數(shù)據(jù)的比較。例如, 條目"7"和"007"在它們作為"integer (整數(shù))"數(shù)據(jù)存儲(chǔ)的情況下可以被 認(rèn)為是等同的,而在它們作為"string"數(shù)據(jù)存儲(chǔ)時(shí)則被認(rèn)為是不同的。
翻譯器70可接收其中包括諸如SCHEMA關(guān)鍵字等定制關(guān)鍵字的SQL語(yǔ) 句890來(lái)作為輸入,并且可以生成在功能上等價(jià)的程序810,從而充分利用上 述核心命令中的一個(gè)或多個(gè)來(lái)使該SQL語(yǔ)句所請(qǐng)求的功能能夠被高效地并行 執(zhí)行。例如,在圖9所示的示例中,程序810可以由翻譯器70生成以在最初 引用一個(gè)稱為"DiscoMan"的管理器(manager)。該管理器可提供接受上述 核心命令和聚合的智能,以諸如程序810等程序指定的方式將它們鏈接在一起, 并且以已知但復(fù)雜的方式來(lái)跨多個(gè)進(jìn)程分發(fā)它們。通過(guò)在程序810中包含對(duì)該 管理器的引用,翻譯器70可以通過(guò)利用該管理器所支持的上述核心命令中的一個(gè)或多個(gè)以從SQL語(yǔ)句890生成程序810來(lái)利用該管理器生成可并行執(zhí)行 的低級(jí)計(jì)算機(jī)可執(zhí)行指令。
在引用該管理器之后,由翻譯器70根據(jù)SQL語(yǔ)句890生成的程序810可 指定映射(Map)命令812,如前所示,該命令是分發(fā)和聚合核心命令的聚合。 因此,該管理器可以響應(yīng)于映射命令812生成適當(dāng)?shù)闹噶?,以使服?wù)器計(jì)算設(shè) 備10、 20和30首先將來(lái)自文件820的輸入數(shù)據(jù)分別分發(fā)到子部分841、 842 和843,并且隨后將這些子部分聚合到部分851、 852和853中。部分851、 852 和853可以包括根據(jù)諸如服務(wù)器計(jì)算設(shè)備10、 20和30的相對(duì)計(jì)算能力等一個(gè) 或多個(gè)準(zhǔn)則被映射的來(lái)自文件820的數(shù)據(jù)。
一旦來(lái)自文件820的數(shù)據(jù)被映射,則翻譯器70可以生成分類(Sort)命 令813來(lái)作為程序810—部分。如前所述,分類命令813可以是應(yīng)用分類函數(shù) 的處理命令。因此,先前作為程序810—部分定義的管理器在編譯時(shí)可以生成 適當(dāng)?shù)闹噶?,使服?wù)器計(jì)算設(shè)備IO、 20和30分別將分類函數(shù)的實(shí)例(Sort) 861、 862和863分別應(yīng)用于數(shù)據(jù)851、 852和853。
在一個(gè)實(shí)施例中,各種核心命令的默認(rèn)輸入可由管理器基于這些命令在程 序810中的次序來(lái)調(diào)整。例如,如前所示,映射命令812在分類命令813之前。 基于這樣的次序,管理器可確定分類命令813的默認(rèn)輸入是映射命令812的輸 出,并且可以適當(dāng)?shù)厣傻讓佑?jì)算指令。通常,任何核心命令的默認(rèn)輸入可以 是在前命令的輸出,但如上所述,為保持靈活性,核心命令確實(shí)允許程序設(shè)計(jì) 者指定輸入。因此,翻譯器70不需要為作為程序810的一部分生成的每個(gè)命 令提供指定的輸入,并且可以改為利用由管理器在編譯程序810時(shí)提供的默認(rèn) 輸入。
轉(zhuǎn)回到示例性程序810,翻譯器70可以在分類命令813之后提供關(guān)于應(yīng) 用"GroupBy (分組)"函數(shù)的處理(Process)命令814的規(guī)范。因此管理器 可以生成指令使服務(wù)器計(jì)算設(shè)備10、 20和30分別將該函數(shù)的實(shí)例(GroupBy) 871、 872和873分別應(yīng)用于分類函數(shù)的實(shí)例861、 862和863的輸出。在程序 810中使用處理命令814來(lái)將"GroupBy"函數(shù)應(yīng)用于分類命令813輸出的分 類數(shù)據(jù)是與SQL語(yǔ)句890相符合的。具體地,SQL語(yǔ)句890請(qǐng)求標(biāo)識(shí)輸入數(shù) 據(jù)820中具有多于5個(gè)實(shí)例的所有token。這一信息可以經(jīng)由命令812和813然而,SQL語(yǔ)句890還請(qǐng)求以特定方式分組所標(biāo)識(shí)的token。因此,可以經(jīng)由處理命令814將"GroupBy"函數(shù)應(yīng)用于分類命令813的輸出。以這樣一種方式,翻譯器70可以利用上述核心命令中的一個(gè)或多個(gè)來(lái)生成程序810以實(shí)現(xiàn)SQL語(yǔ)句890。
可由翻譯器70生成的程序810的最后一個(gè)命令是輸出(Output)命令815,該命令可用于將"GroupBy"函數(shù)的實(shí)例871、 872和873的輸出聚合到"tokens.txt"文件880中。因此,在編譯程序810時(shí),SQL語(yǔ)句890所請(qǐng)求的信息可以由程序810存儲(chǔ)到輸出文件880中。另外,為提供在程序810被并行執(zhí)行之前需要在單個(gè)計(jì)算設(shè)備或進(jìn)程上測(cè)試或者以其它方式執(zhí)行的可能性,該管理器的一個(gè)實(shí)施例可實(shí)現(xiàn)一種檢査要生成的代碼是否將被并行執(zhí)行的方法。這樣一種方法可由翻譯器70在生成程序810時(shí)使用。例如,圖9的程序810包括一種稱為"IsRunningOnCluster (是否在群集上運(yùn)行)"的方法,它可確定代碼是否將被并行地執(zhí)行。如果該代碼將被并行地執(zhí)行,則可用剛剛描述的方法來(lái)生成它。然而,如果該代碼被編譯成在單個(gè)進(jìn)程上執(zhí)行,則底層機(jī)制可將這一點(diǎn)考慮在內(nèi)并可生成用于與所述分布式進(jìn)程相反的單個(gè)進(jìn)程的代碼。
盡管圖9示出從獨(dú)立的SQL語(yǔ)句890生成針對(duì)并行處理來(lái)優(yōu)化的計(jì)算機(jī)可執(zhí)行指令,但如上所述,翻譯器70的操作不限于此。具體地,可以從類似于SQL語(yǔ)句890的SQL語(yǔ)句中生成類似于程序810的程序,即使這樣的SQL語(yǔ)句作為宿主程序設(shè)計(jì)上下文的一部分被包括在宿主程序設(shè)計(jì)上下文中。轉(zhuǎn)到圖10,程序910和腳本940被示為分別包括SQL語(yǔ)句920和950。 SQL語(yǔ)句920和950可以分別直接被包括在程序910和腳本940的程序設(shè)計(jì)上下文中。因而,例如,SQL語(yǔ)句920作為"string"被包括在程序910中,程序910在圖10所示的示例中被示為具有C弁程序設(shè)計(jì)上下文。然而,如前所示,對(duì)C#的使用僅是示例性的并且不是任何固有限制的產(chǎn)物。事實(shí)上,程序910的程序設(shè)計(jì)上下文可以是提供文本字符串的規(guī)范的任何較高級(jí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言,包括例如諸如Visual Basic⑧或0++等語(yǔ)言。腳本940的程序設(shè)計(jì)上下文同樣不旨在限于圖10所示的示例,該示例示出包含在腳本940中的SQL語(yǔ)句950具有一般腳本上下文。在一個(gè)實(shí)施例中,SQL語(yǔ)句950可以在沒(méi)有任何指示符的情況下被包含在腳本940中,因?yàn)槟_本的解釋器960可以僅解釋它所理解的文
17本。
與圖9的獨(dú)立SQL語(yǔ)句890 —樣,分別位于程序910和腳本940中的SQL語(yǔ)句920和950首先可由翻譯器70翻譯成與程序910或腳本940的程序設(shè)計(jì)上下文兼容或者與之等價(jià)的形式。例如,如圖10所示,SQL語(yǔ)句920可由翻譯器70翻譯成與在圖10所示的示例中被示為C弁較高級(jí)程序設(shè)計(jì)語(yǔ)言的910的程序設(shè)計(jì)上下文等價(jià)的形式。因而,所得到的程序930將程序910中已經(jīng)存在的C弁代碼與通過(guò)翻譯SQL語(yǔ)句920所得到的0#代碼組合起來(lái)。同樣,如圖所示,翻譯器70不限于僅將SQL語(yǔ)句920翻譯成Ct而可改為被設(shè)計(jì)成將SQL語(yǔ)句翻譯成任何常用的較高級(jí)程序設(shè)計(jì)語(yǔ)言。在一個(gè)實(shí)施例中,翻譯器70將SQL語(yǔ)句90翻譯成如與程序910使用的相同的程序設(shè)計(jì)上下文。然而,在一替換實(shí)施例中,翻譯器70可僅將SQL語(yǔ)句920翻譯成一種兼容的程序設(shè)計(jì)上下文。在這樣一種情形中,所得到的程序930可由多個(gè)編譯器(諸如編譯器970)來(lái)編譯,以便生成針對(duì)并行處理來(lái)優(yōu)化的計(jì)算機(jī)可執(zhí)行指令。
如果翻譯器70將SQL語(yǔ)句920翻譯成與程序910使用的相同的程序設(shè)計(jì)上下文,則僅需要單個(gè)編譯器970來(lái)生成針對(duì)并行處理來(lái)優(yōu)化的計(jì)算機(jī)可執(zhí)行指令。在一個(gè)實(shí)施例中,編譯器970可引用在程序910和930中指定的管理器來(lái)生成這樣的指令。因而,通過(guò)將SQL語(yǔ)句920翻譯成其并行優(yōu)化編譯器(諸如編譯器970)已經(jīng)存在的形式,翻譯器70可充分利用該已經(jīng)存在的編譯器而不必具有直接從該結(jié)構(gòu)化査詢生成針對(duì)并行處理來(lái)優(yōu)化的相對(duì)應(yīng)的低級(jí)計(jì)算機(jī)可執(zhí)行指令的能力。
翻譯器70可以同樣將腳本940中的SQL語(yǔ)句950翻譯成中間形式,編譯器970可從該中間形式生成針對(duì)并行處理來(lái)優(yōu)化計(jì)算機(jī)可執(zhí)行指令。然而,腳本940并非由編譯器970來(lái)編譯,而是改為由解釋器960來(lái)解釋。在一個(gè)實(shí)施例中,解釋器960可利用與編譯器970相似的庫(kù),使從解釋器960輸出的針對(duì)并行處理來(lái)優(yōu)化的低級(jí)計(jì)算機(jī)可執(zhí)行指令能夠與來(lái)自編譯器970的那些輸出組合起來(lái)。最終,編譯器970或者該編譯器和解釋器960的輸出可以是針對(duì)并行處理來(lái)優(yōu)化的且以與圖9所示和在前詳細(xì)描述的方式相似的方式來(lái)處理輸入數(shù)據(jù)的低級(jí)計(jì)算機(jī)可執(zhí)行指令的集合。
如可以從上述描述中看到的,提供了用于允許獨(dú)立地或者在另一程序設(shè)計(jì)上下文中使用結(jié)構(gòu)化査詢的機(jī)制。結(jié)構(gòu)化査詢可以被翻譯以便利用為特定的基本操作所提供的、允許生成針對(duì)并行處理來(lái)優(yōu)化的可執(zhí)行程序的核心命令和聚合。鑒于在此描述的主題的許多可能的變化方案,本發(fā)明要求保護(hù)落入所附權(quán)利要求書范圍內(nèi)的所有這樣的實(shí)施例及其等效方案。
19
權(quán)利要求
1.一個(gè)或多個(gè)包含用于從一個(gè)或多個(gè)結(jié)構(gòu)化查詢生成具有并行處理能力的命令的計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令用于下列步驟解析所述一個(gè)或多個(gè)結(jié)構(gòu)化查詢以標(biāo)識(shí)輸入數(shù)據(jù)源(40);解析所述一個(gè)或多個(gè)結(jié)構(gòu)化查詢以標(biāo)識(shí)所述輸入數(shù)據(jù)源的模式,所述模式指定來(lái)自所述輸入數(shù)據(jù)源的一個(gè)或多個(gè)數(shù)據(jù)部分的名稱和數(shù)據(jù)類型;以及將所述一個(gè)或多個(gè)結(jié)構(gòu)化查詢翻譯成包括下列至少之一的中間形式處理命令(210),用于跨一個(gè)或多個(gè)進(jìn)程并行地應(yīng)用所述處理命令指定的函數(shù)(220);分發(fā)命令(310),用于跨一個(gè)或多個(gè)進(jìn)程并行地將數(shù)據(jù)劃分成兩個(gè)或多個(gè)子部分;聚合命令(410),用于跨一個(gè)或多個(gè)進(jìn)程并行地組合兩個(gè)或多個(gè)離散的數(shù)據(jù)集合;聯(lián)結(jié)命令(610),用于跨一個(gè)或多個(gè)進(jìn)程并行地將第一聯(lián)結(jié)輸入數(shù)據(jù)的每一段與第二聯(lián)結(jié)輸入數(shù)據(jù)的對(duì)應(yīng)段組合起來(lái);以及叉積命令(710),用于跨一個(gè)或多個(gè)進(jìn)程并行地將第一叉積輸入數(shù)據(jù)的每一段與第二叉積輸入數(shù)據(jù)的每一段組合起來(lái)。
2. 如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述一個(gè)或多個(gè)結(jié) 構(gòu)化査詢表示用于生成所述具有并行處理能力的命令的程序設(shè)計(jì)上下文。
3. 如權(quán)利要求1所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述一個(gè)或多個(gè)結(jié)構(gòu) 化査詢被包括在用于生成所述具有并行處理能力的命令的較大的程序設(shè)計(jì)上 下文中,所述較大的程序設(shè)計(jì)上下文包含所述處理命令、所述分發(fā)命令、所述聚 合命令、所述聯(lián)結(jié)命令和所述叉積命令中的至少一個(gè)。
4. 如權(quán)利要求3所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述中間形式和所 述較大的程序設(shè)計(jì)上下文屬于同一較高級(jí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。
5. 如權(quán)利要求3所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述較大的程序設(shè) 計(jì)上下文是腳本。
6. 如權(quán)利要求5所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,還包括用于根據(jù)相 同的庫(kù)編譯所述中間形式和解釋所述腳本的計(jì)算機(jī)可執(zhí)行指令。
7. 如權(quán)利要求3所述的計(jì)算機(jī)可讀介質(zhì),其特征在于,所述較大的程序設(shè) 計(jì)上下文的第一部分的輸出被指定為所述一個(gè)或多個(gè)結(jié)構(gòu)化査詢的輸入,且其中所述一個(gè)或多個(gè)結(jié)構(gòu)化查詢的輸出被指定為所述較大的程序設(shè)計(jì)上下文的 第二部分的輸入。
8. —種用于從一個(gè)或多個(gè)結(jié)構(gòu)化査詢生成具有并行處理能力的命令的方 法,包括下列步驟解析所述一個(gè)或多個(gè)結(jié)構(gòu)化查詢以標(biāo)識(shí)輸入數(shù)據(jù)源(40);解析所述一個(gè)或多個(gè)結(jié)構(gòu)化査詢以標(biāo)識(shí)所述輸入數(shù)據(jù)源的模式,所述模式 指定來(lái)自所述輸入數(shù)據(jù)源的一個(gè)或多個(gè)數(shù)據(jù)部分的名稱和數(shù)據(jù)類型;以及將所述一個(gè)或多個(gè)結(jié)構(gòu)化查詢翻譯成包括下列至少之一的中間形式處理 命令(210),用于跨一個(gè)或多個(gè)進(jìn)程并行地應(yīng)用所述處理命令指定的函數(shù) (220);分發(fā)命令(310),用于跨一個(gè)或多個(gè)進(jìn)程并行地將數(shù)據(jù)劃分成兩個(gè) 或多個(gè)子部分;聚合命令(410),用于跨一個(gè)或多個(gè)進(jìn)程并行地組合兩個(gè)或 多個(gè)離散的數(shù)據(jù)集合;聯(lián)結(jié)命令(610),用于跨一個(gè)或多個(gè)進(jìn)程并行地將第 一聯(lián)結(jié)輸入數(shù)據(jù)的每一段與第二聯(lián)結(jié)輸入數(shù)據(jù)的對(duì)應(yīng)段組合起來(lái);以及叉積命 令(710),用于跨一個(gè)或多個(gè)進(jìn)程并行地將第一叉積輸入數(shù)據(jù)的每一段與第 二叉積輸入數(shù)據(jù)的每一段組合起來(lái)。
9. 如權(quán)利要求8所述的方法,其特征在于,所述一個(gè)或多個(gè)結(jié)構(gòu)化査詢表 示用于生成所述具有并行處理能力的命令的程序設(shè)計(jì)上下文。
10. 如權(quán)利要求8所述的方法,其特征在于,所述一個(gè)或多個(gè)結(jié)構(gòu)化查詢 被包括在用于生成所述具有并行處理能力的命令的較大的程序設(shè)計(jì)上下文中, 所述較大的程序設(shè)計(jì)上下文包括所述處理命令、所述分發(fā)命令、所述聚合命令、 所述聯(lián)結(jié)命令和所述叉積命令中的至少一個(gè)。
11. 如權(quán)利要求10所述的方法,其特征在于,所述中間形式和所述較大的 程序設(shè)計(jì)上下文屬于同一較高級(jí)計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言。
12. 如權(quán)利要求10所述的方法,其特征在于,所述較大的程序設(shè)計(jì)上下文 是腳本。
13. 如權(quán)利要求12所述的方法,其特征在于,還包括根據(jù)相同的庫(kù)來(lái)編譯 所述中間形式和解釋所述腳本的步驟。
14. 如權(quán)利要求10所述的方法,其特征在于,所述較大的程序設(shè)計(jì)上下文 的第一部分的輸出被指定為所述一個(gè)或多個(gè)結(jié)構(gòu)化査詢的輸入,并且其中所述一個(gè)或多個(gè)結(jié)構(gòu)化査詢的輸出被指定為所述較大的程序設(shè)計(jì)上下文的第二部 分的輸入。
全文摘要
結(jié)構(gòu)化查詢,諸如使用結(jié)構(gòu)化查詢語(yǔ)言(SQL)編寫的結(jié)構(gòu)化查詢是用于表示設(shè)法從數(shù)據(jù)集合獲得的信息的高效機(jī)制。本發(fā)明的機(jī)制允許使用結(jié)構(gòu)化查詢來(lái)表示可被并行執(zhí)行的數(shù)據(jù)處理以便獲得這些處理伴隨而來(lái)的效率。結(jié)構(gòu)化查詢,無(wú)論是獨(dú)立的還是集成到另一程序設(shè)計(jì)上下文中,都可被翻譯成與它們被集成到的程序設(shè)計(jì)上下文或某種其它高級(jí)程序設(shè)計(jì)語(yǔ)言兼容的或者與這些語(yǔ)言等價(jià)的中間形式。該中間翻譯形式可使用抽象出可被并行執(zhí)行的機(jī)制的核心命令。這些核心命令包括用于并行地應(yīng)用函數(shù)和并行地分發(fā)與聯(lián)結(jié)數(shù)據(jù)的命令,并且還包括對(duì)用于普遍執(zhí)行的函數(shù)的核心命令的聚合。
文檔編號(hào)G06F17/30GK101689196SQ200880020179
公開(kāi)日2010年3月31日 申請(qǐng)日期2008年6月3日 優(yōu)先權(quán)日2007年6月12日
發(fā)明者R·I·查科恩, W·D·拉姆塞 申請(qǐng)人:微軟公司