專利名稱::一種基于行存數(shù)據(jù)庫(kù)引擎的列存方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及一種基于行存數(shù)據(jù)庫(kù)引擎的列存方法,屬于數(shù)據(jù)庫(kù)系統(tǒng)領(lǐng)域。
背景技術(shù):
:隨著企業(yè)信息化程度的提高,分析型數(shù)據(jù)庫(kù)的應(yīng)用越來(lái)越普遍,對(duì)面向海量數(shù)據(jù)的OLAP查詢效率也提出了更高的要求。近年來(lái)涌現(xiàn)出的列存數(shù)據(jù)庫(kù),如商業(yè)數(shù)據(jù)庫(kù)SybaselQ,開(kāi)源數(shù)據(jù)庫(kù)Cltore、MonetDB已被證明在只讀的數(shù)據(jù)倉(cāng)庫(kù)查詢處理中具有非常好的性能。很多實(shí)驗(yàn)也表明對(duì)于高選擇率、高投影率和大量聚集計(jì)算的OLAP查詢,列存儲(chǔ)的性能大大好于行存儲(chǔ)。然而由于兩種方式的底層物理存儲(chǔ)模式不同,使得用戶無(wú)法在同一數(shù)據(jù)庫(kù)系統(tǒng)中根據(jù)需要轉(zhuǎn)換使用行存儲(chǔ)和列存儲(chǔ)兩種存儲(chǔ)模式來(lái)存儲(chǔ)數(shù)據(jù)及執(zhí)行查詢。而在同一個(gè)企業(yè)應(yīng)用中面向OLTP和OLAP應(yīng)用同時(shí)部署行存儲(chǔ)和列存儲(chǔ)兩種數(shù)據(jù)庫(kù)系統(tǒng)無(wú)疑增大了部署和維護(hù)開(kāi)銷,對(duì)于絕大部分企業(yè)都是無(wú)法承受的。與行存數(shù)據(jù)庫(kù)相比,列存數(shù)據(jù)庫(kù)的高效查詢主要依賴于四大關(guān)鍵技術(shù)數(shù)據(jù)壓縮、延時(shí)物化、成組迭代、不可見(jiàn)連接等,如果能將這些有效的技術(shù)以最小的代價(jià)應(yīng)用于傳統(tǒng)行存數(shù)據(jù)庫(kù),必將極大地增強(qiáng)傳統(tǒng)數(shù)據(jù)庫(kù)產(chǎn)品的競(jìng)爭(zhēng)力。目前,學(xué)術(shù)界提出可以使用垂直分區(qū)、全列索引、物化視圖等手段,在不改變行存數(shù)據(jù)庫(kù)的物理存儲(chǔ)結(jié)構(gòu)的前提下,模擬列存的某些特性。垂直分區(qū)可以減小I/O數(shù)據(jù)量,但如果查詢涉及到多列,不可避免地要使用JOIN連接,導(dǎo)致CPU性能效果不佳;全列索引可以提高某些即時(shí)精確查詢的處理效率,但會(huì)增加存儲(chǔ)空間;物化視圖可以有效地減小1/0,但需用戶提前進(jìn)行語(yǔ)句調(diào)優(yōu),操作對(duì)用戶不透明。與學(xué)術(shù)界的研究相比,數(shù)據(jù)庫(kù)產(chǎn)業(yè)界主要采取了混合存儲(chǔ)的模式·ORACLE在Ilg的版本中,ORACLE使用了PAX(PARTITIONATTRIBUTEACROSS)技術(shù),基本的思想是將盡可能多的數(shù)據(jù)行放入一個(gè)數(shù)據(jù)塊中,但是在數(shù)據(jù)塊內(nèi)部使用列結(jié)構(gòu)對(duì)數(shù)據(jù)加以存儲(chǔ),這樣一來(lái),保留了列存儲(chǔ)數(shù)據(jù)壓縮和利用緩存的優(yōu)點(diǎn)·Greenplum,AsterData,Teradata他們的混合儲(chǔ)存都是可以把不同的表或者同一個(gè)表的不同分區(qū)按任意方式存儲(chǔ)(行,列),使用的SQL語(yǔ)句都是透明的·Vertica在列存物理結(jié)構(gòu)的基礎(chǔ)上,將比較小的列或者經(jīng)常一起讀取的列放在一起,形成一個(gè)迷你組的列(mini-group),使得在讀取的時(shí)候既不會(huì)增加太多10,又不會(huì)每次需要更多的隨機(jī)讀上述數(shù)據(jù)庫(kù)產(chǎn)品均很好的將行存與列存結(jié)合起來(lái),由一個(gè)統(tǒng)一的數(shù)據(jù)庫(kù)管理系統(tǒng)提供透明的存儲(chǔ)服務(wù),但他們均在物理存儲(chǔ)層設(shè)計(jì)了新的頁(yè)面管理結(jié)構(gòu)來(lái)存儲(chǔ)列存數(shù)據(jù),并投入了較高的研發(fā)成本。
發(fā)明內(nèi)容本發(fā)明公開(kāi)的的方法,其基本思想與ORACLE類似,但不同點(diǎn)在于不需要更改底層的存儲(chǔ)引擎,而是利用行存數(shù)據(jù)庫(kù)現(xiàn)有的大對(duì)象存儲(chǔ)機(jī)制,通過(guò)批量導(dǎo)入接口將若干行數(shù)據(jù)以數(shù)據(jù)包的形式存儲(chǔ)在大對(duì)象管理的存儲(chǔ)結(jié)構(gòu)中,數(shù)據(jù)包中的行數(shù)據(jù)按列存儲(chǔ),按列壓縮,以達(dá)到列存數(shù)據(jù)庫(kù)高壓縮率的特點(diǎn)。具體來(lái)說(shuō),本發(fā)明公開(kāi)了一種基于行存數(shù)據(jù)庫(kù)引擎的列存方法,包括行存儲(chǔ)數(shù)據(jù)庫(kù),并基于所述行數(shù)據(jù)庫(kù)進(jìn)行如下操作創(chuàng)建壓縮表,并指定相應(yīng)的壓縮級(jí)別;將CSV格式的數(shù)據(jù)文件導(dǎo)入到所創(chuàng)建的壓縮表中,其特征在于;所述壓縮表對(duì)外表現(xiàn)為一個(gè)普通的數(shù)據(jù)表,可以支持通常的DML/DDL操作;對(duì)內(nèi)實(shí)現(xiàn)為一個(gè)主HOT數(shù)據(jù)段及一個(gè)從LOB大對(duì)象段,其中主HOT段用于存儲(chǔ)內(nèi)部定義的屬性行,從LOB段用于存儲(chǔ)壓縮方法控制結(jié)構(gòu)及壓縮后的數(shù)據(jù)內(nèi)容;所述壓縮表支持各種查詢語(yǔ)句,查詢時(shí)雖然需要將行中所有字段讀入內(nèi)存,但只解壓與查詢相關(guān)的列數(shù)據(jù);所述壓縮表支持更新操作,且更新時(shí)僅解壓代更新的列;所述壓縮表支持快速刪除,僅做刪除標(biāo)記,當(dāng)從行中沒(méi)有記錄時(shí),主行會(huì)被自動(dòng)刪除;和刪除所述壓縮表。本發(fā)明所述的列存方法,其中所述的屬性行的定義包括但不限于如下字段BLOBLOB定位器,管理壓縮后的數(shù)據(jù)內(nèi)容INT4該物理行管理的壓縮數(shù)據(jù)的邏輯行數(shù)VARBIT(64000)該物理行管理的壓縮數(shù)據(jù)中邏輯行的刪除狀態(tài)本發(fā)明所述的列存方法,其中在將CSV格式的數(shù)據(jù)文件導(dǎo)入到創(chuàng)建的壓縮表時(shí),用戶可以指定批量導(dǎo)入時(shí)緩存的行數(shù)。本發(fā)明所述的列存方法,其中在創(chuàng)建壓縮表時(shí),用戶可以指定壓縮級(jí)別。圖1是本發(fā)明所述方法的流程圖;圖2是本發(fā)明所定義的數(shù)據(jù)結(jié)構(gòu)。具體實(shí)施例方式下面結(jié)合附圖1及具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步的描述1.如圖1所示,首先通過(guò)CREAETTABLEtable_nameCOMPRESScompress_level創(chuàng)建壓縮表,用戶可以指定壓縮級(jí)別(09),理論上級(jí)別越高壓縮比越大但速度越慢;2.通過(guò)BULKINSERT語(yǔ)句將CSV格式的數(shù)據(jù)文件導(dǎo)入到創(chuàng)建的壓縮表中,用戶可以指定批量導(dǎo)入時(shí)緩存的行數(shù),值越大可能壓縮效果及速度越好,但內(nèi)存占用也越多;3.如圖2所示,壓縮表對(duì)外表現(xiàn)為一個(gè)普通的數(shù)據(jù)表,可以支持通常的DML/DDL操作;對(duì)內(nèi)實(shí)現(xiàn)為一個(gè)主HOT數(shù)據(jù)段及一個(gè)從LOB大對(duì)象段,其中主HOT段用于存儲(chǔ)內(nèi)部定義的屬性行,屬性行的定義包括但不限于如下字段BLOBLOB定位器,管理壓縮后的數(shù)據(jù)內(nèi)容INT4該物理行管理的壓縮數(shù)據(jù)的邏輯行數(shù)VARBIT(64000)該物理行管理的壓縮數(shù)據(jù)中邏輯行的刪除狀態(tài)從LOB段用于存儲(chǔ)壓縮方法控制結(jié)構(gòu)及壓縮后的數(shù)據(jù)內(nèi)容;4.壓縮表支持各種查詢語(yǔ)句,查詢時(shí)雖然需要將行中所有字段讀入內(nèi)存,但只解壓與查詢相關(guān)的列數(shù)據(jù),考慮到經(jīng)列存壓縮后數(shù)據(jù)量一般有51的壓縮率,已較傳統(tǒng)行存數(shù)據(jù)庫(kù)大大減少了I/O量,且對(duì)于多字段查詢,并不需要像列存數(shù)據(jù)庫(kù)那樣進(jìn)行多字段的隨機(jī)I/O讀取,在大多數(shù)情況下查詢性能與列存數(shù)據(jù)庫(kù)相當(dāng);5.壓縮表支持更新操作,且更新時(shí)僅解壓代更新的列;6.壓縮表支持快速刪除,僅做刪除標(biāo)記,當(dāng)從行中沒(méi)有記錄時(shí),主行會(huì)被自動(dòng)刪除;7.通過(guò)DROPTABLEtable_name可以刪除壓縮表。本發(fā)明所涉及的方法已經(jīng)在神舟通用KST0RE2.0版本的產(chǎn)品上得到了應(yīng)用,我們將KST0RE2.0與ORACLEIlg進(jìn)行了嚴(yán)格的對(duì)比測(cè)試,測(cè)試結(jié)論如下功能測(cè)試方面1)數(shù)據(jù)庫(kù)壓縮率測(cè)試權(quán)利要求1.一種基于行存數(shù)據(jù)庫(kù)引擎的列存方法,包括行存儲(chǔ)數(shù)據(jù)庫(kù),并基于所述行數(shù)據(jù)庫(kù)進(jìn)行如下操作創(chuàng)建壓縮表,并指定相應(yīng)的壓縮級(jí)別;將CSV格式的數(shù)據(jù)文件導(dǎo)入到所創(chuàng)建的壓縮表中,其特征在于;所述壓縮表對(duì)外表現(xiàn)為一個(gè)普通的數(shù)據(jù)表,可以支持通常的DML/DDL操作;對(duì)內(nèi)實(shí)現(xiàn)為一個(gè)主HOT數(shù)據(jù)段及一個(gè)從LOB大對(duì)象段,其中主HOT段用于存儲(chǔ)內(nèi)部定義的屬性行,從LOB段用于存儲(chǔ)壓縮方法控制結(jié)構(gòu)及壓縮后的數(shù)據(jù)內(nèi)容;所述壓縮表支持各種查詢語(yǔ)句,查詢時(shí)雖然需要將行中所有字段讀入內(nèi)存,但只解壓與查詢相關(guān)的列數(shù)據(jù);所述壓縮表支持更新操作,且更新時(shí)僅解壓代更新的列;所述壓縮表支持快速刪除,僅做刪除標(biāo)記,當(dāng)從行中沒(méi)有記錄時(shí),主行會(huì)被自動(dòng)刪除;和刪除所述壓縮表。2.根據(jù)權(quán)利要求1所述的列存方法,其中所述的屬性行的定義包括但不限于如下字段BLOBLOB定位器,管理壓縮后的數(shù)據(jù)內(nèi)容INT4該物理行管理的壓縮數(shù)據(jù)的邏輯行數(shù)VARBIT(64000)該物理行管理的壓縮數(shù)據(jù)中邏輯行的刪除狀態(tài)。3.根據(jù)權(quán)利要求1所述的列存方法,其中在將CSV格式的數(shù)據(jù)文件導(dǎo)入到創(chuàng)建的壓縮表時(shí),用戶可以指定批量導(dǎo)入時(shí)緩存的行數(shù)。4.根據(jù)權(quán)利要求1所述的列存方法,其中在創(chuàng)建壓縮表時(shí),用戶可以指定壓縮級(jí)別。全文摘要本發(fā)明公開(kāi)一種基于行存數(shù)據(jù)庫(kù)引擎的列存方法,包括行存儲(chǔ)數(shù)據(jù)庫(kù),并基于所述行數(shù)據(jù)庫(kù)進(jìn)行如下操作創(chuàng)建壓縮表,并指定相應(yīng)的壓縮級(jí)別;將CSV格式的數(shù)據(jù)文件導(dǎo)入到所創(chuàng)建的壓縮表中,其特征在于;壓縮表對(duì)外表現(xiàn)為一個(gè)普通的數(shù)據(jù)表,可以支持通常的DML/DDL操作;對(duì)內(nèi)實(shí)現(xiàn)為一個(gè)主HOT數(shù)據(jù)段及一個(gè)從LOB大對(duì)象段,其中主HOT段用于存儲(chǔ)內(nèi)部定義的屬性行,從LOB段用于存儲(chǔ)壓縮方法控制結(jié)構(gòu)及壓縮后的數(shù)據(jù)內(nèi)容;壓縮表支持各種查詢語(yǔ)句,查詢時(shí)雖然需要將行中所有字段讀入內(nèi)存,但只解壓與查詢相關(guān)的列數(shù)據(jù);所述壓縮表支持更新操作,且更新時(shí)僅解壓代更新的列;所述壓縮表支持快速刪除,僅做刪除標(biāo)記,當(dāng)從行中沒(méi)有記錄時(shí),主行會(huì)被自動(dòng)刪除;和刪除壓縮表。本發(fā)明通過(guò)行存數(shù)據(jù)庫(kù)技術(shù),在不改變存儲(chǔ)引擎物理結(jié)果的前提下,實(shí)現(xiàn)了按列壓縮存儲(chǔ)的技術(shù),并達(dá)到了列存數(shù)據(jù)庫(kù)高壓縮比的效果。文檔編號(hào)G06F17/30GK102495905SQ20111043669公開(kāi)日2012年6月13日申請(qǐng)日期2011年12月23日優(yōu)先權(quán)日2011年12月23日發(fā)明者何清法,關(guān)剛,馮柯,劉碧楠,周宇,李陽(yáng),王嘉春,蔣志勇,顧云蘇申請(qǐng)人:天津神舟通用數(shù)據(jù)技術(shù)有限公司