專(zhuān)利名稱(chēng):數(shù)據(jù)存儲(chǔ)方法、查詢(xún)方法及裝置的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)存儲(chǔ)方法、查詢(xún)方法及裝置。
背景技術(shù):
數(shù)據(jù)庫(kù)是按照數(shù)據(jù)結(jié)構(gòu)來(lái)組織、存儲(chǔ)和管理數(shù)據(jù)的數(shù)據(jù)倉(cāng)庫(kù),基于數(shù)據(jù)庫(kù)的應(yīng)用 包括數(shù)據(jù)存儲(chǔ)、分析、查詢(xún)等。現(xiàn)有技術(shù)中,可以采用行存模型進(jìn)行分析型應(yīng)用,在建立行存 模型時(shí),數(shù)據(jù)庫(kù)將信息邏輯地存儲(chǔ)為若干數(shù)據(jù)表,數(shù)據(jù)表為二維列表,其每一行都是一條完 整的數(shù)據(jù),稱(chēng)為一條記錄或者一個(gè)元組,每一條記錄都由若干屬性構(gòu)成,每個(gè)屬性稱(chēng)為一個(gè) 字段或者一列?,F(xiàn)有的行存數(shù)據(jù)庫(kù)為了支持對(duì)每一條數(shù)據(jù)進(jìn)行操作,在磁盤(pán)上以每行數(shù)據(jù) 作為最小存儲(chǔ)單元進(jìn)行存儲(chǔ),每個(gè)最小存儲(chǔ)單元即為一個(gè)I/O (Input/Output,輸入/輸出) 單元。發(fā)明人在對(duì)現(xiàn)有技術(shù)的研究過(guò)程中發(fā)現(xiàn),在對(duì)現(xiàn)有行存數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)分析時(shí), 需要關(guān)注的通常是每行數(shù)據(jù)中的若干字段,而非所有字段,但是由于I/O單元的限制,現(xiàn)有 的行存數(shù)據(jù)庫(kù)在進(jìn)行數(shù)據(jù)操作時(shí),需要從磁盤(pán)讀取整條記錄,即讀取每行數(shù)據(jù)的所有字段 數(shù)據(jù),而對(duì)無(wú)效字段的讀取將占用磁盤(pán)的I/O資源,導(dǎo)致數(shù)據(jù)庫(kù)的查詢(xún)性能降低,特別數(shù)據(jù) 庫(kù)中保存了海量數(shù)據(jù)時(shí),將極大降低數(shù)據(jù)庫(kù)性能。
發(fā)明內(nèi)容
本申請(qǐng)實(shí)施例的目的在于提供一種數(shù)據(jù)存儲(chǔ)方法、查詢(xún)方法及裝置,以解決現(xiàn)有 技術(shù)中以行存模型進(jìn)行數(shù)據(jù)存儲(chǔ)和查詢(xún)占用磁盤(pán)資源,查詢(xún)性能不高的問(wèn)題。為解決上述技術(shù)問(wèn)題,本申請(qǐng)實(shí)施例提供如下技術(shù)方案一種數(shù)據(jù)存儲(chǔ)方法,包括獲取源數(shù)據(jù)表,并將所述源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分;對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得多個(gè)數(shù)據(jù)包,為每個(gè)所述數(shù)據(jù)包標(biāo)注知識(shí)信息;保存所述多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息。所述知識(shí)信息至少包括數(shù)據(jù)包的邊界值、聚合值、總計(jì)數(shù)值;所述知識(shí)信息還包括平均值、空值個(gè)數(shù)、自定義函數(shù)值。所述對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得多個(gè)數(shù)據(jù)包包括順序獲取每列數(shù)據(jù)的數(shù)據(jù)值;判斷所獲取的數(shù)據(jù)值的個(gè)數(shù)是否滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值,若滿(mǎn)足預(yù)先設(shè)置的總 計(jì)數(shù)值,則將所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,返回所述順序獲取每列數(shù)據(jù)的數(shù)據(jù)值的步驟;若不滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值,則判斷是否獲取完當(dāng)前列數(shù)據(jù)的數(shù)據(jù)值,若是,則 將所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,否則,返回所述順序獲取每列數(shù)據(jù)的數(shù)據(jù)值的步驟。所述保存多個(gè)數(shù)據(jù)包之前,還包括根據(jù)所述數(shù)據(jù)包的類(lèi)型,按照預(yù)設(shè)的壓縮算法 對(duì)所述數(shù)據(jù)包進(jìn)行壓縮。一種數(shù)據(jù)查詢(xún)方法,應(yīng)用前述的數(shù)據(jù)存儲(chǔ)方法所存儲(chǔ)的數(shù)據(jù)進(jìn)行數(shù)據(jù)查詢(xún),包括 以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引;接收查詢(xún)指令后,獲取所述查詢(xún)指令中的關(guān)聯(lián)字段、查詢(xún)條件和查詢(xún)關(guān)鍵字段;當(dāng)所述查詢(xún)指令中的關(guān)聯(lián)字段與本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段一致時(shí),獲取本 地位圖關(guān)聯(lián)索引;根據(jù)所述本地位圖關(guān)聯(lián)索引中與所述查詢(xún)關(guān)鍵字段相關(guān)的字段所在的數(shù)據(jù)包的 知識(shí)信息,查詢(xún)滿(mǎn)足所述查詢(xún)條件的數(shù)據(jù)包。所述以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引包括接收創(chuàng)建本地位圖關(guān)聯(lián)索引的指令,所述指令中包括需要關(guān)聯(lián)的事實(shí)表的名稱(chēng)、 維度表的名稱(chēng)、關(guān)聯(lián)字段的名稱(chēng)、物化字段的名稱(chēng);將事實(shí)表中關(guān)聯(lián)字段所在列的每一個(gè)數(shù)據(jù)包分別與所述維度表進(jìn)行關(guān)聯(lián),并根據(jù) 所述物化字段建立位圖矩陣。還包括按照預(yù)設(shè)的壓縮算法對(duì)所述本地位圖關(guān)聯(lián)索引進(jìn)行壓縮。所述獲取本地位圖關(guān)聯(lián)索引包括將所述查詢(xún)指令中的關(guān)聯(lián)字段替換為本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段;根據(jù)所述查詢(xún)關(guān)鍵字段讀取所述本地位圖關(guān)聯(lián)索引。一種數(shù)據(jù)存儲(chǔ)裝置,包括獲取單元,用于獲取源數(shù)據(jù)表;拆分單元,用于將所述源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分;分組單元,用于對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得多個(gè)數(shù)據(jù)包,為每個(gè)所述數(shù)據(jù)包標(biāo)注知 識(shí)信息;保存單元,用于保存所述多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息。所述分組單元包括數(shù)據(jù)值獲取單元,用于順序獲取每列數(shù)據(jù)的數(shù)據(jù)值;計(jì)數(shù)值判斷單元,用于判斷所獲取的數(shù)據(jù)值的個(gè)數(shù)是否滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù) 值;結(jié)果執(zhí)行單元,用于當(dāng)所述計(jì)數(shù)值判斷單元判斷滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值時(shí),則 將所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,并返回所述數(shù)據(jù)值獲取單元執(zhí)行功能;當(dāng)所述計(jì)數(shù)值判斷 單元判斷不滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值時(shí),判斷是否獲取完當(dāng)前列數(shù)據(jù)的數(shù)據(jù)值,若是,則將 所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,否則,返回所述數(shù)據(jù)值獲取單元執(zhí)行功能。還包括壓縮單元,用于當(dāng)所述保存單元保存所述多個(gè)數(shù)據(jù)包之前,根據(jù)所述數(shù)據(jù)包的類(lèi) 型,按照預(yù)設(shè)的壓縮算法對(duì)所述數(shù)據(jù)包進(jìn)行壓縮。一種數(shù)據(jù)查詢(xún)裝置,應(yīng)用前述數(shù)據(jù)存儲(chǔ)裝置所存儲(chǔ)的數(shù)據(jù)進(jìn)行數(shù)據(jù)查詢(xún),包括建立單元,用于以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引;接收單元,用于接收查詢(xún)指令后,獲取所述查詢(xún)指令中的關(guān)聯(lián)字段、查詢(xún)條件和查 詢(xún)關(guān)鍵字段;獲取單元,用于當(dāng)所述查詢(xún)指令中的關(guān)聯(lián)字段與本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段 一致時(shí),獲取本地位圖關(guān)聯(lián)索引;
查詢(xún)單元,用于根據(jù)所述本地位圖關(guān)聯(lián)索引中與所述查詢(xún)關(guān)鍵字段相關(guān)的字段所 在的數(shù)據(jù)包的知識(shí)信息,查詢(xún)滿(mǎn)足所述查詢(xún)條件的數(shù)據(jù)包。所述建立單元包括指令接收單元,用于接收創(chuàng)建本地位圖關(guān)聯(lián)索引的指令,所述指令中包括需要關(guān) 聯(lián)的事實(shí)表的名稱(chēng)、維度表的名稱(chēng)、關(guān)聯(lián)字段的名稱(chēng)、物化字段的名稱(chēng);關(guān)聯(lián)建立單元,用于將事實(shí)表中關(guān)聯(lián)字段所在列的每一個(gè)數(shù)據(jù)包分別與所述維度 表進(jìn)行關(guān)聯(lián),并根據(jù)所述物化字段建立位圖矩陣。所述建立單元還包括
索引壓縮單元,按照預(yù)設(shè)的壓縮算法對(duì)所述本地位圖關(guān)聯(lián)索引進(jìn)行壓縮。所述獲取單元包括字段替換單元,用于將所述查詢(xún)指令中的關(guān)聯(lián)字段替換為本地位圖關(guān)聯(lián)索引中的 關(guān)聯(lián)字段;索引讀取單元,用于根據(jù)所述查詢(xún)關(guān)鍵字段讀取所述本地位圖關(guān)聯(lián)索引。由以上本申請(qǐng)實(shí)施例提供的技術(shù)方案可見(jiàn),本申請(qǐng)實(shí)施例在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),獲 取源數(shù)據(jù)表,并將源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分,對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得到多個(gè)數(shù)據(jù) 包,為每個(gè)數(shù)據(jù)包標(biāo)注知識(shí)信息,保存多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息;在進(jìn)行數(shù)據(jù)查 詢(xún)時(shí),以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引,接收查詢(xún)指令后,獲取查詢(xún)指令中的關(guān)聯(lián)字 段、查詢(xún)條件和查詢(xún)關(guān)鍵字段,當(dāng)查詢(xún)指令中的關(guān)聯(lián)字段與本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字 段一致時(shí),獲取本地位圖關(guān)聯(lián)索引,根據(jù)本地位圖關(guān)聯(lián)索引中與查詢(xún)關(guān)鍵字段相關(guān)的字段 所在的數(shù)據(jù)包的知識(shí)信息,查詢(xún)滿(mǎn)足查詢(xún)條件的數(shù)據(jù)包。本申請(qǐng)實(shí)施例中,對(duì)列數(shù)據(jù)以數(shù)據(jù) 包為粒度進(jìn)行存儲(chǔ),并以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引,由于將數(shù)據(jù)包作為最小的 I/O單元,因此在存儲(chǔ)數(shù)據(jù)時(shí)可以減少對(duì)磁盤(pán)空間的占用,并且在查詢(xún)數(shù)據(jù)時(shí)相應(yīng)提高數(shù)據(jù) 的查詢(xún)速度。
圖1為本申請(qǐng)數(shù)據(jù)存儲(chǔ)方法的第一實(shí)施例流程圖;圖2為本申請(qǐng)數(shù)據(jù)存儲(chǔ)方法的第二實(shí)施例流程圖;圖3為本申請(qǐng)數(shù)據(jù)查詢(xún)方法的第一實(shí)施例流程圖;圖4為本申請(qǐng)數(shù)據(jù)查詢(xún)方法的第二實(shí)施例流程圖;圖5為本申請(qǐng)數(shù)據(jù)查詢(xún)方法的第三實(shí)施例流程圖;圖6為本申請(qǐng)數(shù)據(jù)存儲(chǔ)裝置的第一實(shí)施例框圖;圖7為本申請(qǐng)數(shù)據(jù)存儲(chǔ)裝置的第二實(shí)施例框圖;圖8為本申請(qǐng)數(shù)據(jù)查詢(xún)裝置的實(shí)施例框圖。
具體實(shí)施例方式在如下本申請(qǐng)的多個(gè)實(shí)施例中,有些實(shí)施例提供了一種數(shù)據(jù)存儲(chǔ)方法及查詢(xún)方 法,有些實(shí)施例提供了 一種數(shù)據(jù)存儲(chǔ)裝置及數(shù)據(jù)查詢(xún)裝置。本申請(qǐng)實(shí)施例中數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)查詢(xún)應(yīng)用在包含多個(gè)數(shù)據(jù)表的數(shù)據(jù)庫(kù)系統(tǒng)中,數(shù) 據(jù)庫(kù)在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí)基于列存儲(chǔ)方式,列存儲(chǔ)方式在磁盤(pán)上以字段為單位進(jìn)行存儲(chǔ),并且,本申請(qǐng)實(shí)施例中將以列為單位存儲(chǔ)的數(shù)據(jù)按照等量的值進(jìn)行分組,每個(gè)分組作為一個(gè) 數(shù)據(jù)包,以數(shù)據(jù)包作為最小的I/O單元進(jìn)行存儲(chǔ),每個(gè)數(shù)據(jù)包為其所在列的子集,在每個(gè)數(shù) 據(jù)包上標(biāo)注知識(shí)信息,可以包括數(shù)據(jù)包的邊界值、聚合值、總計(jì)數(shù)值、平均值、空值個(gè)數(shù)、自 定義函數(shù)值等,由于知識(shí)信息以數(shù)據(jù)包為單位創(chuàng)建,因此相對(duì)于傳統(tǒng)數(shù)據(jù)庫(kù)中創(chuàng)建的索引, 可以減少磁盤(pán)空間的占用。進(jìn)一步,以列存儲(chǔ)方式進(jìn)行存儲(chǔ)時(shí),由于每列數(shù)據(jù)中的每個(gè)值都 具有相同的數(shù)據(jù)結(jié)構(gòu),因此以數(shù)據(jù)包為單位對(duì)數(shù)據(jù)進(jìn)行壓縮或解壓縮時(shí),可以提高數(shù)據(jù)的 處理速度;并且,對(duì)于不同列的數(shù)據(jù),還可以采用不同的壓縮算法;相應(yīng)的,在進(jìn)行數(shù)據(jù)查 詢(xún)時(shí),由于以數(shù)據(jù)包為單位進(jìn)行查詢(xún),因此可以實(shí)現(xiàn)查詢(xún)的快速響應(yīng)。為了使本 技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)實(shí)施例中的技術(shù)方案,并使本申請(qǐng)實(shí) 施例的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖對(duì)本申請(qǐng)實(shí)施例中技術(shù)方 案作進(jìn)一步詳細(xì)的說(shuō)明。參見(jiàn)圖1,為本申請(qǐng)數(shù)據(jù)存儲(chǔ)方法的第一實(shí)施例流程圖步驟101 獲取源數(shù)據(jù)表。步驟102 將源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分。步驟103 對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得多個(gè)數(shù)據(jù)包,為每個(gè)數(shù)據(jù)包標(biāo)注知識(shí)信息。具體的,順序獲取每列數(shù)據(jù)的數(shù)據(jù)值;判斷所獲取的數(shù)據(jù)值的個(gè)數(shù)是否滿(mǎn)足預(yù)先 設(shè)置的總計(jì)數(shù)值,若滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值,則將所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,返回執(zhí)行 前述順序獲取每列數(shù)據(jù)的數(shù)據(jù)值;若不滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值,則判斷是否獲取完當(dāng)前 列數(shù)據(jù)的數(shù)據(jù)值,若是,則將所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,否則,返回執(zhí)行前述順序獲取每 列數(shù)據(jù)的數(shù)據(jù)值。其中,知識(shí)信息至少包括數(shù)據(jù)包的邊界值、聚合值、總計(jì)數(shù)值;進(jìn)一步,該知識(shí)信 息還可以包括平均值、空值個(gè)數(shù)和自定義函數(shù)值等。步驟104 保存多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息。參見(jiàn)圖2,為本申請(qǐng)數(shù)據(jù)存儲(chǔ)方法的第二實(shí)施例流程圖,該實(shí)施例詳細(xì)示出了以列 存數(shù)據(jù)包的形式存儲(chǔ)數(shù)據(jù)的過(guò)程步驟201 獲取源數(shù)據(jù)表,并將源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分。本申請(qǐng)實(shí)施例中的數(shù)據(jù)存儲(chǔ)基于分析型數(shù)據(jù)庫(kù)的應(yīng)用,所要存儲(chǔ)的源數(shù)據(jù)表可 以來(lái)自于產(chǎn)生源數(shù)據(jù)的其它數(shù)據(jù)系統(tǒng),例如,可以是業(yè)務(wù)系統(tǒng)、生產(chǎn)系統(tǒng)、OLTP(On Line Transactional Processing,聯(lián)機(jī)事務(wù)處理)系統(tǒng)、脫機(jī)文件系統(tǒng)等。通過(guò)加載引擎掃描讀 取源數(shù)據(jù)表,對(duì)源數(shù)據(jù)進(jìn)行數(shù)據(jù)分解,將源數(shù)據(jù)表拆分成多個(gè)列數(shù)據(jù)。步驟202 順序獲取每列數(shù)據(jù)的數(shù)據(jù)值。對(duì)列數(shù)據(jù)進(jìn)行統(tǒng)計(jì),生成列數(shù)據(jù)中數(shù)據(jù)包的知識(shí)信息,知識(shí)信息至少包括數(shù)據(jù)包 的邊界值、聚合值、總計(jì)數(shù)值,進(jìn)一步,該知識(shí)信息還可以包括平均值、空值個(gè)數(shù)和自定義函 數(shù)值等。步驟203 判斷所獲取的數(shù)據(jù)值的個(gè)數(shù)是否滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值,若是,則執(zhí) 行步驟204 ;否則,執(zhí)行步驟205。步驟204 則將所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,返回步驟202。步驟205 判斷是否獲取完當(dāng)前列數(shù)據(jù)的數(shù)據(jù)值,若是,則執(zhí)行步驟206 ;否則,返 回步驟202。
步驟206 將所獲取的剩余的數(shù)據(jù)值生成數(shù)據(jù)包。
步驟207 為生成的每個(gè)數(shù)據(jù)包標(biāo)注知識(shí)信息。本步驟中的數(shù)據(jù)包包括前述步驟204和步驟206所傳遞的數(shù)據(jù)包。步驟208 根據(jù)數(shù)據(jù)包的類(lèi)型,按照預(yù)設(shè)的壓縮算法對(duì)數(shù)據(jù)包進(jìn)行壓縮。對(duì)于每列數(shù)據(jù)的數(shù)據(jù)包是否進(jìn)行壓縮可以預(yù)先設(shè)置,如果開(kāi)啟了壓縮選項(xiàng),則進(jìn) 行壓縮,如果未開(kāi)啟壓縮選項(xiàng),則不進(jìn)行壓縮。不同列的數(shù)據(jù)屬于不同類(lèi)型的數(shù)據(jù),對(duì)于同一列數(shù)據(jù),將其分成大小一致的數(shù)據(jù) 包,屬于同一列的數(shù)據(jù)包具有相同的屬性,因此可以采用相同的壓縮算法進(jìn)行壓縮,對(duì)于 不同列的數(shù)據(jù)包可以采用不同的壓縮算法進(jìn)行壓縮。壓縮算法可以包括離散域算法、差 值算法、RLE(Run Length Encoding,行程編碼算法)算法、PPM(Prediction by Partial Matching,部分匹配預(yù)測(cè)算法)算法等。因此,在對(duì)數(shù)據(jù)包進(jìn)行壓縮時(shí),可以根據(jù)其類(lèi)型不 同選擇相應(yīng)的壓縮算法。步驟209 保存壓縮后的多個(gè)數(shù)據(jù)包及數(shù)據(jù)包的知識(shí)信息,結(jié)束當(dāng)前流程。本申請(qǐng)實(shí)施例中存儲(chǔ)將壓縮后的數(shù)據(jù)包進(jìn)行磁盤(pán)存儲(chǔ),每個(gè)數(shù)據(jù)包構(gòu)成一個(gè)I/O 最小單元。參見(jiàn)圖3,為本申請(qǐng)數(shù)據(jù)查詢(xún)方法的第一實(shí)施例流程圖步驟301 以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引。具體的,接收創(chuàng)建本地位圖關(guān)聯(lián)索引的指令,該指令中包括需要關(guān)聯(lián)的事實(shí)表的 名稱(chēng)、維度表的名稱(chēng)、關(guān)聯(lián)字段的名稱(chēng)、物化字段的名稱(chēng),將事實(shí)表中關(guān)聯(lián)字段所在列的每 一個(gè)數(shù)據(jù)包分別與維度表進(jìn)行關(guān)聯(lián),并根據(jù)物化字段建立位圖矩陣。步驟302 接收查詢(xún)指令后,獲取查詢(xún)指令中的關(guān)聯(lián)字段、查詢(xún)條件和查詢(xún)關(guān)鍵字 段。步驟303:當(dāng)查詢(xún)指令中的關(guān)聯(lián)字段與本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段一致時(shí), 獲取本地位圖關(guān)聯(lián)索引。具體的,將所述查詢(xún)指令中的關(guān)聯(lián)字段替換為本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段, 根據(jù)所述查詢(xún)關(guān)鍵字段讀取所述本地位圖關(guān)聯(lián)索引。步驟304 根據(jù)所述本地位圖關(guān)聯(lián)索引中與查詢(xún)關(guān)鍵字段相關(guān)的字段所在的數(shù)據(jù) 包的知識(shí)信息,查詢(xún)滿(mǎn)足所述查詢(xún)條件的數(shù)據(jù)包。參見(jiàn)圖4,為本申請(qǐng)數(shù)據(jù)查詢(xún)方法的第二實(shí)施例流程圖,該實(shí)施例詳細(xì)示出了本地 位圖索引的建立過(guò)程步驟401 啟動(dòng)磁盤(pán)上的數(shù)據(jù)庫(kù)實(shí)例,獲得訪問(wèn)和維護(hù)該數(shù)據(jù)庫(kù)實(shí)例中相關(guān)數(shù)據(jù) 表的權(quán)限。步驟402 向數(shù)據(jù)庫(kù)發(fā)送建立本地位圖關(guān)聯(lián)索引的指令。該指令中包括需要關(guān)聯(lián)的事實(shí)表的名稱(chēng)、維度表的名稱(chēng)、關(guān)聯(lián)字段的名稱(chēng)、以及需 要物化的字段名稱(chēng)。步驟403 將事實(shí)表中關(guān)聯(lián)字段所在列的每一個(gè)數(shù)據(jù)包分別與維度表進(jìn)行關(guān)聯(lián), 并根據(jù)物化字段建立位圖矩陣。步驟404 判斷是否開(kāi)啟壓縮選項(xiàng),若是,則執(zhí)行步驟405 ;否則,執(zhí)行步驟406。步驟405 選擇預(yù)設(shè)的壓縮算法對(duì)本地位圖關(guān)聯(lián)索引進(jìn)行壓縮,并存儲(chǔ)壓縮后的本地位圖關(guān)聯(lián)索引,結(jié)束當(dāng)前流程。本地位圖關(guān)聯(lián)索引為以數(shù)據(jù)包為粒度的稀疏矩陣,壓縮引擎可以自動(dòng)為本地位圖 關(guān)聯(lián)索引選擇壓縮算法,例如RLE算法等。
步驟406 存儲(chǔ)本地位圖關(guān)聯(lián)索引,結(jié)束當(dāng)前流程。本地位圖關(guān)聯(lián)索引相當(dāng)于為數(shù)據(jù)表增加一列數(shù)據(jù),該列數(shù)據(jù)的每一個(gè)數(shù)據(jù)包存儲(chǔ) 與其對(duì)齊的那些分塊的位圖關(guān)聯(lián)索引信息,位圖關(guān)聯(lián)索引的數(shù)據(jù)特征為一個(gè)1少0多的稀 疏矩陣,該稀疏矩陣可以使得針對(duì)位圖關(guān)聯(lián)索引的數(shù)據(jù)包能夠?qū)崿F(xiàn)較優(yōu)的壓縮算法。參見(jiàn)圖5,為本申請(qǐng)數(shù)據(jù)查詢(xún)方法的第三實(shí)施例流程圖,該實(shí)施例示出了基于建立 的本地位圖關(guān)聯(lián)索引進(jìn)行數(shù)據(jù)查詢(xún)的詳細(xì)過(guò)程步驟501 以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引。具體的,接收創(chuàng)建本地位圖關(guān)聯(lián)索引的指令,該指令中包括需要關(guān)聯(lián)的事實(shí)表的 名稱(chēng)、維度表的名稱(chēng)、關(guān)聯(lián)字段的名稱(chēng)、物化字段的名稱(chēng),將事實(shí)表中關(guān)聯(lián)字段所在列的每 一個(gè)數(shù)據(jù)包分別與維度表進(jìn)行關(guān)聯(lián),并根據(jù)物化字段建立位圖矩陣。步驟502 按照預(yù)設(shè)的壓縮算法對(duì)本地位圖關(guān)聯(lián)索引進(jìn)行壓縮。對(duì)于本地位圖關(guān)聯(lián)索引是否進(jìn)行壓縮可以預(yù)先設(shè)置,如果開(kāi)啟了壓縮選項(xiàng),則進(jìn) 行壓縮,如果未開(kāi)啟壓縮選項(xiàng),則不進(jìn)行壓縮。步驟503 接收查詢(xún)指令后,獲取查詢(xún)指令中的關(guān)聯(lián)字段、查詢(xún)條件和查詢(xún)關(guān)鍵字 段。查詢(xún)指令通常為SQL (Structured Query Language,結(jié)構(gòu)化查詢(xún)語(yǔ)言)查詢(xún)語(yǔ)句, 接收到查詢(xún)指令后,可以通過(guò)解析器對(duì)該查詢(xún)指令進(jìn)行解析,將指令拆分為各種算子,包括 關(guān)聯(lián)字段和查詢(xún)條件等。步驟504 判斷查詢(xún)指令中的關(guān)聯(lián)字段與本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段是否一 致,若是,則執(zhí)行步驟505 ;否則,執(zhí)行步驟507。步驟505 將查詢(xún)指令中的關(guān)聯(lián)字段替換為本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段。根據(jù)關(guān)聯(lián)字段,通過(guò)位圖關(guān)聯(lián)索引管理器讀取本地位圖關(guān)聯(lián)索引,獲得本地位圖 索引的位圖矩陣。步驟506 根據(jù)本地位圖關(guān)聯(lián)索引中與查詢(xún)關(guān)鍵字段相關(guān)的字段所在的數(shù)據(jù)包的 知識(shí)信息,查詢(xún)滿(mǎn)足查詢(xún)條件的數(shù)據(jù)包。步驟507 根據(jù)關(guān)聯(lián)字段讀取相關(guān)數(shù)據(jù)包,結(jié)束當(dāng)前流程。將位圖矩陣及步驟504中不一致的關(guān)聯(lián)字段傳遞給執(zhí)行器,根據(jù)條件進(jìn)行過(guò)濾, 生成結(jié)果。根據(jù)執(zhí)行計(jì)劃對(duì)磁盤(pán)文件進(jìn)行I/O操作,通過(guò)查詢(xún)數(shù)據(jù)包的知識(shí)信息,得到滿(mǎn)足 查詢(xún)條件的數(shù)據(jù)包,將該數(shù)據(jù)包返回查詢(xún)指令的發(fā)送方。以數(shù)據(jù)包為單位的知識(shí)信息對(duì)每列數(shù)據(jù)的每個(gè)數(shù)據(jù)包均進(jìn)行標(biāo)注,根據(jù)每個(gè)數(shù)據(jù) 包上的知識(shí)信息可以實(shí)現(xiàn)查詢(xún)語(yǔ)句對(duì)數(shù)據(jù)包的準(zhǔn)確定位,因此本申請(qǐng)實(shí)施例在查詢(xún)數(shù)據(jù) 時(shí),先訪問(wèn)數(shù)據(jù)包的知識(shí)信息,以判斷該數(shù)據(jù)包內(nèi)是否具有查詢(xún)所需的數(shù)據(jù),由此避免了對(duì) 無(wú)用數(shù)據(jù)包的讀取和解壓縮的操作,在許多情況下,僅靠訪問(wèn)數(shù)據(jù)包的知識(shí)信息便可以得 到所要查詢(xún)的數(shù)據(jù)。數(shù)據(jù)包的知識(shí)信息能夠?qū)聪樵?xún)、多維查詢(xún)的每個(gè)條件進(jìn)行過(guò)濾,而 且因其粗粒度的特性可以?xún)H占用極少的磁盤(pán)存儲(chǔ)空間。另外,本申請(qǐng)實(shí)施例中以數(shù)據(jù)包為單位的知識(shí)信息具有較強(qiáng)的擴(kuò)展性,隨著數(shù)據(jù)量的增加,新數(shù)據(jù)包的知識(shí)信息的標(biāo)注可以 不依賴(lài)于歷史數(shù)據(jù)包,因此不會(huì)降低數(shù)據(jù)加載的性能。由此可知,本申請(qǐng)實(shí)施例通過(guò)實(shí)現(xiàn)本地位圖關(guān)聯(lián)索引,能夠在涉及多表關(guān)聯(lián)的數(shù) 據(jù)庫(kù)查詢(xún)中,無(wú)需關(guān)聯(lián)運(yùn)算而獲得表表關(guān)聯(lián)后字段的預(yù)先物化狀態(tài),從而在多表關(guān)聯(lián)條件 下,提高數(shù)據(jù)定位和查詢(xún)性能下面以星形模型為例,對(duì)本申請(qǐng)數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)查詢(xún)實(shí)施例中的所涉及的關(guān)聯(lián)運(yùn) 算進(jìn)行描述星形模型在查詢(xún)時(shí),維度表僅與事實(shí)表通過(guò)主外鍵相互關(guān)聯(lián),維度表之間互不 關(guān)聯(lián),所有數(shù)據(jù)都通過(guò)批量加載的方式導(dǎo)入該星型模型,將每列數(shù)據(jù)的數(shù)據(jù)包粒度設(shè)為 65536,即將每列數(shù)據(jù)的每65536個(gè)數(shù)據(jù)值組成一個(gè)數(shù)據(jù)包,并且對(duì)每個(gè)數(shù)據(jù)包自動(dòng)標(biāo)注知 識(shí)fe息??梢愿鶕?jù)每個(gè)數(shù)據(jù)包的不同數(shù)據(jù)類(lèi)型對(duì)其進(jìn)行壓縮,數(shù)據(jù)包的類(lèi)型可以包括數(shù)值 型或字符型。其中,數(shù)值型針對(duì)相鄰數(shù)據(jù)值相差較小的數(shù)值型字段,例如,事實(shí)表的主鍵、夕卜 鍵,維度表的主鍵等,采取差值算法,差值算法按順序存儲(chǔ)的源數(shù)據(jù)的數(shù)據(jù)值的相鄰差值, 可以最大限度地減小數(shù)據(jù)冗余,使得壓縮后數(shù)據(jù)所占的空間小于原始數(shù)據(jù)所占的空間;針 對(duì)相鄰數(shù)據(jù)值重復(fù)率較高的數(shù)值型字段,例如“郵編”字段,事實(shí)表的“折扣比例”字段等,可 以采取RLE算法,RLE算法將數(shù)據(jù)的行程單位,即同一數(shù)據(jù)值在許多連續(xù)數(shù)據(jù)單元中出現(xiàn)的 序列,按照“數(shù)據(jù)_出現(xiàn)次數(shù)”進(jìn)行存儲(chǔ),從而減小數(shù)據(jù)冗余,使得壓縮后的數(shù)據(jù)值所占空間 小于原始數(shù)據(jù)值。字符型針對(duì)離散值較少的字段,例如“國(guó)名”、“城市名”等字段,執(zhí)行離散 域算法,離散域算法是一種變形編碼算法,可以將一組輸入數(shù)據(jù)變?yōu)榱硪环N冗余更小、更易 壓縮的數(shù)據(jù),對(duì)于具有η個(gè)離散值的一組數(shù)據(jù),對(duì)其進(jìn)行的離散域算法可以表征為一個(gè)η χ η階的矩陣Τ,將源數(shù)據(jù)右乘矩陣Τ,即得到所需的變形碼,其逆運(yùn)算則可將變形碼右乘T的 逆矩陣Τ-1,即可得到源數(shù)據(jù);針對(duì)一般字符型數(shù)據(jù),可以采用PPM算法,PPM算法是一種基 于前后關(guān)系進(jìn)行建模和預(yù)測(cè),從而得到統(tǒng)計(jì)數(shù)據(jù)的壓縮技術(shù)。假設(shè)有一個(gè)事實(shí)表sales,存儲(chǔ)了每個(gè)客戶(hù)的所有消費(fèi)記錄,共1億行數(shù)據(jù),每行 數(shù)據(jù)大小平均為0. 5KB,總數(shù)據(jù)量為47. 7GB ;還有一個(gè)維度表,即客戶(hù)信息表customers,記 錄了所有客戶(hù)的信息,共10萬(wàn)行記錄,每行數(shù)據(jù)大小平均為0. 3KB,總數(shù)據(jù)量為29MB??蛻?hù) id可以唯一標(biāo)識(shí)客戶(hù)身份,customers, id和sales. cust_id為一對(duì)主外鍵關(guān)系,由此構(gòu)成
一個(gè)星型模型。假設(shè)我們需要查詢(xún)所有中國(guó)客戶(hù)的消費(fèi)額在10000到99999之間的消費(fèi)記錄,則 可采用如下的SQL查詢(xún)語(yǔ)句SELECT sales, time, sales. amount_sold as amount_sold_chineseFROM sales, customersWHERE salse. amount_sold between ‘10000,and ‘99999,AND sales. cust_id = customers, idAND customers, country = ‘CHN,;假設(shè)查詢(xún)結(jié)果為,事實(shí)表滿(mǎn)足條件“salse.amountsold between ‘10000,and ‘99999,”的行數(shù)約為1000萬(wàn)行,維度表中country (國(guó)家)列的取 值為224種。
則我們可以針對(duì)上述需求創(chuàng)建如下本地位圖關(guān)聯(lián)索引CREATE BITMAP INDEX ON sales(customers, country)FROM sales, customers
WHERE sales. cust_id = customers, id ;對(duì)于現(xiàn)有的行存數(shù)據(jù)庫(kù),要對(duì)上述需求進(jìn)行充分優(yōu)化,不但需要關(guān)聯(lián)索引,還需要 對(duì)sales. amount_so 1 d列創(chuàng)建B樹(shù)索引,B樹(shù)索引占用的存儲(chǔ)空間一般在其對(duì)應(yīng)數(shù)據(jù)總量的 1. 2倍至2倍之間,由于salse. amount_sold列為整型,1億個(gè)整型數(shù)據(jù)的尺寸為381. 5MB, 按照1.5倍的比例,其B樹(shù)索引占用的磁盤(pán)空間約為572MB。在不壓縮的情況下,采用本 申請(qǐng)實(shí)施例的上述位圖關(guān)聯(lián)索引總的尺寸為224X100000000 + 8ByteS = 2. 6GB,在取值個(gè) 數(shù)為224種的情況下,行程編碼的壓縮比固定為224 9 = 24.9 1,因此壓縮后的數(shù)據(jù) 為106. 9MB。由此可知,采用本申請(qǐng)的本地位圖關(guān)聯(lián)索引所占空間比現(xiàn)有行存模型少占用 0. 5GB的空間。另外,在面向列的存儲(chǔ)方式下,由于可以將數(shù)據(jù)特性相同的數(shù)據(jù)存儲(chǔ)在一起,因此 可以獲得更高的數(shù)據(jù)壓縮比,列存數(shù)據(jù)在對(duì)數(shù)據(jù)進(jìn)行壓縮后,相比行存數(shù)據(jù)可以減少存儲(chǔ) 空間占用率;在運(yùn)算性能上,現(xiàn)有行存模型在物化salse. am0Unt_S0ld列時(shí),需要打開(kāi)結(jié)果 集命中的所有行數(shù)據(jù),而本申請(qǐng)實(shí)施例只需打開(kāi)這該列數(shù)據(jù),因此查詢(xún)性能也相應(yīng)提高。與本申請(qǐng)數(shù)據(jù)存儲(chǔ)方法和數(shù)據(jù)查詢(xún)方法的實(shí)施例相對(duì)應(yīng),本申請(qǐng)還提供了數(shù)據(jù)存 儲(chǔ)裝置和數(shù)據(jù)查詢(xún)裝置的實(shí)施例。參見(jiàn)圖6,為本申請(qǐng)數(shù)據(jù)存儲(chǔ)裝置的第一實(shí)施例框圖該數(shù)據(jù)存儲(chǔ)裝置包括獲取單元610、拆分單元620、分組單元630和保存單元 640。其中,獲取單元610,用于獲取源數(shù)據(jù)表;拆分單元620,用于將所述源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分;分組單元630,用于對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得多個(gè)數(shù)據(jù)包,為每個(gè)所述數(shù)據(jù)包標(biāo) 注知識(shí)信息;保存單元640,用于保存所述多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息。參見(jiàn)圖7,為本申請(qǐng)數(shù)據(jù)存儲(chǔ)裝置的第二實(shí)施例框圖該數(shù)據(jù)存儲(chǔ)裝置包括獲取單元710、拆分單元720、分組單元730、壓縮單元740 和保存單元750。其中,獲取單元710,用于獲取源數(shù)據(jù)表;拆分單元720,用于將所述源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分;分組單元730,用于對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得多個(gè)數(shù)據(jù)包,為每個(gè)所述數(shù)據(jù)包標(biāo) 注知識(shí)信息;壓縮單元740,用于根據(jù)所述數(shù)據(jù)包的類(lèi)型,按照預(yù)設(shè)的壓縮算法對(duì)所述數(shù)據(jù)包進(jìn) 行壓縮;保存單元750,用于保存所述壓縮后的多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息。具體的,分組單元730可以包括(圖7中未示出)數(shù)據(jù)值獲取單元,用于順序獲 取每列數(shù)據(jù)的數(shù)據(jù)值;計(jì)數(shù)值判斷單元,用于判斷所獲取的數(shù)據(jù)值的個(gè)數(shù)是否滿(mǎn)足預(yù)先設(shè) 置的總計(jì)數(shù)值;結(jié)果執(zhí)行單元,用于當(dāng)所述計(jì)數(shù)值判斷單元判斷滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值時(shí),則將所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,并返回所述數(shù)據(jù)值獲取單元執(zhí)行功能;當(dāng)所述計(jì)數(shù)值 判斷單元判斷不滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值時(shí),判斷是否獲取完當(dāng)前列數(shù)據(jù)的數(shù)據(jù)值,若是, 則將所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,否則,返回所述數(shù)據(jù)值獲取單元執(zhí)行功能。參見(jiàn)圖8,為本申請(qǐng)數(shù)據(jù)查詢(xún)裝置的實(shí)施例框圖,該實(shí)施例應(yīng)用前述實(shí)施例中的數(shù) 據(jù)存儲(chǔ)裝置所存儲(chǔ)的數(shù)據(jù)進(jìn)行數(shù)據(jù)查詢(xún)?cè)摂?shù)據(jù)查詢(xún)裝置包括建立單元810、接收單元820、獲取單元830和查詢(xún)單元 840。
其中,建立單元810,用于以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引;接收單元820,用于接收查詢(xún)指令后,獲取所述查詢(xún)指令中的關(guān)聯(lián)字段、查詢(xún)條件 和查詢(xún)關(guān)鍵字段;獲取單元830,用于當(dāng)所述查詢(xún)指令中的關(guān)聯(lián)字段與本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián) 字段一致時(shí),獲取本地位圖關(guān)聯(lián)索引,轉(zhuǎn)換關(guān)聯(lián)字段并傳遞位圖矩陣;查詢(xún)單元840,用于根據(jù)所述本地位圖關(guān)聯(lián)索引中與所述查詢(xún)關(guān)鍵字段相關(guān)的字 段所在的數(shù)據(jù)包的知識(shí)信息,查詢(xún)滿(mǎn)足所述查詢(xún)條件的數(shù)據(jù)包。具體的,建立單元810可以包括(圖8中未示出)指令接收單元,用于接收創(chuàng)建 本地位圖關(guān)聯(lián)索引的指令,所述指令中包括需要關(guān)聯(lián)的事實(shí)表的名稱(chēng)、維度表的名稱(chēng)、關(guān)聯(lián) 字段的名稱(chēng)、物化字段的名稱(chēng);關(guān)聯(lián)建立單元,用于將事實(shí)表中關(guān)聯(lián)字段所在列的每一個(gè)數(shù) 據(jù)包分別與所述維度表進(jìn)行關(guān)聯(lián),并根據(jù)所述物化字段建立位圖矩陣;進(jìn)一步,還可以包括 索引壓縮單元,按照預(yù)設(shè)的壓縮算法對(duì)所述本地位圖關(guān)聯(lián)索引進(jìn)行壓縮。具體的,獲取單元830可以包括(圖8中未示出)字段替換單元,用于將所述查 詢(xún)指令中的關(guān)聯(lián)字段替換為本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段;索引讀取單元,用于根據(jù)所 述查詢(xún)關(guān)鍵讀取所述本地位圖關(guān)聯(lián)索引。通過(guò)以上的實(shí)施方式的描述可知,本申請(qǐng)實(shí)施例在進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),獲取源數(shù)據(jù) 表,并將源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分,對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得到多個(gè)數(shù)據(jù)包,為每個(gè) 數(shù)據(jù)包標(biāo)注知識(shí)信息,保存多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息;在進(jìn)行數(shù)據(jù)查詢(xún)時(shí),以數(shù) 據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引,接收查詢(xún)指令后,獲取查詢(xún)指令中的關(guān)聯(lián)字段、查詢(xún)條 件和查詢(xún)關(guān)鍵字段,當(dāng)查詢(xún)指令中的關(guān)聯(lián)字段與本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段一致時(shí), 獲取本地位圖關(guān)聯(lián)索引,根據(jù)本地位圖關(guān)聯(lián)索引中與查詢(xún)關(guān)鍵字段相關(guān)的字段所在的數(shù)據(jù) 包的知識(shí)信息,查詢(xún)滿(mǎn)足查詢(xún)條件的數(shù)據(jù)包。本申請(qǐng)實(shí)施例中,對(duì)列數(shù)據(jù)以數(shù)據(jù)包為粒度 進(jìn)行存儲(chǔ),并以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引,由于將數(shù)據(jù)包作為最小的I/O單元, 因此在存儲(chǔ)數(shù)據(jù)時(shí)可以減少對(duì)磁盤(pán)空間的占用,并且在查詢(xún)數(shù)據(jù)時(shí)相應(yīng)提高數(shù)據(jù)的查詢(xún)速 度。本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請(qǐng)實(shí)施例中的技術(shù)可借助軟件加必需 的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn)?;谶@樣的理解,本申請(qǐng)實(shí)施例中的技術(shù)方案本質(zhì)上或者 說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品可以存 儲(chǔ)在存儲(chǔ)介質(zhì)中,如ROM/RAM、磁碟、光盤(pán)等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以 是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例或者實(shí)施例的某些部分 所述的方法。本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于系統(tǒng)實(shí) 施例而言,由于其基本相似于方法實(shí)施例,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例 的部分說(shuō)明即可。 以上所述的本申請(qǐng)實(shí)施方式, 并不構(gòu)成對(duì)本申請(qǐng)保護(hù)范圍的限定。任何在本申請(qǐng) 的精神和原則之內(nèi)所作的修改、等同替換和改進(jìn)等,均應(yīng)包含在本申請(qǐng)的保護(hù)范圍之內(nèi)。
權(quán)利要求
一種數(shù)據(jù)存儲(chǔ)方法,其特征在于,包括獲取源數(shù)據(jù)表,并將所述源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分;對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得多個(gè)數(shù)據(jù)包,為每個(gè)所述數(shù)據(jù)包標(biāo)注知識(shí)信息;保存所述多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述知識(shí)信息至少包括數(shù)據(jù)包的邊界 值、聚合值、總計(jì)數(shù)值;所述知識(shí)信息還包括平均值、空值個(gè)數(shù)、自定義函數(shù)值。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得多個(gè)數(shù)據(jù) 包包括順序獲取每列數(shù)據(jù)的數(shù)據(jù)值;判斷所獲取的數(shù)據(jù)值的個(gè)數(shù)是否滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值,若滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù) 值,則將所獲取的數(shù)據(jù)值生成數(shù)據(jù)包,返回所述順序獲取每列數(shù)據(jù)的數(shù)據(jù)值的步驟;若不滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值,則判斷是否獲取完當(dāng)前列數(shù)據(jù)的數(shù)據(jù)值,若是,則將所 獲取的數(shù)據(jù)值生成數(shù)據(jù)包,否則,返回所述順序獲取每列數(shù)據(jù)的數(shù)據(jù)值的步驟。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述保存多個(gè)數(shù)據(jù)包之前,還包括根據(jù) 所述數(shù)據(jù)包的類(lèi)型,按照預(yù)設(shè)的壓縮算法對(duì)所述數(shù)據(jù)包進(jìn)行壓縮。
5.一種數(shù)據(jù)查詢(xún)方法,其特征在于,應(yīng)用如權(quán)利要求1至4任意一項(xiàng)所述的數(shù)據(jù)存儲(chǔ)方 法所存儲(chǔ)的數(shù)據(jù)進(jìn)行數(shù)據(jù)查詢(xún),包括以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引;接收查詢(xún)指令后,獲取所述查詢(xún)指令中的關(guān)聯(lián)字段、查詢(xún)條件和查詢(xún)關(guān)鍵字段; 當(dāng)所述查詢(xún)指令中的關(guān)聯(lián)字段與本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段一致時(shí),獲取本地位 圖關(guān)聯(lián)索引;根據(jù)所述本地位圖關(guān)聯(lián)索引中與所述查詢(xún)關(guān)鍵字段相關(guān)的字段所在的數(shù)據(jù)包的知識(shí) 信息,查詢(xún)滿(mǎn)足所述查詢(xún)條件的數(shù)據(jù)包。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián) 索引包括接收創(chuàng)建本地位圖關(guān)聯(lián)索引的指令,所述指令中包括需要關(guān)聯(lián)的事實(shí)表的名稱(chēng)、維度 表的名稱(chēng)、關(guān)聯(lián)字段的名稱(chēng)、物化字段的名稱(chēng);將事實(shí)表中關(guān)聯(lián)字段所在列的每一個(gè)數(shù)據(jù)包分別與所述維度表進(jìn)行關(guān)聯(lián),并根據(jù)所述 物化字段建立位圖矩陣。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,還包括按照預(yù)設(shè)的壓縮算法對(duì)所述本地 位圖關(guān)聯(lián)索引進(jìn)行壓縮。
8.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述獲取本地位圖關(guān)聯(lián)索引包括 將所述查詢(xún)指令中的關(guān)聯(lián)字段替換為本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段;根據(jù)所述查詢(xún)關(guān)鍵字段讀取所述本地位圖關(guān)聯(lián)索引。
9.一種數(shù)據(jù)存儲(chǔ)裝置,其特征在于,包括 獲取單元,用于獲取源數(shù)據(jù)表;拆分單元,用于將所述源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分;分組單元,用于對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得多個(gè)數(shù)據(jù)包,為每個(gè)所述數(shù)據(jù)包標(biāo)注知識(shí)信息;保存單元,用于保存所述多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息。
10.根據(jù)權(quán)利要求9所述的裝置,其特征在于,所述分組單元包括數(shù)據(jù)值獲取單元,用于順序獲取每列數(shù)據(jù)的數(shù)據(jù)值;計(jì)數(shù)值判斷單元,用于判斷所獲取的數(shù)據(jù)值的個(gè)數(shù)是否滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值;結(jié)果執(zhí)行單元,用于當(dāng)所述計(jì)數(shù)值判斷單元判斷滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值時(shí),則將所 獲取的數(shù)據(jù)值生成數(shù)據(jù)包,并返回所述數(shù)據(jù)值獲取單元執(zhí)行功能;當(dāng)所述計(jì)數(shù)值判斷單元 判斷不滿(mǎn)足預(yù)先設(shè)置的總計(jì)數(shù)值時(shí),判斷是否獲取完當(dāng)前列數(shù)據(jù)的數(shù)據(jù)值,若是,則將所獲 取的數(shù)據(jù)值生成數(shù)據(jù)包,否則,返回所述數(shù)據(jù)值獲取單元執(zhí)行功能。
11.根據(jù)權(quán)利要求9所述的裝置,其特征在于,還包括壓縮單元,用于當(dāng)所述保存單元保存所述多個(gè)數(shù)據(jù)包之前,根據(jù)所述數(shù)據(jù)包的類(lèi)型,按 照預(yù)設(shè)的壓縮算法對(duì)所述數(shù)據(jù)包進(jìn)行壓縮。
12.—種數(shù)據(jù)查詢(xún)裝置,其特征在于,應(yīng)用如權(quán)利要求9至11任意一項(xiàng)所述的數(shù)據(jù)存儲(chǔ) 裝置所存儲(chǔ)的數(shù)據(jù)進(jìn)行數(shù)據(jù)查詢(xún),包括建立單元,用于以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引;接收單元,用于接收查詢(xún)指令后,獲取所述查詢(xún)指令中的關(guān)聯(lián)字段、查詢(xún)條件和查詢(xún)關(guān) 鍵字段;獲取單元,用于當(dāng)所述查詢(xún)指令中的關(guān)聯(lián)字段與本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián)字段一致 時(shí),獲取本地位圖關(guān)聯(lián)索引;查詢(xún)單元,用于根據(jù)所述本地位圖關(guān)聯(lián)索引中與所述查詢(xún)關(guān)鍵字段相關(guān)的字段所在的 數(shù)據(jù)包的知識(shí)信息,查詢(xún)滿(mǎn)足所述查詢(xún)條件的數(shù)據(jù)包。
13.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述建立單元包括指令接收單元,用于接收創(chuàng)建本地位圖關(guān)聯(lián)索引的指令,所述指令中包括需要關(guān)聯(lián)的 事實(shí)表的名稱(chēng)、維度表的名稱(chēng)、關(guān)聯(lián)字段的名稱(chēng)、物化字段的名稱(chēng);關(guān)聯(lián)建立單元,用于將事實(shí)表中關(guān)聯(lián)字段所在列的每一個(gè)數(shù)據(jù)包分別與所述維度表進(jìn) 行關(guān)聯(lián),并根據(jù)所述物化字段建立位圖矩陣。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述建立單元還包括索引壓縮單元,按照預(yù)設(shè)的壓縮算法對(duì)所述本地位圖關(guān)聯(lián)索引進(jìn)行壓縮。
15.根據(jù)權(quán)利要求12所述的裝置,其特征在于,所述獲取單元包括字段替換單元,用于將所述查詢(xún)指令中的關(guān)聯(lián)字段替換為本地位圖關(guān)聯(lián)索引中的關(guān)聯(lián) 字段;索引讀取單元,用于根據(jù)所述查詢(xún)關(guān)鍵字段讀取所述本地位圖關(guān)聯(lián)索引。
全文摘要
本申請(qǐng)實(shí)施例公開(kāi)了數(shù)據(jù)存儲(chǔ)方法、查詢(xún)方法及裝置,所述數(shù)據(jù)存儲(chǔ)方法包括獲取源數(shù)據(jù)表,并將所述源數(shù)據(jù)表按照列結(jié)構(gòu)進(jìn)行拆分;對(duì)每列數(shù)據(jù)進(jìn)行分組,獲得到多個(gè)數(shù)據(jù)包,為每個(gè)所述數(shù)據(jù)包標(biāo)注知識(shí)信息;保存所述多個(gè)數(shù)據(jù)包及每個(gè)數(shù)據(jù)包的知識(shí)信息。本申請(qǐng)實(shí)施例中,對(duì)列數(shù)據(jù)以數(shù)據(jù)包為粒度進(jìn)行存儲(chǔ),并以數(shù)據(jù)包為粒度建立本地位圖關(guān)聯(lián)索引,由于將數(shù)據(jù)包作為最小的I/O單元,因此在存儲(chǔ)數(shù)據(jù)時(shí)可以減少對(duì)磁盤(pán)空間的占用,并且在查詢(xún)數(shù)據(jù)時(shí)相應(yīng)提高數(shù)據(jù)的查詢(xún)速度。
文檔編號(hào)G06F17/30GK101968806SQ20101051757
公開(kāi)日2011年2月9日 申請(qǐng)日期2010年10月22日 優(yōu)先權(quán)日2010年10月22日
發(fā)明者武新 申請(qǐng)人:天津南大通用數(shù)據(jù)技術(shù)有限公司