一種基于話單數(shù)據(jù)的壓縮和存儲(chǔ)方法
【專利摘要】本發(fā)明涉及一種基于話單數(shù)據(jù)的壓縮和存儲(chǔ)方法,由列存儲(chǔ)系統(tǒng)實(shí)現(xiàn),列存儲(chǔ)系統(tǒng)包括壓縮模塊、存儲(chǔ)模塊和處理模塊,本發(fā)明方法采用多種輕量級壓縮算法從語法和語義分別對數(shù)據(jù)進(jìn)行壓縮,將數(shù)據(jù)存儲(chǔ)于特定的列存數(shù)據(jù)庫。并支持多種數(shù)據(jù)處理語言對壓縮態(tài)下的數(shù)據(jù)進(jìn)行查詢篩選等操作。本發(fā)明針對運(yùn)營商實(shí)際存在的問題提出了一種有效的解決方案,并且適用于各大運(yùn)營商處理其大量的話單數(shù)據(jù),大大減少了數(shù)據(jù)存儲(chǔ)所需的空間,在數(shù)據(jù)存儲(chǔ)上引入了列存數(shù)據(jù)庫,由于其自身存儲(chǔ)的特殊性,與各種輕量級壓縮算法可以完美的結(jié)合起來,由于采用輕量級壓縮算法,可以對壓縮態(tài)的數(shù)據(jù)直接進(jìn)行SQL操作,大大提高了數(shù)據(jù)的處理速度。
【專利說明】一種基于話單數(shù)據(jù)的壓縮和存儲(chǔ)方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)壓縮和數(shù)據(jù)庫領(lǐng)域,特別涉及一種基于話單數(shù)據(jù)的壓縮和存儲(chǔ)方法。
【背景技術(shù)】
[0002]如今人們的日常生活已經(jīng)越來越離不開移動(dòng)通信,而隨之產(chǎn)生大量數(shù)據(jù)也得到了更多的關(guān)注。就中國移動(dòng)的業(yè)務(wù)支撐能力而言,在業(yè)務(wù)量方面,用戶總數(shù)超過7億,全年受理營業(yè)300多億次,完成統(tǒng)計(jì)報(bào)表數(shù)億張;在支撐能力方面,全年處理幾萬億張計(jì)費(fèi)話單,幾千萬張結(jié)算單,全網(wǎng)OLTP處理能力接近40億tpmC,存儲(chǔ)的有效容量將近20PB。面對如此之大的數(shù)據(jù)量,傳統(tǒng)的存儲(chǔ)方式和處理策略存在很大的局限性與滯后性。如何找到一種對大規(guī)模話單數(shù)據(jù)進(jìn)行存儲(chǔ)和處理的方式,已經(jīng)成為三大運(yùn)營商的當(dāng)務(wù)之急。
[0003]另一方面,列存數(shù)據(jù)庫作為一個(gè)新興的技術(shù),得到越來越多學(xué)者的注意。然而,關(guān)于各種通用數(shù)據(jù)壓縮算法在列存數(shù)據(jù)庫中的具體實(shí)現(xiàn)和應(yīng)用,國內(nèi)尚處于起步階段。在國夕卜,各種開源的列存數(shù)據(jù)庫由于受到資金、人力資源和實(shí)踐檢驗(yàn)的約束,導(dǎo)致其自身的設(shè)計(jì)與實(shí)現(xiàn)均存在著各種各樣的缺陷。更是沒有人將列存數(shù)據(jù)庫應(yīng)用到具有特定數(shù)據(jù)結(jié)構(gòu)的大規(guī)模的數(shù)據(jù)存儲(chǔ)上。
[0004]綜上兩點(diǎn),運(yùn)營商產(chǎn)生大量的話單數(shù)據(jù)得不到高效的存儲(chǔ)和處理,列存數(shù)據(jù)庫系統(tǒng)有著其自身的優(yōu)勢但是沒有在存儲(chǔ)大規(guī)模數(shù)據(jù)上得到具體的應(yīng)用。因此,如何為話單數(shù)據(jù)設(shè)計(jì)出適合其存儲(chǔ)和處理的列存數(shù)據(jù)庫,并且采用特定的壓縮算法來進(jìn)一步減少數(shù)據(jù)存儲(chǔ)所需的空間,而且可以高效快速的讀取和處理數(shù)據(jù),已經(jīng)成為一個(gè)新型的研究方向下的技術(shù)難題。
【發(fā)明內(nèi)容】
[0005]為解決上述技術(shù)問題,本發(fā)明所采用的技術(shù)方案如下:
[0006]一種基于話單數(shù)據(jù)的壓縮和存儲(chǔ)方法,由列存儲(chǔ)系統(tǒng)實(shí)現(xiàn),列存儲(chǔ)系統(tǒng)包括壓縮模塊、存儲(chǔ)模塊和處理模塊,其壓縮和存儲(chǔ)方法如下:
[0007]步驟一、壓縮模塊對話單數(shù)據(jù)需要壓縮的屬性列采取不同的輕量級壓縮算法;
[0008]步驟二、由存儲(chǔ)模塊將經(jīng)過壓縮模塊處理后的話單數(shù)據(jù)存入列存數(shù)據(jù)庫,列存數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)包括壓縮區(qū)和未壓縮區(qū),壓縮區(qū)將采用不同輕量級壓縮算法壓縮后的屬性列分開存儲(chǔ),未壓縮區(qū)則將不需要壓縮的屬性列直接存儲(chǔ);
[0009]步驟三、處理模塊對列存數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行SQL操作,對未壓縮區(qū)的數(shù)據(jù)直接進(jìn)行SQL操作;對壓縮區(qū)的數(shù)據(jù)進(jìn)行SQL操作時(shí),可以解壓后直接進(jìn)行SQL操作,也可以不解壓間接進(jìn)行SQL操作;當(dāng)不進(jìn)行解壓時(shí),其SQL的間接操作方法如下:
[0010](I)通過操作算法選擇器對壓縮區(qū)不同屬性列采用的壓縮算法進(jìn)行分析,
[0011](2)通過轉(zhuǎn)換器將SQL語句轉(zhuǎn)換成相應(yīng)的可以用于該壓縮算法的語句。
[0012]步驟一中所述的輕量級壓縮算法可以為RLE行程編碼、差值壓縮或粗粒度字典壓縮。
[0013]本發(fā)明針對運(yùn)營商實(shí)際存在的問題提出了一種有效的解決方案,并且適用于各大運(yùn)營商處理其大量的話單數(shù)據(jù),大大減少了數(shù)據(jù)存儲(chǔ)所需的空間,在數(shù)據(jù)存儲(chǔ)上引入了列存數(shù)據(jù)庫,由于其自身存儲(chǔ)的特殊性,與各種輕量級壓縮算法可以完美的結(jié)合起來,由于采用輕量級壓縮算法,可以對壓縮態(tài)的數(shù)據(jù)直接進(jìn)行SQL操作,大大提高了數(shù)據(jù)的處理速度。
【專利附圖】
【附圖說明】
[0014]圖1列存儲(chǔ)系統(tǒng)的整體構(gòu)架圖。
[0015]圖2壓縮模塊的壓縮流程圖。
[0016]圖3存儲(chǔ)模塊列存數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)。
[0017]圖4處理模塊的處理流程圖。
【具體實(shí)施方式】
[0018]下面結(jié)合說明書附圖對本發(fā)明作進(jìn)一步的詳細(xì)說明。
[0019]本發(fā)明針對話單數(shù)據(jù)設(shè)計(jì)了一種基于話單數(shù)據(jù)的壓縮和存儲(chǔ)方法,該方法由列存儲(chǔ)系統(tǒng)實(shí)現(xiàn),該系統(tǒng)的整體構(gòu)架如附圖1所示,由三個(gè)模塊構(gòu)成,分別為壓縮模塊、存儲(chǔ)模塊、處理模塊。本方法針對運(yùn)營商產(chǎn)生的大規(guī)模的話單數(shù)據(jù),采用多種輕量級壓縮算法從語法和語義分別對數(shù)據(jù)進(jìn)行壓縮,將數(shù)據(jù)存儲(chǔ)于特定的列存數(shù)據(jù)庫。并支持多種數(shù)據(jù)處理語言對壓縮態(tài)下的數(shù)據(jù)進(jìn)行查詢篩選等操作。
[0020]壓縮模塊分裝了對各種數(shù)據(jù)的壓縮算法,并且與存儲(chǔ)模塊中的數(shù)據(jù)結(jié)構(gòu)緊密聯(lián)系。存儲(chǔ)模塊設(shè)計(jì)了一種特定的列存數(shù)據(jù)庫有效地組織和保存算法生成的壓縮值。處理模塊用于將一般的SQL語句轉(zhuǎn)換成可以適用于各種輕量級壓縮算法的語句,以便在未解壓的情況下就能對壓縮態(tài)數(shù)據(jù)進(jìn)行操作。SQL是Structured Query Language的英文縮寫,中文名為結(jié)構(gòu)化查詢語言,是一種對數(shù)據(jù)庫進(jìn)行操作的語言。該系統(tǒng)設(shè)計(jì)的好處在于:將三個(gè)模塊獨(dú)立分裝,從而保證了各個(gè)模塊之間的低耦合度。比如當(dāng)數(shù)據(jù)壓縮方式發(fā)生變化的時(shí)候,我們只需要修改壓縮運(yùn)算庫對外提供的各種接口就可以保證其他模塊不需要任何改動(dòng)了。
[0021]壓縮模塊主要針對話單數(shù)據(jù)這一特定的數(shù)據(jù)結(jié)構(gòu),對各個(gè)屬性列采取不同的壓縮算法。具體流程如附圖2所示。原始話單數(shù)據(jù)在邏輯上已經(jīng)按列存儲(chǔ),分別為屬性列1、屬性列2…屬性列m。這些屬性列通過壓縮算法選擇器為不同的列制定特定的壓縮效率較高的壓縮算法。這里我們采用的壓縮算法主要有RLE行程編碼(Run Length Encoding)、差值壓縮、粗粒度字典壓縮。原因是這些都是輕量級壓縮算法,可以不需解壓直接進(jìn)行SQL操作。
[0022]由于話單數(shù)據(jù)的特殊性,存在大量的重復(fù)性數(shù)據(jù),如通話類型標(biāo)識(shí)(主要由10101、10106,10108不斷重復(fù)出現(xiàn)),對方運(yùn)營商標(biāo)識(shí)(主要由11、12、13不斷重復(fù)出現(xiàn)),主叫/被叫歸屬區(qū)號(主要由591、592、857、858不斷重復(fù)出現(xiàn))、分局標(biāo)識(shí)(基本都是一樣的)、計(jì)費(fèi)事件類型標(biāo)識(shí)等等,這些我們都可以采用粗粒度字典壓縮。將這些數(shù)據(jù)保存到一個(gè)字典中,并代之以一個(gè)整數(shù)來表示,這樣就節(jié)省了大量的空間。而另一些屬性列如通話開始時(shí)間,由于每一宗通話的開始時(shí)間在時(shí)間上是連續(xù)的,因此可以采用差值壓縮。例如(201407011023,201407011024,201407011025)就可以被壓縮為(201407011023,0,I, 2),對于 0、1、2 來說,可以用更少的位數(shù)來表示,從而達(dá)到節(jié)省空間的目的。還有的屬性列比如原始話單文件號,其內(nèi)容多數(shù)都是13022800000000000000這樣的數(shù)據(jù),我們可以看到有連續(xù)的14個(gè)O。采用RLE編碼可以大大縮短數(shù)據(jù)的長度。
[0023]因此,我們設(shè)計(jì)了以粗粒度字典壓縮為主,RLE行程編碼和差值壓縮為輔的壓縮策略。另外的一些屬性列如主叫和被叫號碼,由于數(shù)據(jù)的規(guī)律性不明顯,我們將其直接存儲(chǔ)而不壓縮。最后,當(dāng)各個(gè)屬性列經(jīng)過壓縮算法執(zhí)行器壓縮后,還需將采用相同壓縮算法的列合并到一起,便于處理模塊對其進(jìn)行操作。
[0024]存儲(chǔ)模塊設(shè)計(jì)了一種對各類壓縮算法生成的數(shù)據(jù)可以進(jìn)行準(zhǔn)確編碼解碼以及操作的列存數(shù)據(jù)庫。如附圖3,本發(fā)明的列存數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)充分體現(xiàn)了列存數(shù)據(jù)庫的特點(diǎn)。該數(shù)據(jù)結(jié)構(gòu)主要分為壓縮區(qū)和未壓縮區(qū)。壓縮區(qū)又根據(jù)不同的壓縮算法分為字典壓縮區(qū)、RLE壓縮區(qū)、差值壓縮區(qū)。這樣的好處在于處理模塊可根據(jù)每一區(qū)域不同的壓縮算法而采取不同的解壓算法以及相應(yīng)的壓縮態(tài)數(shù)據(jù)操作。而未壓縮區(qū)則直接存儲(chǔ)不需要壓縮的數(shù)據(jù)。
[0025]處理模塊可以對壓縮后的數(shù)據(jù)進(jìn)行準(zhǔn)確解碼,并且,由于壓縮采用的是輕量級壓縮算法,該模塊可以直接對壓縮態(tài)下的數(shù)據(jù)進(jìn)行操作。具體流程如附圖4。SQL語句不能直接作用在原始的壓縮態(tài)數(shù)據(jù)上。數(shù)據(jù)首先要通過操作算法選擇器為不同的屬性列選擇不同的算法。由于各個(gè)屬性列都是按照相同的壓縮算法連續(xù)存儲(chǔ)的,因此操作算法選擇器具有方便性和快捷性。然后對應(yīng)于不同的壓縮算法有著不同的轉(zhuǎn)換方式。便可以將最基本的SQL語句轉(zhuǎn)換成相應(yīng)的可以用于該壓縮算法的數(shù)據(jù)庫操作語句。例如上述的粗粒度字典壓縮,壓縮后的數(shù)據(jù)在SQL運(yùn)算中只需將字符串運(yùn)算轉(zhuǎn)換為整數(shù)運(yùn)算就可以了。因此該數(shù)據(jù)處理模塊大大減少了數(shù)據(jù)操作所需花費(fèi)的時(shí)間。
【權(quán)利要求】
1.一種基于話單數(shù)據(jù)的壓縮和存儲(chǔ)方法,由列存儲(chǔ)系統(tǒng)實(shí)現(xiàn),列存儲(chǔ)系統(tǒng)包括壓縮模塊、存儲(chǔ)模塊和處理模塊,其壓縮和存儲(chǔ)方法如下: 步驟一、壓縮模塊對話單數(shù)據(jù)需要壓縮的屬性列采取不同的輕量級壓縮算法; 步驟二、由存儲(chǔ)模塊將經(jīng)過壓縮模塊處理后的話單數(shù)據(jù)存入列存數(shù)據(jù)庫,列存數(shù)據(jù)庫的數(shù)據(jù)結(jié)構(gòu)包括壓縮區(qū)和未壓縮區(qū),壓縮區(qū)將采用不同輕量級壓縮算法壓縮后的屬性列分開存儲(chǔ),未壓縮區(qū)則將不需要壓縮的屬性列直接存儲(chǔ); 步驟三、處理模塊對列存數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行SQL操作,對未壓縮區(qū)的數(shù)據(jù)直接進(jìn)行SQL操作;對壓縮區(qū)的數(shù)據(jù)進(jìn)行SQL操作時(shí),可以解壓后直接進(jìn)行SQL操作,也可以不解壓間接進(jìn)行SQL操作;當(dāng)不進(jìn)行解壓時(shí),其SQL的間接操作方法如下: (1)通過操作算法選擇器對壓縮區(qū)不同屬性列采用的壓縮算法進(jìn)行分析, (2)通過轉(zhuǎn)換器將SQL語句轉(zhuǎn)換成相應(yīng)的可以用于該壓縮算法的語句。
2.根據(jù)權(quán)利要求1所述的一種基于話單數(shù)據(jù)的壓縮和存儲(chǔ)方法,其特征在于步驟一中所述的輕量級壓縮算法可以為RLE行程編碼、差值壓縮或粗粒度字典壓縮。
【文檔編號】G06F17/30GK103631927SQ201310648184
【公開日】2014年3月12日 申請日期:2013年12月3日 優(yōu)先權(quán)日:2013年12月3日
【發(fā)明者】朱洪波, 沈順, 盧捍華, 朱翀, 徐蔓青, 錢超 申請人:南京郵電大學(xué)