相關(guān)申請(qǐng)案交叉申請(qǐng)
本發(fā)明要求2014年12月31日遞交的發(fā)明名稱為“用于數(shù)據(jù)集的可擴(kuò)展排序的方法和設(shè)備(methodandapparatusforscalablesortingofadataset)”的美國申請(qǐng)案14/588,033的在先申請(qǐng)優(yōu)先權(quán),該在先申請(qǐng)的內(nèi)容以全文引入的方式并入本文本中。
本發(fā)明的實(shí)施例一般涉及對(duì)數(shù)據(jù)進(jìn)行排序,由此將數(shù)據(jù)分配到范圍,對(duì)每個(gè)范圍進(jìn)行排序,從而形成整個(gè)排序數(shù)據(jù)集。
背景技術(shù):
數(shù)據(jù)庫是以電子方式存儲(chǔ)在基于計(jì)算機(jī)的存儲(chǔ)系統(tǒng)上的有組織的數(shù)據(jù)集合。使用由計(jì)算機(jī)軟件組成的數(shù)據(jù)庫管理系統(tǒng)來與數(shù)據(jù)庫相互作用。數(shù)據(jù)庫管理系統(tǒng)提供允許輸入、存儲(chǔ)、處理和檢索信息的各種功能。通常對(duì)數(shù)據(jù)庫執(zhí)行的功能之一是排序操作。通常根據(jù)一個(gè)或多個(gè)準(zhǔn)則對(duì)數(shù)據(jù)進(jìn)行排序。例如,這可用于預(yù)期購房者根據(jù)價(jià)格(例如,最低到最高);位置(例如,距特定所需位置最近到最遠(yuǎn));使用年限(例如,最新到最舊);大小(例如,最大到最小)等對(duì)標(biāo)價(jià)出售的新住宅的數(shù)據(jù)庫進(jìn)行排序。
在過去,已經(jīng)使用簡(jiǎn)單排序程序來執(zhí)行排序操作。例如,mapreduce是用于支持經(jīng)由分布式處理系統(tǒng)的大量計(jì)算節(jié)點(diǎn)對(duì)存儲(chǔ)于文件系統(tǒng)中的大數(shù)據(jù)集進(jìn)行可擴(kuò)展分布式處理的流行軟件程序。許多企業(yè)依賴mapreduce框架及其開源實(shí)現(xiàn)hadoop的及時(shí)分析作為對(duì)大量非結(jié)構(gòu)化信息進(jìn)行高效處理和高級(jí)分析的平臺(tái)選擇。
基本上,mapreduce包含映射和規(guī)約函數(shù)。映射函數(shù)將輸入數(shù)據(jù)劃分成較小項(xiàng)目并且將所述項(xiàng)目分布到工作節(jié)點(diǎn)。工作節(jié)點(diǎn)處理所述項(xiàng)目并返回應(yīng)答到主節(jié)點(diǎn)。作為規(guī)約函數(shù)的部分,主節(jié)點(diǎn)收集應(yīng)答并組合它們以提供輸出。
更確切地說,映射階段被分成映射任務(wù)并且規(guī)約階段被分成規(guī)約任務(wù)。每個(gè)映射任務(wù)處理一般存在于分布式文件系統(tǒng)上的輸入數(shù)據(jù)的邏輯拆分。映射任務(wù)讀取數(shù)據(jù),對(duì)每個(gè)記錄應(yīng)用用戶定義的映射函數(shù),并且緩存所得輸出。在許多情況下,在將此數(shù)據(jù)寫入到執(zhí)行映射任務(wù)的機(jī)器的本地磁盤之前,針對(duì)不同規(guī)約任務(wù)對(duì)此數(shù)據(jù)進(jìn)行排序和劃分。
規(guī)約階段由幾個(gè)階段構(gòu)成:隨機(jī)播放階段、排序階段和規(guī)約階段。排序操作通常花費(fèi)最長時(shí)間并且成為數(shù)據(jù)處理的瓶頸,特別是對(duì)于大數(shù)據(jù)集。考慮到要求進(jìn)行排序的數(shù)據(jù)的量不斷增加,這會(huì)產(chǎn)生問題。即使使用最新技術(shù),利用mapreduce的大型服務(wù)器集群也會(huì)花費(fèi)數(shù)小時(shí)對(duì)拍字節(jié)規(guī)模的數(shù)據(jù)進(jìn)行排序。實(shí)際上,致力于提高處理能力而增添更多節(jié)點(diǎn)會(huì)導(dǎo)致收益遞減,因?yàn)檫@會(huì)導(dǎo)致節(jié)點(diǎn)之間的過多數(shù)據(jù)傳送,反過來又成為明顯瓶頸。
因此,需要對(duì)存儲(chǔ)于數(shù)據(jù)庫中的大量數(shù)據(jù)進(jìn)行排序、檢索和更新的更高效且更快速方式。
技術(shù)實(shí)現(xiàn)要素:
公開一種用于對(duì)分布式數(shù)據(jù)庫系統(tǒng)中的數(shù)據(jù)進(jìn)行排序由此將所述數(shù)據(jù)選擇性地發(fā)送到適當(dāng)節(jié)點(diǎn)以進(jìn)行排序的方法和設(shè)備。首先,將數(shù)據(jù)劃分成值的范圍。這些值可以是數(shù)值,或可以是具有預(yù)定順序的字符(例如,字母),或其組合。所述范圍是相連的。出于排序的目的,為分布式數(shù)據(jù)庫系統(tǒng)的節(jié)點(diǎn)分配不同的值范圍。接著將數(shù)據(jù)分布到具有所述數(shù)據(jù)屬于的值范圍的節(jié)點(diǎn)。一旦已經(jīng)將數(shù)據(jù)集分配給各個(gè)節(jié)點(diǎn),個(gè)別節(jié)點(diǎn)就對(duì)其數(shù)據(jù)執(zhí)行排序。接著將節(jié)點(diǎn)執(zhí)行的排序的結(jié)果寫入到預(yù)定位置。因?yàn)槊總€(gè)范圍內(nèi)的值都經(jīng)過排序并且范圍是相連的,所以來自每個(gè)節(jié)點(diǎn)的結(jié)果可以寫入到預(yù)定存儲(chǔ)器位置,因此能在無須進(jìn)行任何其它處理的情況下對(duì)整個(gè)數(shù)據(jù)集進(jìn)行排序。
在一個(gè)實(shí)施例中,將范圍存儲(chǔ)為排序索引,排序索引可以用于促進(jìn)后續(xù)排序操作。
附圖說明
包含在并且構(gòu)成本說明書的一部分的附圖示出了本發(fā)明的各種實(shí)施例,并且與描述內(nèi)容一起用于解釋本發(fā)明的原則:
圖1是在其上可以實(shí)踐本發(fā)明的實(shí)施例的數(shù)據(jù)庫系統(tǒng)的圖。
圖2是根據(jù)本發(fā)明的實(shí)施例的排序緩存處理的流程圖。
圖3是根據(jù)本發(fā)明的實(shí)施例的基于排序索引的并行排序及合并操作的流程圖。
圖4是根據(jù)本發(fā)明的實(shí)施例的排序索引樹中的節(jié)點(diǎn)的結(jié)構(gòu)圖。
具體實(shí)施方式
現(xiàn)在將詳細(xì)地給出一些實(shí)施例的參考。雖然結(jié)合可替代的實(shí)施例描述該主題,但應(yīng)該理解它們不是旨在將請(qǐng)求保護(hù)的主題限制于這些實(shí)施例。相反,請(qǐng)求保護(hù)的主題旨在覆蓋可以包括在由附加的權(quán)利要求書限定的請(qǐng)求保護(hù)的主題的精神和范圍內(nèi)的替代物、修改和等同物。
另外,在以下本發(fā)明的詳細(xì)描述中,闡述了許多特定細(xì)節(jié)以便提供對(duì)請(qǐng)求保護(hù)主題的透徹理解。然而,所屬領(lǐng)域的技術(shù)人員將認(rèn)識(shí)到,可以在沒有這些具體細(xì)節(jié)的情況下實(shí)踐實(shí)施例。在其它實(shí)例中沒有詳細(xì)描述眾所周知的方法、流程、部件和電路,以免對(duì)本請(qǐng)求保護(hù)的主題的各方面和特征造成不必要地模糊。該具體實(shí)施方式的一些部分按照程序、步驟、邏輯塊、處理、以及對(duì)計(jì)算機(jī)存儲(chǔ)器中的數(shù)據(jù)位的操作的其它符號(hào)表示來呈現(xiàn)。
這些描述和表示是數(shù)據(jù)處理領(lǐng)域技術(shù)人員向該領(lǐng)域其他技術(shù)人員有效傳達(dá)工作實(shí)質(zhì)內(nèi)容使用的方法。將程序、計(jì)算機(jī)執(zhí)行的步驟、邏輯塊、過程等一般設(shè)想為首尾一致的步驟或指令序列,以產(chǎn)生期望的結(jié)果。這些步驟需要物理量的物理操控。
在本發(fā)明的一個(gè)實(shí)施例中,對(duì)數(shù)據(jù)集執(zhí)行排序操作。本發(fā)明可以處理任何大小的數(shù)據(jù)集。將數(shù)據(jù)集劃分成對(duì)應(yīng)于處理待排序的數(shù)據(jù)的節(jié)點(diǎn)數(shù)量的多個(gè)范圍。所述范圍是相連的、不重疊的,并且它們覆蓋數(shù)據(jù)中存儲(chǔ)的值的整個(gè)集合。這些值可以是數(shù)值,或可以是具有預(yù)定順序的字符(例如,字母),或其組合。出于排序的目的,為分布式數(shù)據(jù)庫系統(tǒng)的節(jié)點(diǎn)分配值的不同范圍。一般來說,選擇設(shè)置兩個(gè)范圍之間的界限的值。接著將數(shù)據(jù)分布到具有所述數(shù)據(jù)正好屬于的值范圍的特定節(jié)點(diǎn)。一旦已經(jīng)將數(shù)據(jù)集分配給各個(gè)節(jié)點(diǎn),個(gè)別節(jié)點(diǎn)就對(duì)其自身的數(shù)據(jù)執(zhí)行排序。接著將節(jié)點(diǎn)執(zhí)行的排序的結(jié)果寫入到預(yù)定位置。這自動(dòng)地形成待排序的整個(gè)數(shù)據(jù)集而無須執(zhí)行任何額外處理步驟。在一個(gè)實(shí)施例中,將范圍存儲(chǔ)為排序索引,排序索引可以用于促進(jìn)后續(xù)排序操作。不必針對(duì)每一個(gè)排序操作再次計(jì)算它們,由此節(jié)省可貴的處理能力和時(shí)間。這些排序索引在數(shù)據(jù)集發(fā)生改變(例如,增添或刪除數(shù)據(jù))時(shí)更新。
現(xiàn)在描述實(shí)例以幫助理解本發(fā)明的一個(gè)實(shí)施例。在此實(shí)例中,出于清楚且簡(jiǎn)單說明本發(fā)明起見給出小數(shù)據(jù)集。在實(shí)際應(yīng)用中,數(shù)據(jù)集相當(dāng)大且廣泛。假設(shè)任務(wù)是對(duì)以下數(shù)值的數(shù)據(jù)集從最小到最大進(jìn)行排序:1、3、4、2、6和5。首先,選擇分隔兩個(gè)范圍的值。在此實(shí)例中,選擇值“3”。任何值3或更小的值屬于第一范圍,而大于3的任何值屬于第二范圍。換句話說,第一范圍是1到3,且第二范圍是4到6。一旦確立范圍,排序處理就將個(gè)別數(shù)據(jù)值分配到其適當(dāng)范圍中。在此實(shí)例中,將值1分配到第一范圍,因?yàn)槠鋵儆?到3之間。將下一個(gè)值3也分配到第一范圍,因?yàn)槠鋵儆?到3之間。第三個(gè)值是4。將其分配到第二范圍,因?yàn)槠鋵儆?到6之間。將第四個(gè)值2分配到第一范圍。最后兩個(gè)值6和5屬于第二范圍。因此,第一分區(qū)含有值1、3和2。第二分區(qū)含有值4、6和5。對(duì)這些分區(qū)中的每個(gè)分區(qū)執(zhí)行排序操作??梢圆⑿械?即,通過兩個(gè)不同節(jié)點(diǎn)同時(shí)地)對(duì)這些較小分區(qū)執(zhí)行排序操作。更確切地說,一個(gè)節(jié)點(diǎn)對(duì)分配到第一分區(qū)的值進(jìn)行排序。另一個(gè)節(jié)點(diǎn)對(duì)分配到第二分區(qū)的值進(jìn)行排序。在此實(shí)例中,一個(gè)節(jié)點(diǎn)對(duì)值1、3和2進(jìn)行排序;另一個(gè)節(jié)點(diǎn)對(duì)值4、6和5進(jìn)行排序。在完成排序操作后,第一分區(qū)含有值1、2和3,且第二分區(qū)含有值4、5和6。接著將這兩個(gè)分區(qū)直接寫入到相連存儲(chǔ)器位置而無須執(zhí)行任何后續(xù)操作。換句話說,將第一分區(qū)寫入到存儲(chǔ)器位置,且將第二分區(qū)寫入到后續(xù)相鄰的存儲(chǔ)器位置。在實(shí)例中,通過將第一分區(qū)(1、2和3)寫入到存儲(chǔ)器,緊接著將第二分區(qū)(4、5和6)寫入到相鄰的存儲(chǔ)器位置,對(duì)整個(gè)數(shù)據(jù)集進(jìn)行排序,這形成整個(gè)排序數(shù)據(jù)集(1、2、3、4、5和6)。
在一個(gè)實(shí)施例中,首先將數(shù)據(jù)集劃分成較小數(shù)據(jù)核或集群,且接著將其發(fā)送到節(jié)點(diǎn)來執(zhí)行排序。一旦處理了所有較小數(shù)據(jù)核并將其發(fā)送到對(duì)應(yīng)的節(jié)點(diǎn),就將節(jié)點(diǎn)或列表的整個(gè)集合合并在一起。在此實(shí)例中,合并排序利用了將已經(jīng)排序的列表合并成新排序列表的易用性。為了執(zhí)行此排序/合并程序,針對(duì)節(jié)點(diǎn)或列表中的每個(gè)節(jié)點(diǎn)或列表執(zhí)行比較的第一到第二菊花鏈函數(shù)。例如,通過比較每?jī)蓚€(gè)元素(即,1與2,接著3與4…)并且在第一列表項(xiàng)應(yīng)出現(xiàn)在第二列表項(xiàng)之后的情況下調(diào)換每個(gè)項(xiàng)來對(duì)第一和第二列表項(xiàng)進(jìn)行比較。指示處理器將兩個(gè)所得列表中的每個(gè)合并為四個(gè)列表。接著處理器合并四個(gè)那些列表,并且重復(fù)此處理直到最后兩個(gè)列表合并到最終排序列表中。此處理在大量列表的情況下能很好地?cái)U(kuò)展,因?yàn)樽顗倪\(yùn)行時(shí)間是o(nlogn)。此外,處理是靈活的且可應(yīng)用于列表以及陣列。這一優(yōu)點(diǎn)歸因于相較隨機(jī)訪問所述處理需要順序訪問的特征。
參考圖1,示出在其上可以實(shí)施本發(fā)明的實(shí)施例的分布式數(shù)據(jù)庫系統(tǒng)。計(jì)算機(jī)網(wǎng)絡(luò)101用于載送各個(gè)節(jié)點(diǎn)102到104之間的電子通信。計(jì)算機(jī)網(wǎng)絡(luò)101可以是局域網(wǎng)、無線網(wǎng)絡(luò)、互聯(lián)網(wǎng)的一部分等。節(jié)點(diǎn)102到104可以是計(jì)算機(jī)系統(tǒng),例如服務(wù)器、工作站、大型機(jī),或基于云的計(jì)算機(jī)系統(tǒng)的部分或一些類型的虛擬化計(jì)算機(jī)系統(tǒng)。節(jié)點(diǎn)102到104耦合到專用、共享或虛擬化存儲(chǔ)裝置105到107。分布式數(shù)據(jù)庫管理器站108用于訪問、控制以及以另外的方式運(yùn)行和維持分布式數(shù)據(jù)庫系統(tǒng)。在一個(gè)實(shí)施例中,在ddbm108上執(zhí)行排序處理。ddbm108分配用于節(jié)點(diǎn)102到104中的每個(gè)節(jié)點(diǎn)的值的范圍。一個(gè)方面是分配范圍以在節(jié)點(diǎn)之間相等地分布工作量。另一個(gè)方面是分配范圍以在節(jié)點(diǎn)之間實(shí)現(xiàn)均衡工作量。接著根據(jù)這些范圍將數(shù)據(jù)集分布到各個(gè)節(jié)點(diǎn)102到104。節(jié)點(diǎn)102到104對(duì)分布到其上的數(shù)據(jù)集的部分執(zhí)行排序程序。接著將來自節(jié)點(diǎn)102到104中的每個(gè)節(jié)點(diǎn)的結(jié)果寫入到預(yù)定存儲(chǔ)器位置。由于所述范圍有意設(shè)計(jì)為順序的,因此來自節(jié)點(diǎn)102到104中的每個(gè)節(jié)點(diǎn)的結(jié)果也將是循序排序的,無須執(zhí)行任何額外處理。
參考圖2,示出根據(jù)一個(gè)實(shí)施例的處理流程。在此實(shí)施例中,基于對(duì)數(shù)據(jù)集進(jìn)行排序所需的值來劃分?jǐn)?shù)據(jù)集。將排序數(shù)據(jù)發(fā)送到與排序數(shù)據(jù)相關(guān)聯(lián)的每個(gè)節(jié)點(diǎn)數(shù)據(jù)。在初始階段210,有必要找到排序索引。一旦確定排序索引,就在階段220將數(shù)據(jù)分布到工作節(jié)點(diǎn)。在階段230中,每個(gè)節(jié)點(diǎn)對(duì)供選擇用數(shù)據(jù)進(jìn)行排序和寫入并將排序結(jié)果存儲(chǔ)到索引緩存中。在階段240中基于緩存的存儲(chǔ)索引或更新索引執(zhí)行排序。因此,每個(gè)節(jié)點(diǎn)具有針對(duì)每個(gè)值的范圍(例如,數(shù)據(jù)庫中的一列)。當(dāng)完成排序時(shí),可以將排序數(shù)據(jù)寫入到文件系統(tǒng)中的預(yù)測(cè)位置中。先前提及的范圍是排序索引,這些索引以樹數(shù)據(jù)結(jié)構(gòu)緩存用于進(jìn)一步使用以節(jié)省時(shí)間。在其它實(shí)施例中,可以陣列結(jié)構(gòu)或堆結(jié)構(gòu)存儲(chǔ)索引。此外,索引可以在數(shù)據(jù)集發(fā)生改變時(shí)(例如,當(dāng)增添或刪除數(shù)據(jù)時(shí))改變。通過使用索引,將數(shù)據(jù)分布到節(jié)點(diǎn)將變得非常高效、快速且經(jīng)濟(jì)。應(yīng)注意,可以僅通過主節(jié)點(diǎn)或通過多個(gè)節(jié)點(diǎn)進(jìn)行完成索引的階段210。假設(shè)存在n個(gè)需要排序的項(xiàng)和m個(gè)處理節(jié)點(diǎn)。
此外,在一個(gè)實(shí)施例中,如果在初始階段210不存在索引緩存信息,則必需找到第(n/m)個(gè)、第(2n/m)個(gè)、…、第((m-1)n/m)個(gè)值??梢酝ㄟ^一個(gè)節(jié)點(diǎn)或多個(gè)節(jié)點(diǎn)來執(zhí)行此過程,并且復(fù)雜度為o(mn)。隨后,可以實(shí)施以二叉查找樹結(jié)構(gòu)存儲(chǔ)這些索引的階段。如果存在復(fù)制值,可以將這些副本增添到樹節(jié)點(diǎn)。增添復(fù)制值有兩種方式:第一種方式是基于排序索引分布所述值且接著這些節(jié)點(diǎn)可以并行地進(jìn)行排序。
第二種方式是將基于數(shù)據(jù)的內(nèi)容劃分成單獨(dú)的部分,并且每個(gè)節(jié)點(diǎn)處理一個(gè)部分。另外,節(jié)點(diǎn)基于排序索引交換值。由此,并行地處理排序及合并。
現(xiàn)參考圖3,示出排序及合并操作。可以基于排序索引并行地處理排序及合并。例如,節(jié)點(diǎn)0(310)與節(jié)點(diǎn)1(320)交換數(shù)據(jù),且節(jié)點(diǎn)1與節(jié)點(diǎn)2(330)交換數(shù)據(jù),使得每個(gè)節(jié)點(diǎn)了解數(shù)據(jù)所屬于的最終節(jié)點(diǎn)。在一個(gè)實(shí)施例中,最初基于排序索引分布值。隨即,節(jié)點(diǎn)可以并行地進(jìn)行排序。在另一實(shí)施例中,將數(shù)據(jù)劃分成數(shù)據(jù)片,并且每個(gè)節(jié)點(diǎn)處理其數(shù)據(jù)片。節(jié)點(diǎn)后續(xù)基于排序索引交換值,使得并行地處理排序及合并。在這兩個(gè)實(shí)施例中,每個(gè)節(jié)點(diǎn)了解數(shù)據(jù)所屬于的最終節(jié)點(diǎn)。
參考圖4,示出排序索引樹中的節(jié)點(diǎn)的結(jié)構(gòu)。每個(gè)節(jié)點(diǎn)具有以下信息:當(dāng)前值401、當(dāng)前值的數(shù)量402、小于當(dāng)前值的數(shù)據(jù)的數(shù)量403、大于當(dāng)前值的數(shù)據(jù)的數(shù)量404。另外,除最底部(葉子)節(jié)點(diǎn)之外,每個(gè)節(jié)點(diǎn)具有左側(cè)子節(jié)點(diǎn)指針405和右側(cè)子節(jié)點(diǎn)指針406。子節(jié)點(diǎn)是在節(jié)點(diǎn)樹數(shù)據(jù)結(jié)構(gòu)中從其依賴節(jié)點(diǎn)進(jìn)一步向下的節(jié)點(diǎn)。當(dāng)通過增添和/或刪除值更新數(shù)據(jù)時(shí),通過找到下一個(gè)更大或更小值來更新索引。此操作的復(fù)雜度是o(n)。為了減少此類更新的頻率,可以使用“窗口”來延遲索引的更新,因此當(dāng)執(zhí)行排序的步驟或日期設(shè)置更新的數(shù)量超出窗口大小時(shí)發(fā)生更新。
現(xiàn)在描述實(shí)例來說明節(jié)點(diǎn)的功能。在此實(shí)例中,給出根節(jié)點(diǎn)的以下數(shù)據(jù)為:
未排序數(shù)據(jù):1、5、2、5、7、8、4
當(dāng)前值:5
此值的數(shù)量:2
更小值的數(shù)量:3(1、2和4)
更大值的數(shù)量:2(7和8)
因此,對(duì)于此特定節(jié)點(diǎn)的索引存儲(chǔ)以下信息:5、2、3和2。
整體上,所提出的方法是基于以下觀察結(jié)果:對(duì)于大數(shù)據(jù),精確排序之前的粗略排序變得越來越重要,并且粗略排序信息可以重復(fù)使用,因?yàn)槠涫褂幂^少存儲(chǔ)器并且可以容易地存儲(chǔ)。這允許以下兩者:減少節(jié)點(diǎn)之間的數(shù)據(jù)移動(dòng),因?yàn)榫W(wǎng)絡(luò)帶寬仍是基于集群的應(yīng)用中的主要瓶頸之一,并且其還減少磁盤和計(jì)算單元等慢速存儲(chǔ)裝置之間的數(shù)據(jù)移動(dòng)。
此方法的優(yōu)勢(shì)是其加快排序速度,特別是對(duì)于重復(fù)排序。此外,緩存大小相對(duì)極小,使得存儲(chǔ)成本非常小。因?yàn)榕判虿僮骼缭跀?shù)據(jù)庫操作中廣泛使用,所以排序結(jié)果可以用作最終結(jié)果或其它操作的中間結(jié)果,例如連接兩個(gè)表。一些其它應(yīng)用包含但不限于以下。找到前n項(xiàng)函數(shù)/對(duì)其排序因去除幾個(gè)步驟而經(jīng)歷性能改進(jìn)。通過利用本發(fā)明的實(shí)施例,不需要處理整個(gè)數(shù)據(jù)集。具有硬件排序引擎的應(yīng)用還因?yàn)楸景l(fā)明使頻繁的數(shù)據(jù)傳送最小化而經(jīng)歷性能改進(jìn)。模糊邏輯/計(jì)算因范圍的重要性而將是實(shí)施本發(fā)明的理想選擇。本發(fā)明改進(jìn)性能的又一應(yīng)用是關(guān)于“連接”表與數(shù)據(jù)庫中的未排序列。相對(duì)于兩個(gè)關(guān)系r和s的簡(jiǎn)單的嵌套循環(huán)連接和經(jīng)典散列連接算法通常不適合于大表,因?yàn)檫B接關(guān)系無法適應(yīng)存儲(chǔ)器。因此,通常使用分區(qū)散列連接算法,由此連接執(zhí)行被分成單獨(dú)部分。使用本發(fā)明排序索引,可以容易地分隔r和s,且接著在本地針對(duì)每個(gè)部分執(zhí)行散列連接。另外,本發(fā)明的實(shí)施例可以應(yīng)用于基于硬件的加速器例如,現(xiàn)代fpga可以在幾個(gè)時(shí)鐘周期對(duì)128數(shù)據(jù)進(jìn)行排序,但是這會(huì)花費(fèi)非常長的時(shí)間來合并大數(shù)據(jù),從而大大降低高性能硬件的優(yōu)勢(shì)。
關(guān)于本發(fā)明的實(shí)施例的另一個(gè)優(yōu)勢(shì)或應(yīng)用是不需要基于一個(gè)列對(duì)整個(gè)數(shù)據(jù)庫進(jìn)行排序。僅需要知道用以加速處理速度的范圍。例如,在tpc-hq9中,需要散列連接兩個(gè)表“partsupp”和“l(fā)ineitem”,但是它們通常分別通過partkey和orderkey來排序。當(dāng)數(shù)據(jù)庫軟件無法在緩存/存儲(chǔ)器中處理或存儲(chǔ)一個(gè)表時(shí),需要逐數(shù)據(jù)片地散列連接。復(fù)雜度是o(mn),其中m是partsupp中的數(shù)據(jù)片的數(shù)量并且n是lineitem中的數(shù)據(jù)片的數(shù)量。如果在lineitem中存在針對(duì)partkey的排序緩存信息,那么排序可以是基于partkey的lineitem。根據(jù)本發(fā)明的實(shí)施例,通過利用散列連接與表partsupp,復(fù)雜度變?yōu)閛(m+n)。
綜上所述,因?yàn)樵S多操作需要排序的列,所以排序在數(shù)據(jù)庫操作中極為重要。本發(fā)明的實(shí)施例提供更容易且更高效的處理來壓縮數(shù)據(jù)并改進(jìn)緩存命中率以及提高更快的連接操作。例如,c-store數(shù)據(jù)庫是面向列的dbms,并且可以集中于排序??梢园慈魏螛?biāo)準(zhǔn)對(duì)排序數(shù)據(jù)進(jìn)行排序。然而,這通常需要多個(gè)復(fù)本。此排序是一些數(shù)據(jù)庫應(yīng)用中的主要任務(wù)。本發(fā)明的排序緩存樹(sortcachetree,sct)可以加速這些應(yīng)用。
本發(fā)明的另一個(gè)優(yōu)勢(shì)是關(guān)于數(shù)據(jù)合并??梢匀菀椎貙讉€(gè)排序緩存樹(sct)合并在一起。例如,可以在一個(gè)節(jié)點(diǎn)內(nèi)合并兩個(gè)節(jié)點(diǎn),其中每個(gè)節(jié)點(diǎn)具有4分區(qū)sct。還可以在單個(gè)節(jié)點(diǎn)中使用sct。對(duì)于單個(gè)節(jié)點(diǎn),由于磁盤i/o操作更少,因此sct方法比現(xiàn)有方法更快。例如,假定節(jié)點(diǎn)具有1g存儲(chǔ)器和磁盤上的8g未排序數(shù)據(jù),典型現(xiàn)有技術(shù)排序合并方法對(duì)比本發(fā)明的比較如下:
排序-合并:
1.排序:(讀盤1g+排序1g+寫盤1g)×8
2.合并成2g:(讀盤2g+合并2g+寫盤2g)×4
3.合并成4g:(讀盤4g+合并4g+寫盤4g)×2
4.合并成8g:讀盤8g+合并8g+寫盤8g
總計(jì):讀盤32g+排序8g+合并24g+寫盤32g
在本發(fā)明的實(shí)施例中:
1.分區(qū):讀盤8g+寫盤8g
2.排序:(讀盤1g+排序1g+寫盤1g)×8
總計(jì):讀盤16g+排序8g+寫盤16g
相比而言,現(xiàn)有技術(shù)需要96g,而本發(fā)明的實(shí)施例僅需要40g。效率上存在超過50%改進(jìn)。
在一些實(shí)施例中,排序索引的數(shù)據(jù)結(jié)構(gòu)可以是二叉樹或與三態(tài)內(nèi)容尋址存儲(chǔ)器(ternarycontentaddressablememory,tcam)類似的特定硬件,由此輸入鍵并行地與許多范圍形成對(duì)比。
根據(jù)本發(fā)明的實(shí)施例如此處所述。雖然本發(fā)明已經(jīng)在特定實(shí)施例中進(jìn)行了描述,但是應(yīng)理解,本發(fā)明不應(yīng)該被解釋為被這些實(shí)施例限制,而是根據(jù)所附權(quán)利要求書進(jìn)行解釋。