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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

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

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

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

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

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

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

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

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

溫馨提示

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

評論

0/150

提交評論