基于數(shù)據(jù)分組方法的數(shù)據(jù)倉(cāng)庫(kù)并行預(yù)計(jì)算和查詢(三)_第1頁(yè)
基于數(shù)據(jù)分組方法的數(shù)據(jù)倉(cāng)庫(kù)并行預(yù)計(jì)算和查詢(三)_第2頁(yè)
基于數(shù)據(jù)分組方法的數(shù)據(jù)倉(cāng)庫(kù)并行預(yù)計(jì)算和查詢(三)_第3頁(yè)
基于數(shù)據(jù)分組方法的數(shù)據(jù)倉(cāng)庫(kù)并行預(yù)計(jì)算和查詢(三)_第4頁(yè)
基于數(shù)據(jù)分組方法的數(shù)據(jù)倉(cāng)庫(kù)并行預(yù)計(jì)算和查詢(三)_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、基于數(shù)據(jù)分組方法的數(shù)據(jù)倉(cāng)庫(kù)并行預(yù)計(jì)算和查詢?nèi)诹虏⑿谢惴ǖ膶?shí)現(xiàn)6.1串行預(yù)計(jì)算程序構(gòu)造在串行預(yù)計(jì)算程序中,一共有ubing、dfhandle、qutientube和tuplehandle4個(gè)類(lèi),其中dfhandle和tuplehandle兩個(gè)類(lèi)是輔助功能類(lèi)。它們的類(lèi)圖如圖6.1所示。dfhandle的主要功能是翻開(kāi)關(guān)閉數(shù)據(jù)文件,將數(shù)據(jù)文件中的元組一條一條地讀進(jìn)來(lái),然后將該條元組交給tuplehandle處理,tuplehandle將元組的各維數(shù)據(jù)分割開(kāi)來(lái),每次處理一維,并將該維數(shù)據(jù)存在程序指定的一個(gè)內(nèi)存區(qū)域中。關(guān)于ubing類(lèi)和qutientube類(lèi)的詳細(xì)介紹,將在以下的章節(jié)中給出。圖6.

2、1dfhandle類(lèi)和tuplehandle類(lèi)6.1.1ubing類(lèi)ubing類(lèi)的類(lèi)圖如圖6.2所示,其中l(wèi)addata()的作用是使用dfhandle類(lèi),翻開(kāi)指定的數(shù)據(jù)文件,將元組讀出之后,使用tuplehandle來(lái)將各個(gè)維度和度量值的數(shù)據(jù)拆分開(kāi)來(lái),然后對(duì)所有的維度做映射操作,寫(xiě)入映射文件,同時(shí)將映射后的維度數(shù)據(jù)存在data這個(gè)二維數(shù)組里,度量值存在srdata中,直到把所有數(shù)據(jù)文件都讀入data和srdata中。在讀數(shù)據(jù)之前,laddata還會(huì)先統(tǒng)計(jì)基表中有多少條元組,元組有多少維和多少個(gè)度量值,某度量值上的聚集操作分別是哪種,這些數(shù)據(jù)分別存在tuplesnu,disnu,srsnu和a

3、ggfunrder中。avgfun()、axfun()、infun()、sufun()和untfun()里面分別是平均、最大值、最小值、和、計(jì)數(shù)等聚集操作的實(shí)現(xiàn)。圖6.2ubing類(lèi)ubing類(lèi)的工作主要是完成預(yù)計(jì)算真正開(kāi)場(chǎng)之前的準(zhǔn)備工作,把所有數(shù)據(jù)都讀入內(nèi)存之后,qutientube類(lèi)便可以使用這些數(shù)據(jù)來(lái)進(jìn)展預(yù)計(jì)算工作。ubing類(lèi)的prepute()函數(shù)是一個(gè)虛函數(shù),它的詳細(xì)實(shí)如今qutientube中。qutientube類(lèi)是ubing類(lèi)的一個(gè)子類(lèi)。6.1.2qutientube類(lèi)qutientube類(lèi)publi繼承于ubing。它的類(lèi)圖如圖6.3所示。通過(guò)調(diào)用prepute()開(kāi)場(chǎng)預(yù)計(jì)

