數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法
【專利摘要】本發(fā)明公開了一種數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法,用于解決現(xiàn)有行式數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法,由于其組織方法和查詢執(zhí)行方法的不同,且難以統(tǒng)一的技術(shù)問題。技術(shù)方案是在數(shù)據(jù)庫系統(tǒng)的存儲層分別設(shè)立一個行存儲引擎和一個列存儲引擎,然后由一個訪問接口層將兩者封裝起來,對列表進行元組物化,對行表進行投影,向查詢引擎提供統(tǒng)一的數(shù)據(jù)訪問接口。從而隱藏存儲差別,實現(xiàn)了查詢處理的統(tǒng)一化。
【專利說明】數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種行列混合存儲方法,特別是涉及一種數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法。
【背景技術(shù)】
[0002]參照圖3。在關(guān)系數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)是在邏輯上組織成表的形式。存取表的性能是影響數(shù)據(jù)庫系統(tǒng)性能的一個重要因素。表的存儲模式分為行存儲和列存儲兩種。行存儲模式下數(shù)據(jù)按元組存儲,每個元組的所有屬性都存儲在一起。如果要查詢一個元組的某個屬性值,則需要先讀取整個元組的數(shù)據(jù)。當前大多數(shù)的關(guān)系數(shù)據(jù)庫系統(tǒng)都采用行存儲技術(shù)。列存儲將表的每一列組織在一起進行存儲,不同的列獨立存儲。
[0003]隨著社會信息化程度的不斷加深,不斷累積的海量數(shù)據(jù)和不斷增加數(shù)據(jù)膨脹速度對數(shù)據(jù)庫系統(tǒng)提出了新的需求?;跀?shù)據(jù)庫的應(yīng)用主要分為OLTP和OLAP兩類,前者需要處理涉及頻繁“寫”操作的事物性查詢,后者側(cè)重于處理涉及大量“讀”操作的分析型查詢。研究應(yīng)用表明:列存儲在讀操作上有著較大的優(yōu)勢,非常適用于OLAP查詢。然而其對寫操作的支持并不理想,因此并不適合OLTP查詢。另一方面,多年的實踐表明傳統(tǒng)的行式數(shù)據(jù)庫對OLTP查詢支持的非常好。
[0004]由于上述原因,當前面向OLTP數(shù)據(jù)庫和面向OLAP的數(shù)據(jù)庫往往彼此獨立。然而很多企業(yè)和組織同時擁有這兩種業(yè)務(wù),不得不部署兩套系統(tǒng)。這種做法不僅增加了企業(yè)成本,而且實際使用中要在不同數(shù)據(jù)庫之間進行數(shù)據(jù)遷移,不利于數(shù)據(jù)的管理和使用。因此,構(gòu)建一種既支持列存儲,具有良好的讀性能,又支持行存儲,有良好寫性能,從而能同時支持OLTP和OLAP應(yīng)用的混合存儲數(shù)據(jù)庫有著巨大現(xiàn)實需求。
【發(fā)明內(nèi)容】
[0005]為了克服現(xiàn)有行式數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法,由于其組織方法和查詢執(zhí)行方法的不同,且難以統(tǒng)一的不足,本發(fā)明提供一種數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法。該方法在數(shù)據(jù)庫系統(tǒng)的存儲層分別設(shè)立一個行存儲引擎和一個列存儲引擎,然后由一個訪問接口層將兩者封裝起來,對列表進行元組物化,對行表進行投影,向查詢引擎提供統(tǒng)一的數(shù)據(jù)訪問接口,從而隱藏存儲差別,實現(xiàn)查詢處理的統(tǒng)一化。
[0006]本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:一種數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法,其特點是采用以下步驟:
[0007]步驟一、建立行列混合的存儲模型的步驟。
[0008](I)定義一個訪問的參數(shù)列表,負責行式文件和列式文件的訪問方式。
[0009](2)然后接入存儲引擎分裝層,從而向上隱藏存儲細節(jié),提供一致的數(shù)據(jù)訪問接口。查詢引擎訪問存儲引擎時提供四個訪問參數(shù)〈DataFilelD, StoreType, AttList, ConditionList〉,存儲引擎封裝層根據(jù)參數(shù)StoreType選擇行存儲子引擎或列存儲子引擎完成數(shù)據(jù)訪問。行存儲引擎根據(jù)參數(shù)AttList和ConditionList對數(shù)據(jù)進行選擇和投影;列存儲弓I擎則進行選擇和元組物化。
[0010](3)存儲引擎與查詢引擎間的數(shù)據(jù)交互以“元組”的形式進行,在存儲引擎以上的部分,表都是以行的方式存儲的,查詢分析和執(zhí)行過程復(fù)用行式數(shù)據(jù)庫的成熟邏輯。
[0011](4)對于數(shù)據(jù)插入,查詢引擎將數(shù)據(jù)元組連同訪問參數(shù)傳給存儲引擎,如果StoreType值為R0W,則由行存儲子引擎將數(shù)據(jù)元組作為整體寫入表文件;如果StoreType值為COLUMN,則在封裝層拆分,然后由列存儲子引擎將數(shù)據(jù)寫入各自的文件。
[0012]步驟二、構(gòu)建文件組織方法。
[0013]數(shù)據(jù)庫中的數(shù)據(jù)在邏輯上表現(xiàn)為表,物理上以文件的形式存儲于磁盤。
[0014](I)對于行表,同一表的數(shù)據(jù)存儲在一個文件中,文件名為表名通過映射函數(shù)生成的DataFilelD。文件的內(nèi)部結(jié)構(gòu)可以完全繼承相關(guān)行數(shù)據(jù)庫的方法。
[0015](2)對于列表,表的每個屬性列獨立地組織成一個文件,每個表對應(yīng)一組文件。文件名的格式為〈DataFilelD-AttID〉,其中DataFilelD由表名經(jīng)過映射得到,AttID由屬性名映射得到。
[0016](3) DataFilelD命名的文件,用以存儲元組的公共描述信息。
[0017](4)在列表文件內(nèi)部,首先在文件頭部存儲數(shù)據(jù)類型、數(shù)據(jù)長度等描述信息,之后連續(xù)的存儲有效數(shù)據(jù)。列表在數(shù)據(jù)讀出后需要進行元組物化操作。
[0018]步驟三、行列混合存儲查詢流程。
[0019](I)根據(jù)創(chuàng)建表時的存儲模型,在查詢語句的解析階段,獲取表的存儲模式;
[0020](2)結(jié)合查詢分析的相關(guān)信息生成〈DataFilelD, StoreType, AttList, ConditionList>四個訪問參數(shù)。
[0021](3)執(zhí)行引擎在訪問數(shù)據(jù)時將訪問參數(shù)傳給存儲引擎,存儲引擎根據(jù)參數(shù)選擇適當?shù)姆椒ㄗx取數(shù)據(jù)并作選擇、投影處理后返回數(shù)據(jù)。
[0022]本發(fā)明的有益效果是:由于該方法在數(shù)據(jù)庫系統(tǒng)的存儲層分別設(shè)立一個行存儲引擎和一個列存儲引擎,然后由一個訪問接口層將兩者封裝起來,對列表進行元組物化,對行表進行投影,向查詢引擎提供統(tǒng)一的數(shù)據(jù)訪問接口。從而隱藏存儲差別,實現(xiàn)了查詢處理的統(tǒng)一化。
[0023]下面結(jié)合附圖和實施例對本發(fā)明作詳細說明。
【專利附圖】
【附圖說明】
[0024]圖1是本發(fā)明數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法流程圖。
[0025]圖2是本發(fā)明方法用行列混合存儲數(shù)據(jù)庫系統(tǒng)邏輯結(jié)構(gòu)示意圖。
[0026]圖3是【背景技術(shù)】行列混合存儲系統(tǒng)存儲方法示意圖。
【具體實施方式】
[0027]參照圖1-2。本發(fā)明數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法具體步驟如下:
[0028]1.建立行列混合的存儲模型。
[0029]本發(fā)明提出的行列混合數(shù)據(jù)庫系統(tǒng)是指數(shù)據(jù)庫系統(tǒng)中一個表可以選擇按行或者按列中一種方法存儲,每個表在數(shù)據(jù)庫中僅存儲一份,用戶在創(chuàng)建表時根據(jù)需求指定表的存儲方式以獲得相應(yīng)的讀寫性能。具體步驟如下:[0030](I)定義一個訪問的參數(shù)列表,負責行式文件和列式文件的訪問方式,見表I。
[0031]表I訪問參數(shù)說明表
[0032]
【權(quán)利要求】
1.一種數(shù)據(jù)庫系統(tǒng)的行列混合存儲方法,其特征在于包括以下步驟:步驟一、建立行列混合的存儲模型的步驟;(O定義一個訪問的參數(shù)列表,負責行式文件和列式文件的訪問方式;(2)然后接入存儲引擎分裝層,從而向上隱藏存儲細節(jié),提供一致的數(shù)據(jù)訪問接口;查詢引擎訪問存儲引擎時提供四個訪問參數(shù)〈DataFilelD, StoreType, AttList, ConditionList>,存儲引擎封裝層根據(jù)參數(shù)StoreType選擇行存儲子引擎或列存儲子引擎完成數(shù)據(jù)訪問;行存儲引擎根據(jù)參數(shù)AttList和ConditionList對數(shù)據(jù)進行選擇和投影;列存儲引擎則進行選擇和元組物化;(3)存儲引擎與查詢引擎間的數(shù)據(jù)交互以“元組”的形式進行,在存儲引擎以上的部分,表都是以行的方式存儲的,查詢分析和執(zhí)行過程復(fù)用行式數(shù)據(jù)庫的成熟邏輯;(4)對于數(shù)據(jù)插入,查詢引擎將數(shù)據(jù)元組連同訪問參數(shù)傳給存儲引擎,如果StoreType值為ROW,則由行存儲子引擎將數(shù)據(jù)元組作為整體寫入表文件;如果StoreType值為COLUMN,則在封裝層拆分,然后由列存儲子引擎將數(shù)據(jù)寫入各自的文件;步驟二、構(gòu)建文件組織方法;數(shù)據(jù)庫中的數(shù)據(jù)在邏輯上表現(xiàn)為表,物理上以文件的形式存儲于磁盤;(1)對于行表,同一表的數(shù)據(jù)存儲在一個文件中,文件名為表名通過映射函數(shù)生成的DataFileID ;文件的內(nèi)部結(jié)構(gòu)可以完全繼承相關(guān)行數(shù)據(jù)庫的方法;(2)對于列表,表的每個屬性列獨立地組織成一個文件,每個表對應(yīng)一組文件;文件名的格式為〈DataFilelD-AttID〉,其中DataFileID由表名經(jīng)過映射得到,AttID由屬性名映射得到;(3)DataFileID命名的文件,用以存儲元組的公共描述信息;(4)在列表文件內(nèi)部,首先在文件頭部存儲數(shù)據(jù)類型、數(shù)據(jù)長度等描述信息,之后連續(xù)的存儲有效數(shù)據(jù);列表在數(shù)據(jù)讀出后需要進行元組物化操作;步驟三、行列混合存儲查詢流程;(1)根據(jù)創(chuàng)建表時的存儲模型,在查詢語句的解析階段,獲取表的存儲模式;(2)結(jié)合查詢分析的相關(guān)信息生成〈DataFilelD,StoreType, AttList, ConditionList〉四個訪問參數(shù);(3)執(zhí)行引擎在訪問數(shù)據(jù)時將訪問參數(shù)傳給存儲引擎,存儲引擎根據(jù)參數(shù)選擇適當?shù)姆椒ㄗx取數(shù)據(jù)并作選擇、投影處理后返回數(shù)據(jù)。
【文檔編號】G06F17/30GK103440245SQ201310296167
【公開日】2013年12月11日 申請日期:2013年7月15日 優(yōu)先權(quán)日:2013年7月15日
【發(fā)明者】王卓, 肖玉澤, 陳群, 劉海龍, 白松, 孫林超, 李戰(zhàn)懷 申請人:西北工業(yè)大學(xué)