專利名稱:基于列分解的列存儲數(shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法
技術(shù)領(lǐng)域:
本發(fā)明屬于計(jì)算機(jī)中的數(shù)據(jù)庫技術(shù)領(lǐng)域,具體涉及一種基于列分解的列存儲數(shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法。
背景技術(shù):
隨著數(shù)據(jù)庫技術(shù)的廣泛應(yīng)用,聯(lián)機(jī)分析處理、數(shù)據(jù)倉庫和數(shù)據(jù)挖掘等查詢密集型應(yīng)用對數(shù)據(jù)庫管理系統(tǒng)的查詢性能提出了更高的挑戰(zhàn)。數(shù)據(jù)壓縮技術(shù)是提高數(shù)據(jù)庫管理系統(tǒng)的查詢性能的方法之一。數(shù)據(jù)壓縮的目的是為了減少1/0,從而提高查詢效率。一般利用數(shù)據(jù)分布規(guī)律的特點(diǎn)來達(dá)到減少存儲空間的目的。但是在查詢的過程中,需要對數(shù)據(jù)進(jìn)行解壓。當(dāng)解壓所花費(fèi)的時(shí)間超過了壓縮所帶來的數(shù)據(jù)查找及傳輸開銷節(jié)約的時(shí)間時(shí),壓縮的效果就被抵消了。因此,需要在數(shù)據(jù)的壓縮比和解壓開銷之間進(jìn)行折中以保證查詢效率。在聯(lián)機(jī)分析處理、決策支持等應(yīng)用中,列存儲數(shù)據(jù)庫性能優(yōu)于行存儲數(shù)據(jù)庫。原因是在行存儲數(shù)據(jù)庫中,由于數(shù)據(jù)按照行的格式進(jìn)行存儲,而元組的各個(gè)屬性的類型很可能不同,所以相鄰數(shù)據(jù)之間關(guān)聯(lián)性不強(qiáng),使得壓縮比不高。在列存儲數(shù)據(jù)庫中,數(shù)據(jù)是按列進(jìn)行存儲的,每一列的類型是一致的,數(shù)據(jù)之間存在較高的關(guān)聯(lián)性,可以獲得較高的壓縮比。 考慮到解壓的時(shí)間開銷,一般采用輕量級的壓縮算法。重量級壓縮算法雖然壓縮比很高,但是解壓的時(shí)間開銷較大,并且無法在壓縮后的數(shù)據(jù)上直接執(zhí)行查詢。另外,在列存儲數(shù)據(jù)庫中,有一些專門針對字符型數(shù)據(jù)進(jìn)行壓縮的方法,以獲取壓縮比和解壓開銷之間的平衡。但是,專門針對數(shù)值型數(shù)據(jù)進(jìn)行壓縮的方法比較少。對于數(shù)值型的數(shù)據(jù),如果其本身具有一定的分布規(guī)律,則可以利用輕量級壓縮算法進(jìn)行壓縮。但是,當(dāng)其本身并沒有明顯的分布規(guī)律時(shí),就無法直接利用輕量級壓縮算法進(jìn)行壓縮,需要研究更好的數(shù)值數(shù)據(jù)壓縮方法。
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種基于列分解的列存儲數(shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法,同時(shí)適用于數(shù)值型數(shù)據(jù)有明顯分布規(guī)律和無明顯分布規(guī)律的情況?;诹蟹纸獾牧写鎯?shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法,具體為基于列分解的列存儲數(shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法,具體為提取數(shù)據(jù)表中的一列數(shù)據(jù),將所述列數(shù)據(jù)中的每個(gè)數(shù)據(jù)分解得到多個(gè)子列,每個(gè)子列內(nèi)的不同數(shù)據(jù)占用空間相等,在每個(gè)子列內(nèi)統(tǒng)計(jì)數(shù)據(jù)分布規(guī)律的特征值,依據(jù)所述數(shù)據(jù)分布規(guī)律的特征值選取相應(yīng)的輕量級壓縮算法對所述子列進(jìn)行壓縮。所述子列中的每個(gè)數(shù)據(jù)占用空間為字節(jié)或字節(jié)的倍數(shù)。所述不同子列中的數(shù)據(jù)占用空間相等或不相等。所述輕量級壓縮算法為字典編碼壓縮法、位圖編碼壓縮法、行程編碼壓縮法、FOR 編碼壓縮法中的一種。本發(fā)明的技術(shù)效果體現(xiàn)在
本發(fā)明將沒有規(guī)律的數(shù)值數(shù)據(jù)列分解為若干個(gè)子列,然后分別在分解后的子列數(shù)據(jù)中統(tǒng)計(jì)數(shù)據(jù)分布規(guī)律的特征值,選擇合適的輕量級壓縮算法作為子列的數(shù)據(jù)壓縮算法, 分別對各個(gè)子列數(shù)據(jù)進(jìn)行壓縮,從而實(shí)現(xiàn)對沒有規(guī)律的數(shù)值數(shù)據(jù)列的部分壓縮。同樣地,本發(fā)明也可適用于有規(guī)律的數(shù)值數(shù)據(jù)列壓縮。
圖1為本發(fā)明方法工作流程圖。圖2為本發(fā)明實(shí)例壓縮后的存儲示意圖。
具體實(shí)施例方式下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的描述,但該實(shí)施例不應(yīng)理解為對本發(fā)明的限制。參考圖1,基于列分解的列存儲數(shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法,具體為提取數(shù)據(jù)表中的一列數(shù)據(jù),將所述列數(shù)據(jù)中的每個(gè)數(shù)據(jù)分解從而得到多個(gè)子列,每個(gè)子列中的各數(shù)據(jù)占用空間相等,對每個(gè)子列統(tǒng)計(jì)數(shù)據(jù)分布規(guī)律的特征值,依據(jù)所述數(shù)據(jù)分布規(guī)律的特征值選取適當(dāng)?shù)妮p量級壓縮算法對所述子列進(jìn)行壓縮。所述子列中的每個(gè)數(shù)據(jù)占用空間為字節(jié)或字節(jié)的倍數(shù)。所述不同子列中的數(shù)據(jù)占用空間相等或不相等。對于每個(gè)待壓縮的子列數(shù)據(jù),掃描整個(gè)子列上的數(shù)據(jù),統(tǒng)計(jì)數(shù)據(jù)分布規(guī)律的特征值,根據(jù)這些特征值計(jì)算采用各種輕量級壓縮算法壓縮后子列數(shù)據(jù)的占用空間,選擇占用空間最小的作為壓縮算法,對該子列數(shù)據(jù)進(jìn)行壓縮后存儲。所述輕量級壓縮算法為字典編碼壓縮法、位圖編碼壓縮法、行程編碼壓縮法、FOR編碼壓縮法中的一種。在數(shù)值數(shù)據(jù)列上進(jìn)行的查詢,則轉(zhuǎn)換成在這S個(gè)子列上的查詢,包括等值查詢和范圍查詢兩種情況,將查詢條件中的值進(jìn)行分解,轉(zhuǎn)換為對這S個(gè)子列上的等值查詢和范圍查詢,使得查詢可以直接在壓縮的子列數(shù)據(jù)上進(jìn)行,將各個(gè)子列上的查詢結(jié)果集求交,得到最終的查詢結(jié)果。實(shí)施例在數(shù)據(jù)庫中定義基本表Tablel(C0Ilint),現(xiàn)在有一批數(shù)值數(shù)據(jù)143,768,4, 20000,453,1081143,1048581需要裝載進(jìn)入數(shù)據(jù)庫。顯然這些數(shù)據(jù)分布特征不明顯,難以直接采用輕量級的壓縮算法進(jìn)行壓縮?,F(xiàn)在將這些數(shù)據(jù)按照高低兩個(gè)字節(jié)分解為兩個(gè)子列, 高16位和低16位后,發(fā)現(xiàn)前5個(gè)數(shù)據(jù)高16位全部為0,后兩個(gè)數(shù)據(jù)高16位均為10H。因此可以利用數(shù)據(jù)的局部特征對數(shù)據(jù)進(jìn)行進(jìn)一步的壓縮。分別統(tǒng)計(jì)分解后的數(shù)據(jù)分布的三個(gè)特征值不同值的個(gè)數(shù)B、數(shù)值變化的次數(shù)CB 和每個(gè)數(shù)據(jù)與最小值差值的最大值MD。統(tǒng)計(jì)結(jié)果如表1所示。
權(quán)利要求
1.基于列分解的列存儲數(shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法,具體為提取數(shù)據(jù)表中的一列數(shù)據(jù),將所述列數(shù)據(jù)中的每個(gè)數(shù)據(jù)分解得到多個(gè)子列,每個(gè)子列內(nèi)的不同數(shù)據(jù)占用空間相等, 在每個(gè)子列內(nèi)統(tǒng)計(jì)數(shù)據(jù)分布規(guī)律的特征值,依據(jù)所述數(shù)據(jù)分布規(guī)律的特征值選取相應(yīng)的輕量級壓縮算法對所述子列進(jìn)行壓縮。
2.根據(jù)權(quán)利要求1所述的列存儲數(shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法,其特征在于,所述子列中的每個(gè)數(shù)據(jù)占用空間為字節(jié)或字節(jié)的倍數(shù)。
3.根據(jù)權(quán)利要求1或2所述的列存儲數(shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法,其特征在于,所述不同子列中的數(shù)據(jù)占用空間相等或不相等。
4.根據(jù)權(quán)利要求1或2所述的列存儲數(shù)據(jù)庫數(shù)值數(shù)據(jù)壓縮方法,其特征在于,所述輕量級壓縮算法為字典編碼壓縮法、位圖編碼壓縮法、行程編碼壓縮法和FOR編碼壓縮法中的一種。
全文摘要
本發(fā)明提供了一種用于列存儲數(shù)據(jù)庫的數(shù)值數(shù)據(jù)壓縮方法,具體為提取數(shù)據(jù)表中的一列數(shù)據(jù),將所述列數(shù)據(jù)中的每個(gè)數(shù)據(jù)分解得到多個(gè)子列,每個(gè)子列內(nèi)的不同數(shù)據(jù)占用空間相等,在每個(gè)子列內(nèi)統(tǒng)計(jì)數(shù)據(jù)分布規(guī)律的特征值,依據(jù)所述數(shù)據(jù)分布規(guī)律的特征值選取相應(yīng)的輕量級壓縮算法進(jìn)行壓縮。本發(fā)明操作簡單,適用于有規(guī)律和無規(guī)律分布的數(shù)值數(shù)據(jù)壓縮。
文檔編號G06F17/30GK102521363SQ20111042183
公開日2012年6月27日 申請日期2011年12月15日 優(yōu)先權(quán)日2011年12月15日
發(fā)明者吳恒山, 章濤, 郭琰 申請人:武漢達(dá)夢數(shù)據(jù)庫有限公司