本發(fā)明涉及數(shù)據(jù)庫
技術(shù)領(lǐng)域:
:,特別是涉及一種基于OLAP的數(shù)據(jù)查詢服務(wù)器、系統(tǒng)和方法。
背景技術(shù):
::OLAP(OnlineAnalyticalProcessing,聯(lián)機分析處理)是一種重要的數(shù)據(jù)分析手段,為企業(yè)決策提供支持。隨著數(shù)據(jù)量的不斷增長以及用戶對性能要求的不斷提高,性能問題會變得更加突出。同時,OLAP通常分析的是具有一定時效性的歷史數(shù)據(jù),已經(jīng)不能滿足當(dāng)代商業(yè)企業(yè)對稍縱即逝商機的捕獲要求,企業(yè)需要分析最新數(shù)據(jù)而不是歷史數(shù)據(jù)?,F(xiàn)有的OLAP系統(tǒng),基于CPU進(jìn)行數(shù)據(jù)查詢。過去十年中,通用CPU技術(shù)有了很大進(jìn)展,但性能提高的速度卻越來越慢,單線程程序性能在很大程度上受到了限制。這些限制一方面來自于通用計算程序中過低的指令級并行,另一方面CPU受制于功率墻(PowerWall)、存儲墻(MemoryWall)和頻率墻(FrequencyWall),性能很難繼續(xù)提高。處理器不會越來越快,而是越來越寬。當(dāng)前設(shè)計的處理器中,大部分晶體管被用于制造高速緩存(Cache),而不是用作計算單元。這樣做雖然能把處理器功耗控制在合理的范圍內(nèi),卻阻礙了性能的進(jìn)一步提高,因此,基于CPU的OLAP系統(tǒng)的難以滿足人們高效率查詢性能的要求。技術(shù)實現(xiàn)要素:基于此,有必要提供一種查詢效率高的基于OLAP的數(shù)據(jù)查詢服務(wù)器、系統(tǒng)和方法。一種基于OLAP的數(shù)據(jù)查詢服務(wù)器,包括CPU和GPU;所述CPU包括請求獲取模塊、元數(shù)據(jù)模塊和維過濾模塊;所述GPU包括方體過濾模塊、聚集模塊和方體數(shù)據(jù)模塊;所述請求獲取模塊,用于獲取數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢請求包括待查詢的維表信息和事實表信息;所述元數(shù)據(jù)模塊,用于加載與所述待查詢的維表信息對應(yīng)的維表;所述維過濾模塊,用于根據(jù)所述數(shù)據(jù)查詢請求,對所述維表進(jìn)行過濾,獲得過濾后的以鍵值對表示的鍵值對數(shù)據(jù),并將所述鍵值對數(shù)據(jù)發(fā)送給GPU;所述方體數(shù)據(jù)模塊,用于存儲與所述事實表信息對應(yīng)的方體數(shù)據(jù);;所述方體過濾模塊,用于根據(jù)所述鍵值對數(shù)據(jù)對所述方體數(shù)據(jù)過濾得到過濾后的數(shù)據(jù);所述聚集模塊,用于對所述過濾后的數(shù)據(jù)進(jìn)行分組聚集得到請求數(shù)據(jù)。在一個實施例中,所述維表信息包括維和維的層次信息;所述請求獲取模塊包括驗證器和解析器;所述驗證器和所述解析器分別與所述元數(shù)據(jù)模塊連接;所述驗證器,用于獲取服務(wù)API,并驗證所述服務(wù)API是否符合規(guī)范以及封裝在所述服務(wù)API中的維和維的層次信息是否正確;所述解析器,用于在所述驗證器驗證通過后,對所述服務(wù)API進(jìn)行解析,得到所述數(shù)據(jù)查詢請求。在一個實施例中,所述數(shù)據(jù)查詢請求的類型包括上卷、下鉆、切片、切塊和旋轉(zhuǎn)。在一個實施例中,所述CPU還包括緩存模塊和查詢模塊,所述緩存模塊,用于緩存歷史查詢數(shù)據(jù);所述查詢模塊,用于在接收到數(shù)據(jù)查詢請求時,查詢所述緩存模塊中是否存儲有與所述數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù);所述維過濾模塊在所述緩存模塊未存儲有與所述數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)時被啟動;所述聚集模塊還用于將分組聚集得到的請求數(shù)據(jù)發(fā)送至所述緩存模塊進(jìn)行存儲。在一個實施例中,所述CPU還包括回寫模塊,用于接收回寫請求,并根據(jù)所述回寫請求對分組聚集得到的所述請求數(shù)據(jù)進(jìn)行修改。一種基于OLAP的數(shù)據(jù)查詢系統(tǒng),包括表示層、存儲層和上述的基于OLAP的數(shù)據(jù)查詢服務(wù)器;所述表示層用于提供數(shù)據(jù)查詢請求輸入入口,將用戶輸入的數(shù)據(jù)查詢請求封裝為對應(yīng)的服務(wù)API,并將所述服務(wù)API發(fā)送至CPU,以及用于展示查詢到的請求數(shù)據(jù);所述存儲層用于存儲OLAP的相關(guān)數(shù)據(jù),所述相關(guān)數(shù)據(jù)包括維表和事實表;所述元數(shù)據(jù)模塊,用于從所述存儲層中加載與所述待查詢的維表信息對應(yīng)的維表;所述方體數(shù)據(jù)模塊,用于存儲與所述事實表信息對應(yīng)的方體數(shù)據(jù)。一種基于OLAP的數(shù)據(jù)查詢方法,包括:CPU獲取數(shù)據(jù)查詢請求,所述數(shù)據(jù)查詢請求包括待查詢的維表信息和事實表信息;CPU加載與所述待查詢的維表信息對應(yīng)的維表;CPU根據(jù)所述數(shù)據(jù)查詢請求,對所述維表進(jìn)行過濾,獲得過濾后的以鍵值對表示的鍵值對數(shù)據(jù),并將所述鍵值對數(shù)據(jù)發(fā)送給GPU;GPU根據(jù)所述鍵值對數(shù)據(jù)對存儲在GPU中與事實表信息對應(yīng)的方體數(shù)據(jù)過濾得到過濾后的數(shù)據(jù);GPU對所述過濾后的數(shù)據(jù)進(jìn)行分組聚集得到請求數(shù)據(jù)。在一個實施例中,所述CPU獲取數(shù)據(jù)查詢請求的步驟包括:CPU獲取服務(wù)API;CPU驗證所述服務(wù)API是否符合規(guī)范以及封裝在所述服務(wù)API中的維和維的層次信息是否正確;當(dāng)驗證通過時,CPU對所述服務(wù)API進(jìn)行解析,得到所述數(shù)據(jù)查詢請求。在一個實施例中,所述數(shù)據(jù)查詢請求的類型包括上卷、下鉆、切片、切塊和旋轉(zhuǎn)。在一個實施例中,在所述當(dāng)驗證通過時,對所述服務(wù)API進(jìn)行解析,得到數(shù)據(jù)查詢請求的步驟之后,還包括:CPU查詢緩存中是否存儲有與所述數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù);若是,則CPU從緩存中返回與所述數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù);若否,則執(zhí)行CPU根據(jù)所述數(shù)據(jù)查詢請求,對所述維表進(jìn)行過濾,獲得過濾后的以鍵值對表示的鍵值對數(shù)據(jù),并將所述鍵值對數(shù)據(jù)發(fā)送給GPU的步驟;在所述GPU對所述過濾后的數(shù)據(jù)進(jìn)行分組聚集得到請求數(shù)據(jù)的步驟之后,還包括:GPU將分組聚集得到的請求數(shù)據(jù)發(fā)送至CPU并存儲在所述緩存中。上述的基于OLAP的數(shù)據(jù)查詢服務(wù)器,在接收到數(shù)據(jù)查詢請求時,在CPU端進(jìn)行維表數(shù)據(jù)過濾,在GPU端進(jìn)行事實表數(shù)據(jù)過濾和分組聚集。由于GPU的具有高性能高效率的特點,通過利用GPU的計算資源,利用GPU加速OLAP的查詢,有效地提高OLAP的處理效率。附圖說明圖1為一個實施例的基于OLAP的數(shù)據(jù)查詢服務(wù)器的功能模塊示意圖;圖2為一個實施例的事實表的存儲格式;圖3為另一個實施例的基于OLAP的數(shù)據(jù)查詢服務(wù)器的功能模塊示意圖;圖4為一個實施例的基于OLAP的數(shù)據(jù)查詢系統(tǒng)的功能模塊示意圖;圖5為一個實施例的基于OLAP的數(shù)據(jù)查詢方法的流程圖;圖6為另一個實施例的基于OLAP的數(shù)據(jù)查詢方法的流程圖;圖7為一個實施例的上卷查詢操作中對where子句的處理運行過程;圖8為一個實施例的上卷查詢操作中對另一個where子句的處理運行過程;圖9為一個實施例的上卷查詢操作中對整型字段的規(guī)約化的過程;圖10為一個實施例的上卷查詢操作中獲取的滿足條件的結(jié)果數(shù)據(jù);圖11為一個實施例的上卷查詢操作中獲取的最終結(jié)果;圖12為一個實施例的上卷查詢操作在前端顯示的最終結(jié)果。具體實施方式為了使本發(fā)明的目的、技術(shù)方案以及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不限定本發(fā)明。在一個實施例中,提供一種基于OLAP的數(shù)據(jù)查詢服務(wù)器,該服務(wù)器包括CPU(CentralProcessingUnit,中央處理器)和GPU(GraphicsProcessingUnit,圖形處理器)。由于游戲玩家對圖形顯示的苛刻要求,近幾年來,GPU的性能按時間呈幾何級數(shù)增長,GPU已經(jīng)從由若干專用的固定功能單元(FixedFunctionUnit)組成的專用并行處理器,進(jìn)化為了以通用計算資源為主,固定功能單元為輔的架構(gòu),稱為GPGPU(GeneralPurposeGPU,通用圖形處理器)。OLAP作為一類數(shù)據(jù)和計算密集型應(yīng)用,可以通過GPU來加速其計算量大、性能要求高的一些操作,可以有效地提高OLAP的處理效率。如圖1所示,基于OLAP的數(shù)據(jù)查詢服務(wù)器10,包括CPU12和GPU14。CPU12包括請求獲取模塊120,元數(shù)據(jù)模塊122和維過濾模塊124。GPU14包括方體過濾模塊140、聚集模塊142和方體數(shù)據(jù)模塊144。請求獲取模塊120,用于獲取數(shù)據(jù)查詢請求。數(shù)據(jù)查詢請求包括待查詢的維表信息和事實表信息。元數(shù)據(jù)模塊122,用于加載與待查詢的維表信息對應(yīng)的維表。維表包含了事實表中指定屬性的相關(guān)詳細(xì)信息,比如,詳細(xì)的產(chǎn)品對應(yīng)的產(chǎn)品維表,或按時間分析的時間維表。維表示人們分析數(shù)據(jù)的方式,也是組成方體的基本元素,可以包含多個層次,每個層次有多個成員,例如,包括產(chǎn)品信息的維表通常包含將產(chǎn)品分為食品、飲料、非消費品等若干類層次結(jié)構(gòu),維表中的列字段可以將信息分為不同的層次的結(jié)構(gòu)。維表以列數(shù)組結(jié)構(gòu)體方式存儲,一個實施例中,一個客戶維可以存儲為結(jié)構(gòu)體如下:維的層次信息通過模式文件存儲和表示。維過濾模塊124,用于根據(jù)數(shù)據(jù)查詢請求,對維表進(jìn)行過濾,獲得過濾后的以鍵值對表示的鍵值對數(shù)據(jù),并將鍵值對數(shù)據(jù)發(fā)送給GPU。方體數(shù)據(jù)模塊144,用于存儲與事實表信息對應(yīng)的方體數(shù)據(jù)。事實表用來存儲事實的度量及指向各個維的外鍵值,是數(shù)據(jù)聚合后依據(jù)某個維度生成的結(jié)果表,事實表存儲在硬盤中。在對應(yīng)的事實表第一次被查詢時,從硬盤被加載得到對應(yīng)的方體數(shù)據(jù),方體數(shù)據(jù)存儲在GPU的全局內(nèi)存,以多維數(shù)組方式存儲,一個實施例的方體數(shù)據(jù)如圖2所示。方體過濾模塊140,用于根據(jù)鍵值對數(shù)據(jù)對方體數(shù)據(jù)過濾得到過濾后的數(shù)據(jù)。具體為,判斷對應(yīng)事實表中的相應(yīng)與維度對應(yīng)列中的每個元素是否滿足數(shù)據(jù)查詢請求中查詢請求的要求,如果滿足則將對應(yīng)位置置為1,否則為0,從而得到過濾后的數(shù)據(jù)。聚集模塊142,用于對過濾后的數(shù)據(jù)進(jìn)行分組聚集得到請求數(shù)據(jù)。分組聚集具體為根據(jù)數(shù)據(jù)查詢請求的命令進(jìn)行對過濾后的數(shù)據(jù)進(jìn)行聚集,數(shù)據(jù)查詢請求的類型包括鉆取、上卷、切片、切塊和旋轉(zhuǎn)。聚集模塊根據(jù)對應(yīng)的查詢請求的類型進(jìn)行對應(yīng)的分組聚集從而得到請求數(shù)據(jù)。上述的基于OLAP的數(shù)據(jù)查詢服務(wù)器,在接收到數(shù)據(jù)查詢請求時,在CPU端進(jìn)行維表數(shù)據(jù)過濾,在GPU端進(jìn)行事實表數(shù)據(jù)過濾和分組聚集。由于GPU的具有高性能高效率的特點,通過利用GPU的計算資源,利用GPU加速OLAP的查詢,有效地提高OLAP的處理效率。在另一個實施例中,維表信息包括維和維的層次信息。如圖3所示,請求獲取模塊120包括驗證器121和解析器123,驗證器121和解析器123分別與元數(shù)據(jù)模塊122連接。驗證器121,用于獲取服務(wù)API,并驗證服務(wù)API是否符合規(guī)范以及封裝在服務(wù)API中的維和維的層次信息是否正確。服務(wù)API(ApplicationProgrammingInterface,應(yīng)用程序編程接口)是指系統(tǒng)預(yù)先定義的函數(shù)。前端在接收到請求的查詢請求時,將查詢請求封裝為對應(yīng)的服務(wù)API。驗證器121接收到數(shù)據(jù)查詢請求對應(yīng)的服務(wù)API時,驗證服務(wù)API是否符合規(guī)范,具體的,驗證服務(wù)API中封裝的與數(shù)據(jù)查詢請求對應(yīng)的查詢指令是否符合規(guī)范,查詢請求的類型包括上卷、下鉆、切片、切塊和旋轉(zhuǎn),驗證器121驗證服務(wù)API中封裝的查詢請求是否符合對應(yīng)的查詢請求的要求,查詢語句是否有錯。維表中的列字段可以將信息分為不同的層次的結(jié)構(gòu),驗證器121驗證服務(wù)API中的查詢命令中的維和對應(yīng)的維的層次信息是否正確,即查詢命令中的維和維的層次信息與維表中的信息是否一致。若不一致,則為查詢命令錯誤,不能進(jìn)行查詢。解析器122,用于在驗證器通過驗證后,對服務(wù)API進(jìn)行解析,得到數(shù)據(jù)查詢請求。通過對服務(wù)API進(jìn)行解析,從而得到數(shù)據(jù)查詢請求,包括待查詢的維表信息和事實表信息以及具體的查詢請求的類型。請繼續(xù)參閱圖3,在另一個實施例中,CPU還包括緩存模塊125和查詢模塊127。緩存模塊125用于緩存歷史查詢數(shù)據(jù)。查詢模塊127,用于在接收到數(shù)據(jù)查詢請求時,查詢緩存模塊125中是否存儲有與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)。維過濾模塊124在緩存模塊125未存儲有與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)時被啟動;聚集模塊142還用于將分組聚集得到的請求數(shù)據(jù)發(fā)送至緩存模塊進(jìn)行存儲。緩存模塊125緩存有歷史查詢數(shù)據(jù),解析器123在對服務(wù)API進(jìn)行解析獲得數(shù)據(jù)查詢請求后,先在緩存中查詢是否有與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)。若有,則直接將緩存模塊125中對應(yīng)的數(shù)據(jù)返回。若緩存模塊125中未存儲中與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)時,維過濾模塊被啟動,根據(jù)數(shù)據(jù)查詢請求,對維表進(jìn)行過濾,獲得過濾后的以鍵值對表示的鍵值對數(shù)據(jù),將鍵值對數(shù)據(jù)發(fā)送給GPU。同時,在GPU的聚集模塊142分組聚集得到的請求數(shù)據(jù)后,還將請求數(shù)據(jù)發(fā)送至緩存模塊125進(jìn)行存儲。雖然GPU具有較高的計算效率,但是啟動GPU程序及GPU和CPU的數(shù)據(jù)傳輸具有較高的代價,本實施例的基于OLAP的數(shù)據(jù)查詢服務(wù)器,通過在CPU設(shè)置用于緩存歷史查詢數(shù)據(jù)的緩存模塊,在解析得到數(shù)據(jù)查詢請求時,先在CPU的緩存模塊中查找是否存儲有與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù),只有在緩存模塊未存儲有與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)時,才執(zhí)行后續(xù)的查詢操作,從而能夠避免重復(fù)計算,提高數(shù)據(jù)查詢的效率。在另一個實施例中,CPU還包括回寫模塊126,用于接收回寫請求,并根據(jù)回寫請求對分組聚集得到的請求數(shù)據(jù)修改,支持類似“what-if”的假設(shè)分析。隨著OLAP向更廣更深入的領(lǐng)域應(yīng)用,簡單的分析型查詢已不能滿足用戶決策支持要求的Forecasting、Planning、Budgeting等查詢。傳統(tǒng)OLAP對數(shù)據(jù)操作以讀為主,數(shù)據(jù)進(jìn)行周期性的更新。但用戶驅(qū)動型規(guī)劃類查詢,需要對數(shù)據(jù)進(jìn)行修改,比如What-if分析。因此系統(tǒng)提供了回寫模塊126,允許用戶對聚集數(shù)據(jù)進(jìn)行實時修改。這些修改數(shù)據(jù)不實際更新到基礎(chǔ)數(shù)據(jù)集中,而是存儲在回寫模塊中,用戶的查詢結(jié)果由真實結(jié)果和用戶的回寫數(shù)據(jù)組合給出。在一個實施例中,提供一種OLAP的數(shù)據(jù)查詢系統(tǒng),如圖4所示,包括表示層20、存儲層30和上述的基于OLAP的數(shù)據(jù)查詢服務(wù)器10。表示層20,用于提供數(shù)據(jù)查詢請求輸入入口,將用戶輸入的數(shù)據(jù)查詢請求封裝為對應(yīng)的服務(wù)API,并將服務(wù)API發(fā)送至CPU,以及用于展示查詢到的請求數(shù)據(jù)。為了使系統(tǒng)具有更強的易用性、可操作性,本實施例中以EXCEL作為OLAP的客戶端,EXCEL作為一種廣泛應(yīng)用的表格處理工具,以其操作簡便,功能強大,獲得了用戶的青睞。但EXCEL具有很多先天不足,EXCEL的優(yōu)勢在于數(shù)據(jù)展示,但大部分用戶使用EXCEL作為數(shù)據(jù)存儲,當(dāng)數(shù)據(jù)量較大,文件較多時,就會出現(xiàn)常說的“EXCELHELL”。但如果為EXCEL在后臺添加一個數(shù)據(jù)管理服務(wù)器,則可以克服這些問題,進(jìn)一步提升EXCEL的性能和易用性。同時,EXCEL具有很強的可編程性,通過VBA或其他插件開發(fā)工具,很容易的擴展EXCEL的功能,使EXCEL成為OLAP的數(shù)據(jù)查詢系統(tǒng)的一個前端展示工具,同時又可以利用EXCEL的數(shù)據(jù)展示功能。在其它的實施例中,也支持Web的方式進(jìn)行訪問。存儲層30,用于存儲OLAP的相關(guān)數(shù)據(jù),相關(guān)數(shù)據(jù)包括維表和事實表。元數(shù)據(jù)模塊,用于從存儲層中加載與待查詢的維表信息對應(yīng)的維表;方體數(shù)據(jù)模塊,用于存儲與事實表信息對應(yīng)的方體數(shù)據(jù)。在一個實施例中,數(shù)據(jù)查詢服務(wù)器還包括ELT模塊,用于從生產(chǎn)數(shù)據(jù)中實時獲取數(shù)據(jù),并轉(zhuǎn)化為系統(tǒng)數(shù)據(jù)存儲格式。ETL(Extract-Transform-Load),即填充、更新數(shù)據(jù)倉庫的數(shù)據(jù)抽取、轉(zhuǎn)換、裝載的過程。在實時OLAP中,要盡量保持OLAP數(shù)據(jù)和生產(chǎn)數(shù)據(jù)一致,所以ETL工具尤為重要。實時ETL無論是對生產(chǎn)數(shù)據(jù)庫還是OLAP系統(tǒng)都會產(chǎn)生很大的壓力。需要生產(chǎn)數(shù)據(jù)庫實時將新數(shù)據(jù)發(fā)送過來,OLAP實時的處理新數(shù)據(jù)。為此,在CPU的內(nèi)存中開辟一塊內(nèi)存空間,專門用來存儲新增量數(shù)據(jù),當(dāng)執(zhí)行用戶查詢時,GPU和CPU同時處理,但操作不同的數(shù)據(jù),最后兩個結(jié)果合并,產(chǎn)生最后結(jié)果。隨著增量數(shù)據(jù)的增大,當(dāng)數(shù)據(jù)超過某一閾值,OLAP將增量數(shù)據(jù)刷新到存儲在GPU的基礎(chǔ)數(shù)據(jù)中。本實施例的基于OLAP的數(shù)據(jù)查詢系統(tǒng),還提供了API函數(shù)方便客戶端程序調(diào)用。API主要是對常用OLAP操作的封裝,主要包括:上卷、下鉆、切塊、切片和旋轉(zhuǎn)及對What-if假設(shè)分析的支持。上卷(Roll-up)的函數(shù)包括:Void**Rollup(string*aggfunction,string*measures,string*groupbys,string*orderbys,string*tables,string*where),其中,Aggfunction為上卷操作對應(yīng)的聚集函數(shù),比如sum,支持多個;Measures為聚集函數(shù)對應(yīng)的測度字段;Groupbys為分組字段;Orderbys為排序字段;Tables主要涉及的表;Wheres主要涉及的WHERE條件包括(=,>,<,>=,<=,between,in)條件之間通過AND連接。下鉆(Drill-down),在OLAP系統(tǒng)中不存儲聚集數(shù)據(jù),通過實時計算獲取聚集數(shù)據(jù),下鉆操作是一個上卷操作。下鉆的函數(shù)包括:Void**drilldown(string*aggfunction,string*measures,string*drilldown)。其中,Aggfunction為下鉆函數(shù);Measures為下鉆對應(yīng)的測度字段;Drilldown為下鉆維層次信息,即下鉆在那個維的那個層的那個值上進(jìn)行。切塊(Dicing)操作就是獲取一部分?jǐn)?shù)據(jù),相當(dāng)于where條件。切塊的函數(shù)包括Void**Dicing(string*measures,string*dimensions1,string*dimensions2),其中,measures為需要獲取的測度字段;dimensions1為切塊的維屬性組合-下界;dimensions2為切塊的維屬性組合-上界。切片(Slicing)操作是切塊操作的特例,切塊是在多個維上進(jìn)行的范圍過濾,切片是在一個維上的等值過濾。切片的函數(shù)包括:Void**Dicing(string*measures,string*dimensions);其中,measures為需要獲取的測度字段;dimensions為切片的維屬性組合。上述的基于OLAP的數(shù)據(jù)查詢系統(tǒng),在接收到數(shù)據(jù)查詢請求時,在CPU端進(jìn)行維表數(shù)據(jù)過濾,在GPU端進(jìn)行事實表數(shù)據(jù)過濾和分組聚集。由于GPU的具有高性能高效率的特點,通過利用GPU的計算資源,利用GPU加速OLAP的查詢,有效地提高OLAP的處理效率。在一個實施例中,還提供一種基于OLAP的數(shù)據(jù)查詢方法,該方法基于OLAP的數(shù)據(jù)查詢服務(wù)器實現(xiàn),如圖5所示,該方法包括以下步驟:S502:CPU獲取數(shù)據(jù)查詢請求,數(shù)據(jù)查詢請求包括待查詢的維表信息和事實表信息。S504:CPU加載與待查詢的維表信息對應(yīng)的維表。S506:CPU根據(jù)數(shù)據(jù)查詢請求,對維表進(jìn)行過濾,獲得過濾后的以鍵值對表示的鍵值對數(shù)據(jù),并將鍵值對數(shù)據(jù)發(fā)送給GPU。S508:GPU根據(jù)鍵值對數(shù)據(jù)對存儲在GPU中與事實表信息對應(yīng)的方體數(shù)據(jù)過濾得到過濾后的數(shù)據(jù)。具體為,判斷對應(yīng)事實表中的相應(yīng)與維度對應(yīng)列中的每個元素是否滿足數(shù)據(jù)查詢請求中查詢請求的要求,如果滿足則將對應(yīng)位置置為1,否則為0,從而得到過濾后的數(shù)據(jù)。S510:GPU對過濾后的數(shù)據(jù)進(jìn)行分組聚集得到請求數(shù)據(jù)。分組聚集具體為根據(jù)數(shù)據(jù)查詢請求的命令進(jìn)行對過濾后的數(shù)據(jù)進(jìn)行聚集,數(shù)據(jù)查詢請求的類型包括鉆取、上卷、切片、切塊和旋轉(zhuǎn)。聚集模塊根據(jù)對應(yīng)的查詢請求的類型進(jìn)行對應(yīng)的分組聚集從而得到請求數(shù)據(jù)。上述的基于OLAP的數(shù)據(jù)查詢方法,在接收到數(shù)據(jù)查詢請求時,在CPU端進(jìn)行維表數(shù)據(jù)過濾,在GPU端進(jìn)行事實表數(shù)據(jù)過濾和分組聚集。由于GPU的具有高性能高效率的特點,通過利用GPU的計算資源,利用GPU加速OLAP的查詢,有效地提高OLAP的處理效率。如圖6所示,步驟S502包括以下步驟:S5021:CPU獲取服務(wù)API。服務(wù)API(ApplicationProgrammingInterface,應(yīng)用程序編程接口)是指系統(tǒng)預(yù)先定義的函數(shù)。前端在接收到請求的查詢請求時,將查詢請求封裝為對應(yīng)的服務(wù)API。S5022:CPU驗證服務(wù)API是否符合規(guī)范以及封裝在服務(wù)API中的維和維的層次信息是否正確。若驗證通過,則執(zhí)行步驟S5023。接收到數(shù)據(jù)查詢請求對應(yīng)的服務(wù)API時,驗證服務(wù)API是否符合規(guī)范,具體的,驗證服務(wù)API中封裝的與數(shù)據(jù)查詢請求對應(yīng)的查詢指令是否符合規(guī)范,查詢請求的類型包括上卷、下鉆、切片、切塊和旋轉(zhuǎn),驗證服務(wù)API中封裝的查詢請求是否符合對應(yīng)的查詢請求的要求,查詢語句是否有錯。維表中的列字段可以將信息分為不同的層次的結(jié)構(gòu),驗證服務(wù)API中的查詢命令中的維和對應(yīng)的維的層次信息是否正確,即查詢命令中的維和維的層次信息與維表中的信息是否一致。若不一致,則為查詢命令錯誤,不能進(jìn)行查詢。S5023:CPU對服務(wù)API進(jìn)行解析,得到數(shù)據(jù)查詢請求。通過對服務(wù)API進(jìn)行解析,從而得到數(shù)據(jù)查詢請求,包括待查詢的維表信息和事實表信息以及鉆取等查詢請求。請繼續(xù)參閱圖6,在步驟S5023之后,還包括:S5024:CPU查詢緩存中是否存儲有與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)。若是,則執(zhí)行步驟S5025,若否,則執(zhí)行步驟S504。S5025:CPU從緩存中返回與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)。緩存中緩存有歷史查詢數(shù)據(jù),在對服務(wù)API進(jìn)行解析獲得數(shù)據(jù)查詢請求后,先在緩存中查詢是否有與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)。若有,則直接將緩存模塊125中對應(yīng)的數(shù)據(jù)返回。若緩存模塊中未存儲中與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)時,CPU根據(jù)所述數(shù)據(jù)查詢請求,對所述維表進(jìn)行過濾,獲得過濾后的以鍵值對表示的鍵值對數(shù)據(jù),并將所述鍵值對數(shù)據(jù)發(fā)送給GPU。同時,在步驟S506之后,還包括:S512:GPU將分組聚集得到的請求數(shù)據(jù)發(fā)送至CPU并存儲在緩存中。雖然GPU具有較高的計算效率,但是啟動GPU程序及GPU和CPU的數(shù)據(jù)傳輸具有較高的代價,本實施例的基于OLAP的數(shù)據(jù)查詢服務(wù)器,通過在CPU設(shè)置用于緩存歷史查詢數(shù)據(jù)的緩存模塊,在解析得到數(shù)據(jù)查詢請求時,先在CPU的緩存模塊中查找是否存儲有與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù),只有在緩存模塊未存儲有與數(shù)據(jù)查詢請求對應(yīng)的數(shù)據(jù)時,才執(zhí)行后續(xù)的查詢操作,從而能夠避免重復(fù)計算,提高數(shù)據(jù)查詢的效率。具體的,查詢查詢請求的類型包括上卷、下鉆、切片、切塊和旋轉(zhuǎn)。其中,下鉆Drill-down是上卷操作的一種特殊情況,OLAP系統(tǒng)將下鉆操作轉(zhuǎn)換為roll-up操作。上卷(Roll-up),主要就是聚集操作,類似SQL語言中的Groupby操作。一個實施例的查詢請求命令如下:selectsum(lo_revenue),d_year,p_brand1fromlineorder,date,part,supplierwherelo_orderdate=d_datekeyandlo_partkey=p_partkeyandlo_suppkey=s_suppkeyandp_brand1between'MFGR#2221'and'MFGR#2228'ands_region='ASIA'groupbyd_year,p_brand1orderbyd_year,p_brand1。具體的,根據(jù)查詢請求,查詢包括以下步驟:S1:CPU根據(jù)p_brand1between'MFGR#2221'and'MFGR#2228'條件,在part表中獲取p_partkey的集合{1114,1587,3631,4378…}。運行過程如圖7所示。S2:根據(jù)s_region='ASIA'條件,在supplier表中獲取s_suppkey的值的集合{11,12,15,23,26,27,…},效果如圖8所示.S3:將兩個集合和(datakey,d_year),(partkey,p_brand1)兩個Key-Value表從CPU發(fā)送到GPU。在這個步驟中需要對非整數(shù)型字段進(jìn)行規(guī)約化。比如這里p_brand1是一個字符數(shù)據(jù),需要對其進(jìn)行編碼處理。數(shù)據(jù)轉(zhuǎn)換過程和傳輸?shù)逆I值對形式如圖9示.S4:GPU啟動內(nèi)核程序,完成數(shù)據(jù)過濾,過濾算法近似為,對存儲在GPU上的事實表lo_revenue、d_year和p_brand1進(jìn)行過濾。對p_partkey和s_suppkey兩列中的每個元素是否滿足要求,如果滿足標(biāo)識位置1,否則置0。然后通過前綴和掃描,獲取過濾后的數(shù)據(jù)。過程如圖10所示.S5:將過濾后的d_year和p_brand1兩列按一定線性化處理。然后排序,前綴掃描,約簡等步驟,最終得到結(jié)果。過程如圖11所示S6:將線性化排序結(jié)構(gòu)逆線性化,并將結(jié)果從GPU端傳回給CPU端,最終在前端顯示,如圖12所示。通過上述方式,避免了復(fù)雜耗時的星型Join操作,同時利用了GPU來進(jìn)行聚集計算的能力。切塊dicing和切片slicing具體為獲取一部分?jǐn)?shù)據(jù)。相當(dāng)于處理where條件。一個實施例的切塊的查詢命令為:Selectd_datekey,lo_revenuefromlineorder,supplierwherelo_suppkey=s_suppkeyands_region='ASIA';具體的,根據(jù)查詢請求,查詢包括以下步驟:S1:根據(jù)條件s_region='ASIA'獲取對應(yīng)的s_suppkey的集合。S2:每個線程對s_suppkey列的值判斷是否在集合中,考慮采用順序查找或排序后二分法查找。S3:將得到的集合發(fā)送給GPU。S4:生成一個位向量,在滿足條件的向量對應(yīng)位置置1,否則置0。S5:對位向量prefixsum,確定最終結(jié)構(gòu)大小n。S6:重新啟動GPU,并分配2n空間。S7:將d_datekey,lo_revenue對應(yīng)標(biāo)志位為1的放到新空間中。以上實施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡潔,未對上述實施例中的各個技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說明書記載的范圍。以上所述實施例僅表達(dá)了本發(fā)明的幾種實施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對于本領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3