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