4、算工作。圖6.3qutientube類(lèi)程序首先會(huì)創(chuàng)立disnu+1個(gè)aggdidatax文件,用來(lái)存放不同層次的上界,同時(shí)也創(chuàng)立同樣多個(gè)的aggsrdatax文件,用來(lái)存放相對(duì)應(yīng)的度量值。data0中存放ubing從數(shù)據(jù)文件讀出的data內(nèi)容,同樣srdata0中存放相應(yīng)的度量值,data1和srdata1中將存放的是將data0、srdata0里數(shù)據(jù)排序后的結(jié)果,用來(lái)排序的算法在partitin()中實(shí)現(xiàn)。prepute()接下來(lái)便會(huì)調(diào)用dfs()開(kāi)場(chǎng)計(jì)算上界并將上界與其所對(duì)應(yīng)的度量值寫(xiě)入相應(yīng)層次的文件中。dfs()的詳細(xì)算法詳見(jiàn)本文4.2節(jié)。預(yù)計(jì)算程序的數(shù)據(jù)流圖如圖6.4所示。圖6.4串行

5、預(yù)計(jì)算程序中的數(shù)據(jù)流6.2預(yù)計(jì)算并行化并行預(yù)計(jì)算程序中,在串行程序的根底上增加了兩個(gè)類(lèi):分別是dispathanager類(lèi)和dispathrker類(lèi)。顧名思義,dispathanager類(lèi)中的方法是為主從形式中的主進(jìn)程所調(diào)用,dispathrker類(lèi)中的方法是在從進(jìn)程中調(diào)用。根據(jù)本文5.1節(jié)中的描繪,dispathanger類(lèi)主要的工作是完成數(shù)據(jù)讀入、映射和數(shù)據(jù)分發(fā)工作。dispathrker的工作是接收主進(jìn)程發(fā)送過(guò)來(lái)的數(shù)據(jù)。6.2.1dispathanager類(lèi)和dispathrker類(lèi)dispathanager類(lèi)和dispathrker類(lèi)的類(lèi)圖如圖6.5所示。數(shù)據(jù)的讀入工作將由ubing類(lèi)

6、轉(zhuǎn)移到dispathanager類(lèi)中,但由于從進(jìn)程無(wú)法接觸到文件信息,因此,主進(jìn)程必須將與數(shù)據(jù)文件相關(guān)的數(shù)據(jù)預(yù)先得出并發(fā)送給每個(gè)從進(jìn)程。dispathanager在初始化時(shí)便會(huì)調(diào)用getdatafilenu()和getnfig()。getdatafilenu函數(shù)使用dfhandle和tuplehandle來(lái)完成工作。首先翻開(kāi)數(shù)據(jù)文件,將第一行讀出。數(shù)據(jù)文件的第一行是用來(lái)寫(xiě)明基表有多少個(gè)維度和度量值,每個(gè)維度和度量值的名稱分別是什么。getdatafilenu里會(huì)根據(jù)里面的信息分辨出哪些是維度數(shù)據(jù),哪些是度量值,分別有多少個(gè),度量值以何種方式進(jìn)展聚集操作等,然后把這些數(shù)據(jù)保存下來(lái)。最后是統(tǒng)計(jì)整個(gè)

7、數(shù)據(jù)文件有多少條元組。這些操作根本和ubing:laddata中前面局部的操作一樣。圖6.5dispathanager和dispathrker類(lèi)圖getnfig函數(shù)的作用是將保存著各個(gè)進(jìn)程數(shù)據(jù)分配比例的配置文件內(nèi)容讀出,并根據(jù)getdatafilenu中得到的元組條數(shù),計(jì)算出每個(gè)進(jìn)程應(yīng)當(dāng)接收的元組條數(shù)。計(jì)算完之后,將這些信息保存在pnfig中。接下來(lái),dispathanager便會(huì)將pnfig里的數(shù)據(jù)連同度量值操作方式和文件夾名稱發(fā)送到每個(gè)相應(yīng)的進(jìn)程中,如圖6.6所示。同時(shí),在從進(jìn)程中運(yùn)行的dispathrker也調(diào)用了revnfig()。主從進(jìn)程間通過(guò)pi的點(diǎn)對(duì)點(diǎn)通信,完成配置數(shù)據(jù)的發(fā)送和接

