數(shù)據(jù)查詢的方法和裝置制造方法
【專利摘要】本發(fā)明公開了一種在無共享數(shù)據(jù)庫中查詢數(shù)據(jù)的方法和裝置。所述方法包括:獲取查詢請求,針對該查詢請求生成優(yōu)化的訪問計劃,其中所述查詢請求涉及存儲在外部數(shù)據(jù)源中的外部數(shù)據(jù),并包含對外部數(shù)據(jù)的期望分布的定義;基于所述優(yōu)化的訪問計劃獲取與期望分布相關(guān)的數(shù)據(jù)分布信息;將數(shù)據(jù)分布信息傳送給外部數(shù)據(jù)源,使得外部數(shù)據(jù)源按照數(shù)據(jù)分布信息將外部數(shù)據(jù)進(jìn)行分割和返回;以及按照所述優(yōu)化的訪問計劃對分割的外部數(shù)據(jù)進(jìn)行查詢相關(guān)處理。所述裝置與方法對應(yīng)。根據(jù)本發(fā)明的方法和裝置,允許定義外部數(shù)據(jù)的期望分布,并使得外部數(shù)據(jù)源按照該期望分布來分割和返回外部數(shù)據(jù),由此避免數(shù)據(jù)查詢中跨節(jié)點的數(shù)據(jù)訪問,提高數(shù)據(jù)查詢的效率。
【專利說明】數(shù)據(jù)查詢的方法和裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫查詢,更具體地,涉及一種在無共享數(shù)據(jù)庫中進(jìn)行數(shù)據(jù)查詢的方法和裝置。
【背景技術(shù)】
[0002]數(shù)據(jù)庫用于按照數(shù)據(jù)結(jié)構(gòu)來組織、存儲和管理數(shù)據(jù)。隨著信息技術(shù)的發(fā)展,需要存儲和處理的數(shù)據(jù)量越來越大,這對數(shù)據(jù)庫提出了更高的要求。為了適應(yīng)于海量數(shù)據(jù)的存儲和管理,數(shù)據(jù)庫的構(gòu)成由簡單的單個存儲設(shè)備擴(kuò)展為多個存儲設(shè)備的集群。并且,數(shù)據(jù)庫還可以與外部數(shù)據(jù)源相結(jié)合,共同提供數(shù)據(jù)的存儲、管理和查詢,從而進(jìn)一步擴(kuò)展數(shù)據(jù)庫的應(yīng)用。
[0003]外部數(shù)據(jù)源可以通過各種數(shù)據(jù)存儲系統(tǒng)來實現(xiàn),包括集中式數(shù)據(jù)存儲系統(tǒng),分布式存儲系統(tǒng)。分布式存儲系統(tǒng)的例子包括網(wǎng)絡(luò)文件系統(tǒng)NFS,Hadoop文件系統(tǒng)HDFS等等。許多外部數(shù)據(jù)源并不支持標(biāo)準(zhǔn)API來進(jìn)行數(shù)據(jù)存取,因此,通常需要利用用戶定義函數(shù)UDF(user defined function)來執(zhí)行外部數(shù)據(jù)查詢,將數(shù)據(jù)從外部數(shù)據(jù)源取入到數(shù)據(jù)庫。
[0004]圖1示出在數(shù)據(jù)庫與外部數(shù)據(jù)源相結(jié)合的系統(tǒng)中進(jìn)行數(shù)據(jù)查詢的示意圖。在圖1中,以Hadoop系統(tǒng)作為外部數(shù)據(jù)源的例子。為了在這樣的系統(tǒng)中進(jìn)行數(shù)據(jù)查詢,首先用戶側(cè)向數(shù)據(jù)庫管理引擎發(fā)出一個SQL查詢請求。查詢請求的代碼可以如右側(cè)所示。從右側(cè)代碼可以看到,為了獲取Hadoop系統(tǒng)中的數(shù)據(jù),在查詢請求中包含了兩個UDF,即jaqlSumit和hdfsRead,用以向Hadoop系統(tǒng)提出請求并從中取出數(shù)據(jù)。SQL查詢請求中中間部分的代碼段用于在Hadoop中進(jìn)行數(shù)據(jù)查詢。對于這樣的查詢請求,數(shù)據(jù)庫引擎首先對其進(jìn)行編譯和分析。對于其中的UDF,數(shù)據(jù)庫引擎開啟單獨(dú)的線程來運(yùn)行UDF。因此,通常還將運(yùn)行UDF的程序和線程稱為UDF實體。在圖1的例子中,數(shù)據(jù)庫管理引擎于是創(chuàng)建了兩個UDF實體,分別從外部數(shù)據(jù)源Hadoop系統(tǒng)讀取數(shù)據(jù)。最后,數(shù)據(jù)庫管理引擎將讀取的數(shù)據(jù)進(jìn)行組織,返回到用戶接口。
[0005]另一方面,如前所述,數(shù)據(jù)庫可以由多個存儲設(shè)備的集群構(gòu)成。這樣的集群可以有多種共享實現(xiàn)方式,例如內(nèi)存共享,即多個設(shè)備的CPU共享同一片內(nèi)存,CPU之間通過內(nèi)部通訊機(jī)制進(jìn)行通訊;磁盤共享,即每一個CPU使用自己的私有內(nèi)存區(qū)域,但通過內(nèi)部通訊機(jī)制直接訪問所有磁盤系統(tǒng);以及無共享,即每一個設(shè)備的CPU都有私有內(nèi)存區(qū)域和私有磁盤空間,2個CPU不能訪問相同磁盤空間,CPU之間的通訊通過網(wǎng)絡(luò)連接。在以上的實現(xiàn)方式中,無共享的方式是數(shù)據(jù)庫常用的典型架構(gòu)。對于無共享架構(gòu)的數(shù)據(jù)庫來說,在與外部數(shù)據(jù)源相結(jié)合進(jìn)行數(shù)據(jù)存儲和查詢的情況下,有可能產(chǎn)生數(shù)據(jù)再分配的問題。
[0006]圖2示出在無共享數(shù)據(jù)庫與外部數(shù)據(jù)源相結(jié)合的系統(tǒng)中進(jìn)行數(shù)據(jù)查詢的示意圖。如圖2所示,數(shù)據(jù)庫由無共享的多個設(shè)備構(gòu)成,每個設(shè)備具有獨(dú)立的CPU、內(nèi)存和用于存儲數(shù)據(jù)的磁盤。通常,也將每個設(shè)備稱為數(shù)據(jù)庫的一個節(jié)點,因此圖2的數(shù)據(jù)庫包含無共享的節(jié)點N1-N4。在這樣的無共享數(shù)據(jù)庫中,為了從外部數(shù)據(jù)源讀取數(shù)據(jù),通常在每個節(jié)點都創(chuàng)建一個UDF實體,利用所創(chuàng)建的多個UDF實體并行地執(zhí)行外部數(shù)據(jù)讀取。然而,由于數(shù)據(jù)庫無法識別外部數(shù)據(jù)源中數(shù)據(jù)的分布,而外部數(shù)據(jù)源也無法知道期望的數(shù)據(jù)分布,因此,在數(shù)據(jù)庫管理引擎通過UDF從外部數(shù)據(jù)源取得數(shù)據(jù)之后,需要對這些數(shù)據(jù)進(jìn)行再分配。例如,在一個具體例子中,希望查詢用戶及其近期交易的信息,其中與用戶相關(guān)的信息存儲在數(shù)據(jù)庫本地設(shè)備中,而交易信息存儲在外部數(shù)據(jù)源中。為此,數(shù)據(jù)庫引擎需要從外部數(shù)據(jù)源獲得交易信息,然后將這些交易信息與對應(yīng)的用戶信息進(jìn)行連接(join)。由于數(shù)據(jù)庫各個節(jié)點之間無共享,數(shù)據(jù)庫引擎需要將各個交易信息分別發(fā)送到存儲有所對應(yīng)的用戶信息的特定節(jié)點中才能進(jìn)行連接。例如,假定用戶A的信息存儲在節(jié)點NI中,而節(jié)點N2上的UDF實體獲取到了用戶A的交易信息,那么數(shù)據(jù)庫引擎需要將N2上的UDF實體所獲得的數(shù)據(jù)發(fā)送到NI中,才能使用戶A與其交易信息相連接??梢岳斫猓瑢τ跓o共享架構(gòu)的數(shù)據(jù)庫來說,節(jié)點之間的通信會顯著降低運(yùn)行性能。因此,希望能夠減少或者避免數(shù)據(jù)在數(shù)據(jù)庫中的再分配,從而減小由節(jié)點間通信帶來的性能劣化。
【發(fā)明內(nèi)容】
[0007]鑒于以上所述的問題,提出本發(fā)明,旨在提供一種方案,能夠減少或避免查詢過程中數(shù)據(jù)在無共享數(shù)據(jù)庫中的再分配。
[0008]根據(jù)本發(fā)明的一個方面,提供了在無共享數(shù)據(jù)庫中查詢數(shù)據(jù)的方法,包括:獲取查詢請求,針對該查詢請求生成優(yōu)化的訪問計劃,其中所述查詢請求涉及存儲在外部數(shù)據(jù)源中的外部數(shù)據(jù),所述查詢請求還包含對外部數(shù)據(jù)的期望分布的定義;基于所述優(yōu)化的訪問計劃獲取與所述外部數(shù)據(jù)的期望分布相關(guān)的數(shù)據(jù)分布信息;將所述數(shù)據(jù)分布信息傳送給所述外部數(shù)據(jù)源,使得所述外部數(shù)據(jù)源按照所述數(shù)據(jù)分布信息將外部數(shù)據(jù)進(jìn)行分割,并且并行地返回分割的外部數(shù)據(jù);以及按照所述優(yōu)化的訪問計劃對所述分割的外部數(shù)據(jù)進(jìn)行查詢相關(guān)處理。
[0009]根據(jù)本發(fā)明的另一個方面,提供了包括:訪問計劃生成單元,配置為獲取查詢請求,針對該查詢請求生成優(yōu)化的訪問計劃,其中所述查詢請求涉及存儲在外部數(shù)據(jù)源中的外部數(shù)據(jù),所述查詢請求還包含對外部數(shù)據(jù)的期望分布的定義;數(shù)據(jù)分布信息獲取單元,配置為基于所述優(yōu)化的訪問計劃獲取與所述外部數(shù)據(jù)的期望分布相關(guān)的數(shù)據(jù)分布信息;數(shù)據(jù)分布信息傳送單元,配置為將所述數(shù)據(jù)分布信息傳送給外部數(shù)據(jù)源,使得所述外部數(shù)據(jù)源按照所述數(shù)據(jù)分布信息將外部數(shù)據(jù)進(jìn)行分割,并且并行地返回分割的外部數(shù)據(jù);以及查詢處理執(zhí)行單元,配置為按照所述優(yōu)化的訪問計劃對分割的外部數(shù)據(jù)進(jìn)行查詢相關(guān)處理。
[0010]根據(jù)本發(fā)明的方法和裝置,允許定義外部數(shù)據(jù)的期望分布,并使得外部數(shù)據(jù)源按照該期望分布來分割和返回外部數(shù)據(jù),由此避免數(shù)據(jù)查詢中跨節(jié)點的數(shù)據(jù)訪問,提高數(shù)據(jù)查詢的效率。
【專利附圖】
【附圖說明】
[0011]通過結(jié)合附圖對本公開示例性實施方式進(jìn)行更詳細(xì)的描述,本公開的上述以及其它目的、特征和優(yōu)勢將變得更加明顯,其中,在本公開示例性實施方式中,相同的參考標(biāo)號通常代表相同部件。
[0012]圖1示出在數(shù)據(jù)庫與外部數(shù)據(jù)源相結(jié)合的系統(tǒng)中進(jìn)行數(shù)據(jù)查詢的示意圖;
[0013]圖2示出在無共享數(shù)據(jù)庫與外部數(shù)據(jù)源相結(jié)合的系統(tǒng)中進(jìn)行數(shù)據(jù)查詢的示意圖;[0014]圖3示出了適于用來實現(xiàn)本發(fā)明實施方式的示例性計算機(jī)系統(tǒng)/服務(wù)器12的框圖;
[0015]圖4示出根據(jù)本發(fā)明一個實施例的數(shù)據(jù)查詢方法的流程圖;
[0016]圖5示出在本發(fā)明一個實施例中數(shù)據(jù)查詢涉及的各個實體的操作時序;
[0017]圖6示出執(zhí)行圖4和圖5的方法的效果圖;以及
[0018]圖7示出根據(jù)本發(fā)明實施例的數(shù)據(jù)查詢裝置的框圖。
【具體實施方式】
[0019]下面將參照附圖更詳細(xì)地描述本公開的優(yōu)選實施方式。雖然附圖中顯示了本公開的優(yōu)選實施方式,然而應(yīng)該理解,可以以各種形式實現(xiàn)本公開而不應(yīng)被這里闡述的實施方式所限制。相反,提供這些實施方式是為了使本公開更加透徹和完整,并且能夠?qū)⒈竟_的范圍完整地傳達(dá)給本領(lǐng)域的技術(shù)人員。
[0020]所屬【技術(shù)領(lǐng)域】的技術(shù)人員知道,本發(fā)明可以實現(xiàn)為系統(tǒng)、方法或計算機(jī)程序產(chǎn)品。因此,本公開可以具體實現(xiàn)為以下形式,即:可以是完全的硬件、也可以是完全的軟件(包括固件、駐留軟件、微代碼等),還可以是硬件和軟件結(jié)合的形式,本文一般稱為“電路”、“模塊”或“系統(tǒng)”。此外,在一些實施例中,本發(fā)明還可以實現(xiàn)為在一個或多個計算機(jī)可讀介質(zhì)中的計算機(jī)程序產(chǎn)品的形式,該計算機(jī)可讀介質(zhì)中包含計算機(jī)可讀的程序代碼。
[0021]可以采用一個或多個計算機(jī)可讀的介質(zhì)的任意組合。計算機(jī)可讀介質(zhì)可以是計算機(jī)可讀信號介質(zhì)或者計算機(jī)可讀存儲介質(zhì)。計算機(jī)可讀存儲介質(zhì)例如可以是一但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計算機(jī)可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個或多個導(dǎo)線的電連接、便攜式計算機(jī)磁盤、硬盤、隨機(jī)存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPR0M或閃存)、光纖、便攜式緊湊磁盤只讀存儲器(CD-ROM)、光存儲器件、磁存儲器件、或者上述的任意合適的組合。在本文件中,計算機(jī)可讀存儲介質(zhì)可以是任何包含或存儲程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。
[0022]計算機(jī)可讀的信號介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號,其中承載了計算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號可以采用多種形式,包括——但不限于——電磁信號、光信號或上述的任意合適的組合。計算機(jī)可讀的信號介質(zhì)還可以是計算機(jī)可讀存儲介質(zhì)以外的任何計算機(jī)可讀介質(zhì),該計算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。
[0023]計算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括一但不限于一無線、電線、光纜、RF等等,或者上述的任意合適的組合。
[0024]可以以一種或多種程序設(shè)計語言或其組合來編寫用于執(zhí)行本發(fā)明操作的計算機(jī)程序代碼,所述程序設(shè)計語言包括面向?qū)ο蟮某绦蛟O(shè)計語言一諸如Java、Smalltalk、C++,還包括常規(guī)的過程式程序設(shè)計語言一諸如”C”語言或類似的程序設(shè)計語言。程序代碼可以完全地在用戶計算機(jī)上執(zhí)行、部分地在用戶計算機(jī)上執(zhí)行、作為一個獨(dú)立的軟件包執(zhí)行、部分在用戶計算機(jī)上部分在遠(yuǎn)程計算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計算機(jī)的情形中,遠(yuǎn)程計算機(jī)可以通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機(jī),或者,可以連接到外部計算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。
[0025]下面將參照本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機(jī)程序產(chǎn)品的流程圖和/或框圖描述本發(fā)明。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機(jī)程序指令實現(xiàn)。這些計算機(jī)程序指令可以提供給通用計算機(jī)、專用計算機(jī)或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機(jī)器,這些計算機(jī)程序指令通過計算機(jī)或其它可編程數(shù)據(jù)處理裝置執(zhí)行,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的裝置。
[0026]也可以把這些計算機(jī)程序指令存儲在能使得計算機(jī)或其它可編程數(shù)據(jù)處理裝置以特定方式工作的計算機(jī)可讀介質(zhì)中,這樣,存儲在計算機(jī)可讀介質(zhì)中的指令就產(chǎn)生出一個包括實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的指令裝置(instructionmeans)的制造品(manufacture)。
[0027]也可以把計算機(jī)程序指令加載到計算機(jī)、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計算機(jī)、其它可編程數(shù)據(jù)處理裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機(jī)實現(xiàn)的過程,從而使得在計算機(jī)或其它可編程裝置上執(zhí)行的指令能夠提供實現(xiàn)流程圖和/或框圖中的方框中規(guī)定的功能/操作的過程。
[0028]圖3示出了適于用來實現(xiàn)本發(fā)明實施方式的示例性計算機(jī)系統(tǒng)/服務(wù)器12的框圖。圖3顯示的計算機(jī)系統(tǒng)/服務(wù)器12僅僅是一個示例,不應(yīng)對本發(fā)明實施例的功能和使用范圍帶來任何限制。
[0029]如圖3所示,計算機(jī)系統(tǒng)/服務(wù)器12以通用計算設(shè)備的形式表現(xiàn)。計算機(jī)系統(tǒng)/服務(wù)器12的組件可以包括但不限于:一個或者多個處理器或者處理單元16,系統(tǒng)存儲器28,連接不同系統(tǒng)組件(包括系統(tǒng)存儲器28和處理單元16)的總線18。
[0030]總線18表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉例來說,這些體系結(jié)構(gòu)包括但不限于工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(ISA)總線,微通道體系結(jié)構(gòu)(MAC)總線,增強(qiáng)型ISA總線、視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)局域總線以及外圍組件互連(PCI)總線。
[0031]計算機(jī)系統(tǒng)/服務(wù)器12典型地包括多種計算機(jī)系統(tǒng)可讀介質(zhì)。這些介質(zhì)可以是任何能夠被計算機(jī)系統(tǒng)/服務(wù)器12訪問的可用介質(zhì),包括易失性和非易失性介質(zhì),可移動的和不可移動的介質(zhì)。
[0032]系統(tǒng)存儲器28可以包括易失性存儲器形式的計算機(jī)系統(tǒng)可讀介質(zhì),例如隨機(jī)存取存儲器(RAM)30和/或高速緩存存儲器32。計算機(jī)系統(tǒng)/服務(wù)器12可以進(jìn)一步包括其它可移動/不可移動的、易失性/非易失性計算機(jī)系統(tǒng)存儲介質(zhì)。僅作為舉例,存儲系統(tǒng)34可以用于讀寫不可移動的、非易失性磁介質(zhì)(圖1未顯示,通常稱為“硬盤驅(qū)動器”)。盡管圖1中未示出,可以提供用于對可移動非易失性磁盤(例如“軟盤”)讀寫的磁盤驅(qū)動器,以及對可移動非易失性光盤(例如⑶-ROM,DVD-ROM或者其它光介質(zhì))讀寫的光盤驅(qū)動器。在這些情況下,每個驅(qū)動器可以通過一個或者多個數(shù)據(jù)介質(zhì)接口與總線18相連。存儲器28可以包括至少一個程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明各實施例的功能。
[0033]具有一組(至少一個)程序模塊42的程序/實用工具40,可以存儲在例如存儲器28中,這樣的程序模塊42包括——但不限于——操作系統(tǒng)、一個或者多個應(yīng)用程序、其它程序模塊以及程序數(shù)據(jù),這些示例中的每一個或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實現(xiàn)。程序模塊42通常執(zhí)行本發(fā)明所描述的實施例中的功能和/或方法。
[0034]計算機(jī)系統(tǒng)/服務(wù)器12也可以與一個或多個外部設(shè)備14 (例如鍵盤、指向設(shè)備、顯示器24等)通信,還可與一個或者多個使得用戶能與該計算機(jī)系統(tǒng)/服務(wù)器12交互的設(shè)備通信,和/或與使得該計算機(jī)系統(tǒng)/服務(wù)器12能與一個或多個其它計算設(shè)備進(jìn)行通信的任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過輸入/輸出(I/O)接口 22進(jìn)行。并且,計算機(jī)系統(tǒng)/服務(wù)器12還可以通過網(wǎng)絡(luò)適配器20與一個或者多個網(wǎng)絡(luò)(例如局域網(wǎng)(LAN),廣域網(wǎng)(WAN)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器20通過總線18與計算機(jī)系統(tǒng)/服務(wù)器12的其它模塊通信。應(yīng)當(dāng)明白,盡管圖中未示出,可以結(jié)合計算機(jī)系統(tǒng)/服務(wù)器12使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設(shè)備驅(qū)動器、冗余處理單元、外部磁盤驅(qū)動陣列、RAID系統(tǒng)、磁帶驅(qū)動器以及數(shù)據(jù)備份存儲系統(tǒng)等。
[0035]下面結(jié)合具體實施例描述本發(fā)明的構(gòu)思和實現(xiàn)方式。根據(jù)本發(fā)明的實施例,為了避免無共享數(shù)據(jù)庫在執(zhí)行數(shù)據(jù)查詢過程中對數(shù)據(jù)的再分配,允許在查詢請求中對有待從外部數(shù)據(jù)源獲取的數(shù)據(jù)的期望分布進(jìn)行定義,并且,數(shù)據(jù)庫引擎所創(chuàng)建的UDF實體可以從針對查詢請求生成的訪問計劃中獲取到期望的數(shù)據(jù)分布。于是,UDF實體可以將相應(yīng)的數(shù)據(jù)分布信息發(fā)送給外部數(shù)據(jù)源,并指示外部數(shù)據(jù)源按照該數(shù)據(jù)分布信息對所查詢的數(shù)據(jù)進(jìn)行分割和返回。如此,從外部數(shù)據(jù)源返回的數(shù)據(jù)就具有預(yù)期的數(shù)據(jù)分布,從而可以直接與數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行連接,而不必進(jìn)行重新分配。
[0036]現(xiàn)在參看圖4,示出根據(jù)本發(fā)明一個實施例的數(shù)據(jù)查詢方法。如圖4所示,該實施例的數(shù)據(jù)查詢方法包括以下步驟:在步驟41,獲取查詢請求,針對該查詢請求生成優(yōu)化的訪問計劃(access plan),其中所述查詢請求涉及存儲在外部數(shù)據(jù)源中的外部數(shù)據(jù),所述查詢請求還包含對外部數(shù)據(jù)的期望分布的定義;步驟42,基于所述優(yōu)化的訪問計劃獲取與外部數(shù)據(jù)的期望分布相關(guān)的數(shù)據(jù)分布信息;在步驟43,將所述數(shù)據(jù)分布信息傳送給所述外部數(shù)據(jù)源,使得所述外部數(shù)據(jù)庫按照所述數(shù)據(jù)分布信息將外部數(shù)據(jù)進(jìn)行分割,并且并行地返回分割的外部數(shù)據(jù);以及,在步驟44,按照優(yōu)化的訪問計劃對所述分割的外部數(shù)據(jù)進(jìn)行查詢相關(guān)處理。下面結(jié)合具體例子描述上述各個步驟的執(zhí)行方式。
[0037]首先,在步驟41,在無共享數(shù)據(jù)庫中獲取查詢請求,該查詢請求涉及存儲在外部數(shù)據(jù)源中的外部數(shù)據(jù)。為了從外部數(shù)據(jù)源獲得外部數(shù)據(jù),查詢請求包含相應(yīng)的UDF。為了避免在數(shù)據(jù)庫中對外部數(shù)據(jù)進(jìn)行再分配,本發(fā)明的實施例允許在查詢請求中定義外部數(shù)據(jù)的期望分布。
[0038]一般地,查詢請求通常還涉及存儲在無共享數(shù)據(jù)庫中的內(nèi)部數(shù)據(jù),并包含關(guān)聯(lián)條件,用于定義內(nèi)部數(shù)據(jù)和外部數(shù)據(jù)之間的關(guān)聯(lián)關(guān)系。在對內(nèi)部數(shù)據(jù)和外部數(shù)據(jù)進(jìn)行關(guān)聯(lián)查詢的情況下,一般地,所定義的外部數(shù)據(jù)的期望分布與內(nèi)部數(shù)據(jù)和外部數(shù)據(jù)之間的關(guān)聯(lián)條件相關(guān)。
[0039]下面示出一個示例性查詢請求的SQL代碼。
[0040]
【權(quán)利要求】
1.一種在無共享數(shù)據(jù)庫中查詢數(shù)據(jù)的方法,包括: 獲取查詢請求,針對該查詢請求生成優(yōu)化的訪問計劃,其中所述查詢請求涉及存儲在外部數(shù)據(jù)源中的外部數(shù)據(jù),所述查詢請求還包含對外部數(shù)據(jù)的期望分布的定義; 基于所述優(yōu)化的訪問計劃獲取與所述外部數(shù)據(jù)的期望分布相關(guān)的數(shù)據(jù)分布信息; 將所述數(shù)據(jù)分布信息傳送給所述外部數(shù)據(jù)源,使得所述外部數(shù)據(jù)源按照所述數(shù)據(jù)分布信息將外部數(shù)據(jù)進(jìn)行分割,并且并行地返回分割的外部數(shù)據(jù);以及 按照所述優(yōu)化的 訪問計劃對所述分割的外部數(shù)據(jù)進(jìn)行查詢相關(guān)處理。
2.根據(jù)權(quán)利要求1所述的方法,其中所述查詢請求還涉及存儲在所述無共享數(shù)據(jù)庫中的內(nèi)部數(shù)據(jù),并包括所述外部數(shù)據(jù)和內(nèi)部數(shù)據(jù)的關(guān)聯(lián)條件,所述外部數(shù)據(jù)的期望分布與所述關(guān)聯(lián)條件相關(guān)。
3.根據(jù)權(quán)利要求1所述的方法,其中所述針對查詢請求生成優(yōu)化的訪問計劃包括: 識別所述對外部數(shù)據(jù)的期望分布的定義,并將其包含在初步訪問計劃中;以及 考慮所述期望分布而對所述初步訪問計劃進(jìn)行優(yōu)化,以獲得優(yōu)化的訪問計劃。
4.根據(jù)權(quán)利要求1所述的方法,其中獲取所述數(shù)據(jù)分布信息包括:通過調(diào)用運(yùn)行時中擴(kuò)展的接口函數(shù)來獲取所述優(yōu)化的訪問計劃的信息,基于獲取的優(yōu)化的訪問計劃的信息獲取所述數(shù)據(jù)分布信息。
5.根據(jù)權(quán)利要求1-4中任一項所述的方法,其中所述數(shù)據(jù)分布信息包含直接的分割規(guī)則和返回規(guī)則,使得所述外部數(shù)據(jù)源根據(jù)分割規(guī)則對外部數(shù)據(jù)進(jìn)行分割,根據(jù)返回規(guī)則返回分割的外部數(shù)據(jù)。
6.根據(jù)權(quán)利要求1-4中任一項所述的方法,其中所述數(shù)據(jù)分布信息涉及指向其他數(shù)據(jù)的索引信息,使得所述外部數(shù)據(jù)源首先根據(jù)該索引信息獲取所述其他數(shù)據(jù)的內(nèi)容,據(jù)此確定外部數(shù)據(jù)的目標(biāo)分布,然后基于所述外部數(shù)據(jù)的目標(biāo)分布將外部數(shù)據(jù)進(jìn)行分割和返回。
7.根據(jù)權(quán)利要求1-4中任一項所述的方法,其中所述數(shù)據(jù)分布信息涉及指向其他數(shù)據(jù)的索引信息,所述將數(shù)據(jù)分布信息傳送給外部數(shù)據(jù)源包括,首先對所述數(shù)據(jù)分布信息進(jìn)行處理,使其包含直接的分割規(guī)則和返回規(guī)則,然后將處理的數(shù)據(jù)分布信息發(fā)送給所述外部數(shù)據(jù)源。
8.根據(jù)權(quán)利要求2所述的方法,其中對外部數(shù)據(jù)進(jìn)行查詢相關(guān)處理包括:對所述內(nèi)部數(shù)據(jù)和分割的外部數(shù)據(jù)進(jìn)行同區(qū)連接,所述同區(qū)連接是在所述無共享數(shù)據(jù)庫中同一節(jié)點之內(nèi)進(jìn)行的連接。
9.一種在無共享數(shù)據(jù)庫中查詢數(shù)據(jù)的裝置,包括: 訪問計劃生成單元,配置為獲取查詢請求,針對該查詢請求生成優(yōu)化的訪問計劃,其中所述查詢請求涉及存儲在外部數(shù)據(jù)源中的外部數(shù)據(jù),所述查詢請求還包含對外部數(shù)據(jù)的期望分布的定義; 數(shù)據(jù)分布信息獲取單元,配置為基于所述優(yōu)化的訪問計劃獲取與所述外部數(shù)據(jù)的期望分布相關(guān)的數(shù)據(jù)分布信息; 數(shù)據(jù)分布信息傳送單元,配置為將所述數(shù)據(jù)分布信息傳送給所述外部數(shù)據(jù)源,使得所述外部數(shù)據(jù)源按照所述數(shù)據(jù)分布信息將外部數(shù)據(jù)進(jìn)行分割,并且并行地返回分割的外部數(shù)據(jù);以及 查詢處理執(zhí)行單元,配置為按照所述優(yōu)化的訪問計劃對所述分割的外部數(shù)據(jù)進(jìn)行查詢相關(guān)處理。
10.根據(jù)權(quán)利要求9所述的裝置,其中所述查詢請求還涉及存儲在所述無共享數(shù)據(jù)庫中的內(nèi)部數(shù)據(jù),并包括所述外部數(shù)據(jù)和內(nèi)部數(shù)據(jù)的關(guān)聯(lián)條件,所述外部數(shù)據(jù)的期望分布與所述關(guān)聯(lián)條件相關(guān)。
11.根據(jù)權(quán)利要求9所述的裝置,其中所述訪問計劃生成單元配置為: 識別所述對外部數(shù)據(jù)的期望分布的定義,并將其包含在初步訪問計劃中;以及 考慮所述期望分布而對所述初步訪問計劃進(jìn)行優(yōu)化,以獲得優(yōu)化的訪問計劃。
12.根據(jù)權(quán)利要求9所述的裝置,其中所述數(shù)據(jù)分布信息獲取單元配置為:通過調(diào)用運(yùn)行時中擴(kuò)展的接口函數(shù)來獲取所述優(yōu)化的訪問計劃的信息,基于獲取的優(yōu)化的訪問計劃的信息獲取所述數(shù)據(jù)分布信息。
13.根據(jù)權(quán)利要求9-12中任一項所述的裝置,其中所述數(shù)據(jù)分布信息包含直接的分割規(guī)則和返回規(guī)則,使得所述外部數(shù)據(jù)源根據(jù)分割規(guī)則對外部數(shù)據(jù)進(jìn)行分割,根據(jù)返回規(guī)則返回分割的外部數(shù)據(jù)。
14.根據(jù)權(quán)利要求9-12中任一項所述的裝置,其中所述數(shù)據(jù)分布信息涉及指向其他數(shù)據(jù)的索引信息,使得所述外部數(shù)據(jù)源首先根據(jù)該索引信息獲取所述其他數(shù)據(jù)的內(nèi)容,據(jù)此確定外部數(shù)據(jù)的目標(biāo)分布,然后基于所述外部數(shù)據(jù)的目標(biāo)分布將外部數(shù)據(jù)進(jìn)行分割和返回。
15.根據(jù)權(quán)利要求9-12中任一項所述的裝置,其中所述數(shù)據(jù)分布信息獲取單元所獲取的數(shù)據(jù)分布信息涉及指向其他數(shù)據(jù)的索引信息,所述數(shù)據(jù)分布信息傳送單元配置為,對所述數(shù)據(jù)分布信息進(jìn)行處理,使其包含直接的分割規(guī)則和返回規(guī)則,然后將處理的數(shù)據(jù)分布信息發(fā)送給所述外部數(shù)據(jù)源。
16.根據(jù)權(quán)利要求10所述的裝置,其中所述查詢處理執(zhí)行單元配置為:對所述內(nèi)部數(shù)據(jù)和分割的外部數(shù)據(jù)進(jìn)行同區(qū)連接,所述同區(qū)連接是在所述無共享數(shù)據(jù)庫中同一節(jié)點之內(nèi)進(jìn)行的連接。
【文檔編號】G06F17/30GK103714073SQ201210375556
【公開日】2014年4月9日 申請日期:2012年9月29日 優(yōu)先權(quán)日:2012年9月29日
【發(fā)明者】金毅, 張皖川, 郝慶運(yùn), 陳星
申請人:國際商業(yè)機(jī)器公司