8、收。dispathrker接收完配置數(shù)據(jù)之后,將配置數(shù)據(jù)存如pnfig里。在完成配置數(shù)據(jù)的交互之后,dispathrker將會(huì)利用收到的數(shù)據(jù),如元組條數(shù)、維度數(shù)和度量值數(shù)來(lái)決定該分配多大的內(nèi)存空間以存下將要收到的數(shù)據(jù),并開(kāi)場(chǎng)等待接收數(shù)據(jù)。而dispathanager那么會(huì)調(diào)用laddata()來(lái)將數(shù)據(jù)文件載入內(nèi)存。dispathanager在laddata()時(shí)是將數(shù)據(jù)存入兩個(gè)長(zhǎng)度分別為idinu*ituplenu和isrnu*ituplenu的一維數(shù)組中,它們分別是pdidata和psrdata。與串行預(yù)計(jì)算程序中的ubing作用類(lèi)似,dispathanager會(huì)在載入數(shù)據(jù)的同時(shí)完成映射的工

9、作。但當(dāng)dispathanager準(zhǔn)備好要發(fā)送到其中一個(gè)從進(jìn)程的數(shù)據(jù)之后,它便會(huì)調(diào)用senddata(),指明將要發(fā)送的進(jìn)程號(hào),將數(shù)據(jù)發(fā)送出去。如圖6.7所示。圖6.6發(fā)送和接收配置數(shù)據(jù)示意圖圖6.7發(fā)送和接收數(shù)據(jù)示意圖在每個(gè)從進(jìn)程都接收完數(shù)據(jù)和主進(jìn)程完成laddata之后,每個(gè)進(jìn)程都會(huì)有裝著維度數(shù)據(jù)和度量值的兩個(gè)一維數(shù)組。在并行程序的ubing中,由于不再需要與文件打交道,所以將ubing:laddata()重載,將它的輸入?yún)?shù)由數(shù)據(jù)文件名改為文件夾名稱、pdidata、psrdata和paggfun。在這個(gè)函數(shù)中,ubing將會(huì)把pdidata和psrdata這兩個(gè)一維數(shù)組的數(shù)據(jù)讀出,存成

10、二維數(shù)組。這樣,數(shù)據(jù)發(fā)送過(guò)程已經(jīng)結(jié)束,預(yù)計(jì)算開(kāi)場(chǎng)之前的數(shù)據(jù)準(zhǔn)備工作已經(jīng)完成,接下來(lái)便是各個(gè)進(jìn)程調(diào)用qutientube里的prepute()函數(shù),開(kāi)場(chǎng)預(yù)計(jì)算工作。接下來(lái)在每個(gè)進(jìn)程中的工作情況,和串行環(huán)境下的情況一致。6.3串行查詢程序構(gòu)造在串行查詢程序中,同樣也有dfhandle和tuplehandle這兩個(gè)輔助類(lèi)。實(shí)現(xiàn)查詢功能主要由以下三個(gè)類(lèi)完成:aggstrage、lseubequery、queryputatin。它們的類(lèi)圖如圖6.8所示。圖6.8查詢程序類(lèi)aggstrage類(lèi)的主要功能是面向立方體數(shù)據(jù)的操作。它封裝了讀入預(yù)計(jì)算所產(chǎn)生文件的方法,如ladapdata是將ap文件讀入,用來(lái)映

11、射查詢語(yǔ)句。ladaggdata用來(lái)將某一層立方體文件內(nèi)容讀進(jìn)內(nèi)存。串行查詢程序首先會(huì)通過(guò)queryputatin:getqueryrerd()將查詢語(yǔ)句批量地讀入,存在queryrerds里,然后調(diào)用lseubequery:query()。在lseubequery:query()中,程序通過(guò)aggstrage所實(shí)例化的aggstrage對(duì)象將映射關(guān)系文件讀入,并調(diào)用apsti()將查詢語(yǔ)句映射為整型數(shù)組。映射后的查詢語(yǔ)句存在tqrybj中,然后將tqrybj中的內(nèi)容,一次一條地遞交給pintquery()進(jìn)展查詢。大致的流程如圖6.9所示。圖6.9串行查詢流程pintquery首先會(huì)確定該條

12、查詢語(yǔ)句的層次,然后判斷該層次的數(shù)據(jù)是否已經(jīng)載入內(nèi)存,假如沒(méi),那么調(diào)用aggstrage:ladaggdata()將其載到內(nèi)存中。然后開(kāi)場(chǎng)順序掃描各條上界,使用isvered來(lái)判斷該上界是否被查詢語(yǔ)句所覆蓋。假如掃描完一層還找不到所覆蓋的上界,那么繼續(xù)掃描下一層文件。詳細(xì)流程在本文4.3節(jié)。6.4并行查詢?cè)诓⑿胁樵兂绦蛑?,增加了兩個(gè)類(lèi),分別是queryanager類(lèi)和queryrker類(lèi)。串行程序中的queryputatin類(lèi)被取消,它的功能將在queryanager類(lèi)中實(shí)現(xiàn),lseubequery中的apsti()函數(shù)也放在queryanager類(lèi)中實(shí)現(xiàn)。圖6.10中所示為queryanag

13、er類(lèi)和queryrker類(lèi)的類(lèi)圖。6.4.1queryanager類(lèi)和queryrker類(lèi)并行查詢程序首先會(huì)在主進(jìn)程中調(diào)用queryanager:ladquery()來(lái)將查詢語(yǔ)句全部存入內(nèi)存queryrerds二維數(shù)組中。接著就是調(diào)用queryanager:apquery()將查詢語(yǔ)句映射成整型數(shù)組,存入queryanager:pquery中。與并行預(yù)計(jì)算程序類(lèi)似,并行查詢程序中,主進(jìn)程也會(huì)預(yù)先將一些配置數(shù)據(jù)發(fā)送給從進(jìn)程,其中包括了查詢語(yǔ)句的條數(shù)、數(shù)據(jù)的維度和度量值數(shù)。從進(jìn)程在接收完這些數(shù)據(jù)之后,做一些初始化工作,為即將發(fā)送過(guò)來(lái)的查詢數(shù)據(jù)做準(zhǔn)備。實(shí)現(xiàn)這個(gè)功能的是queryanager:bra

14、dastnfig()和queryrker:reeivenfig()。在配置數(shù)據(jù)發(fā)送完畢之后,便是開(kāi)場(chǎng)發(fā)送查詢數(shù)據(jù),主進(jìn)程調(diào)用queryanager:bradastquery()將查詢數(shù)據(jù)分發(fā)到各個(gè)從進(jìn)程上,從進(jìn)程接收完之后,將查詢語(yǔ)句存入queryrker:pquery中。結(jié)果的指針。主進(jìn)程與從進(jìn)程分別調(diào)用lseubequery:query(queryanager:pquery,queryanager:pqueryresults0)和lseubequery:query(queryrker:pquery,queryrker:pqueryresult)開(kāi)場(chǎng)進(jìn)展查詢工作。圖6.10queryanager類(lèi)和queryrker類(lèi)查詢的流程如圖6.11所示,在query()中的實(shí)現(xiàn)過(guò)程根本與串行程序過(guò)程一致。在查詢完畢之后,各個(gè)從進(jìn)程將會(huì)把存放著查詢結(jié)果的數(shù)組

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論