本發(fā)明屬于計算機(jī)數(shù)據(jù)存儲技術(shù)領(lǐng)域,更具體地,涉及一種溯源數(shù)據(jù)壓縮方法。
背景技術(shù):
溯源數(shù)據(jù)是一種用來描述對象歷史數(shù)據(jù)的元數(shù)據(jù)。利用溯源數(shù)據(jù)可以實現(xiàn)很多新的功能,包括實驗文檔、安全、搜索和程序調(diào)試等。因此,很多學(xué)術(shù)研究機(jī)構(gòu)構(gòu)建了收集溯源的系統(tǒng)。這些系統(tǒng)大部分都注重于如何收集溯源數(shù)據(jù),一些系統(tǒng)還注重于構(gòu)建一些能夠使用溯源數(shù)據(jù)的應(yīng)用程序,但是所有這些系統(tǒng)忽視了一個重要的方面:如何長期并有效的存儲溯源數(shù)據(jù)。
盡管溯源數(shù)據(jù)能被用在安全、搜索等一系列方面,也催生了各種各樣的溯源系統(tǒng),但要使溯源數(shù)據(jù)能被廣泛地使用,一個很重要的方面就是要對溯源數(shù)據(jù)進(jìn)行高效的存儲。這是因為,未優(yōu)化的溯源數(shù)據(jù)會占用大量的空間,從而對溯源數(shù)據(jù)的使用形成很大的障礙。
現(xiàn)有的數(shù)據(jù)壓縮算法雖然在壓縮性能方面做的很好,但是沒有結(jié)合溯源數(shù)據(jù)的特性,在經(jīng)過這些算法壓縮之后,溯源數(shù)據(jù)的一些特性完全丟失,導(dǎo)致溯源數(shù)據(jù)無法使用。現(xiàn)在也出現(xiàn)了一些可以應(yīng)用于溯源數(shù)據(jù)壓縮的方法,如查普曼(Chapman)等人提出的專門用于壓縮溯源的分解和繼承壓縮技術(shù),但是該算法沒有充分考慮溯源數(shù)據(jù)的特性,壓縮性能不是很理想。所以提出一種高效壓縮溯源的方法是非常有必要的。
技術(shù)實現(xiàn)要素:
針對現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種壓縮溯源數(shù)據(jù)的方法及系統(tǒng),其目的在于結(jié)合溯源數(shù)據(jù)相似數(shù)據(jù)多和連續(xù)數(shù)據(jù)多的特性,現(xiàn)將溯源信息分為祖先數(shù)據(jù)和身份數(shù)據(jù),在將祖先數(shù)據(jù)列表化,之后采用參考壓縮編碼、行程長度編碼和差量編碼對祖先數(shù)據(jù)壓縮,對于身份數(shù)據(jù)用字典編碼來進(jìn)行壓縮,通過這種壓縮方法可以極大程度的壓縮溯源數(shù)據(jù)的大小,并且可以保證在壓縮之后溯源數(shù)據(jù)仍然可以正常地被使用。
為了實現(xiàn)本發(fā)明的技術(shù)目的,本發(fā)明提供了一種溯源數(shù)據(jù)壓縮方法,其特征在于,所述方法包括以下步驟:
(1)數(shù)據(jù)分類步驟:將溯源數(shù)據(jù)分為身份數(shù)據(jù)和祖先數(shù)據(jù):身份數(shù)據(jù)描述了數(shù)據(jù)本身的屬性特征;祖先數(shù)據(jù)表示數(shù)據(jù)對象之間的依賴關(guān)系;
(2)祖先數(shù)據(jù)壓縮步驟:根據(jù)祖先數(shù)據(jù)的依賴關(guān)系查詢溯源數(shù)據(jù)中的相似數(shù)據(jù)、連續(xù)數(shù)據(jù),再依次對相似數(shù)據(jù)、連續(xù)數(shù)據(jù)和剩余的數(shù)據(jù)逐步壓縮;
(3)身份數(shù)據(jù)壓縮步驟:使用字典編碼對溯源數(shù)據(jù)中的身份數(shù)據(jù)進(jìn)行壓縮,通過掃描數(shù)據(jù)庫或者是文本文件來查找頻繁出現(xiàn)的字符串,然后用整數(shù)代號取代他們,并將整數(shù)代號和字符串之間的映射關(guān)系存儲在數(shù)據(jù)庫中。
進(jìn)一步的,所述祖先數(shù)據(jù)壓縮步驟包含以下子步驟:
(11)列表化祖先數(shù)據(jù):
祖先數(shù)據(jù)由一系列有一個或多個祖先的溯源節(jié)點來表示,每個節(jié)點按照溯源產(chǎn)生時的順序分配節(jié)點號,將節(jié)點數(shù)據(jù)之間的依賴關(guān)系用節(jié)點列表的形式來表示,定義Out(x)來表示節(jié)點x的祖先列表,列表中是數(shù)據(jù)節(jié)點x的祖先數(shù)據(jù)節(jié)點集合;
(12)參考壓縮編碼:
檢查數(shù)據(jù)節(jié)點x前面W個節(jié)點的祖先列表,W表示窗口參數(shù),找和Out(x)有最多共同祖先節(jié)點的祖先列表,定義Out(y)為這個祖先列表,y就為參考節(jié)點,將Out(x)編碼成三部分:參考號、比特位序列和余下祖先節(jié)點,參考號為x節(jié)點號和y節(jié)點號的差值;針對Out(y)列表生成一個比特位序列,Out(y)列表和Out(x)中共同祖先節(jié)所對應(yīng)的比特位為1,否則為0;余下祖先節(jié)點為原祖先節(jié)點減去共同祖先節(jié)點;
(13)行程長度編碼:
從Out(x)中余下祖先節(jié)點找出連續(xù)的節(jié)點號,將其編碼為起始節(jié)點號和連續(xù)數(shù)字長度兩部分,余下祖先節(jié)點為上步驟余下祖先節(jié)點減去連續(xù)節(jié)點;
(14)差量編碼:
定義上步驟中余下祖先節(jié)點為x1,x2,x3,...,xk,且節(jié)點號x1≤x2≤…≤x3,編碼它們之間的差值x1-x,x2-x1,x3-x2,...,xk-xk-1為差值列表。
為了實現(xiàn)本發(fā)明的技術(shù)目的,本發(fā)明還提供了一種溯源數(shù)據(jù)壓縮系統(tǒng),其特征在于,所述系統(tǒng)包括以下模塊:
數(shù)據(jù)分類模塊,用于將溯源數(shù)據(jù)分為身份數(shù)據(jù)和祖先數(shù)據(jù):身份數(shù)據(jù)描述了數(shù)據(jù)本身的屬性特征;祖先數(shù)據(jù)表示數(shù)據(jù)對象之間的依賴關(guān)系;
祖先數(shù)據(jù)壓縮模塊,用于根據(jù)祖先數(shù)據(jù)的依賴關(guān)系查詢溯源數(shù)據(jù)中的相似數(shù)據(jù)、連續(xù)數(shù)據(jù),再依次對相似數(shù)據(jù)、連續(xù)數(shù)據(jù)和剩余的數(shù)據(jù)逐步壓縮;
身份數(shù)據(jù)壓縮模塊,用于使用字典編碼對溯源數(shù)據(jù)中的身份數(shù)據(jù)進(jìn)行壓縮,通過掃描數(shù)據(jù)庫或者是文本文件來查找頻繁出現(xiàn)的字符串,然后用整數(shù)代號取代他們,并將整數(shù)代號和字符串之間的映射關(guān)系存儲在數(shù)據(jù)庫中。
進(jìn)一步的,所述祖先數(shù)據(jù)壓縮模塊包含以下子單元:
列表化祖先數(shù)據(jù)子單元,用于將祖先數(shù)據(jù)列表化,祖先數(shù)據(jù)由一系列有一個或多個祖先的溯源節(jié)點來表示,每個節(jié)點按照溯源產(chǎn)生時的順序分配節(jié)點號,將節(jié)點數(shù)據(jù)之間的依賴關(guān)系用節(jié)點列表的形式來表示,定義Out(x)來表示節(jié)點x的祖先列表,列表中是數(shù)據(jù)節(jié)點x的祖先數(shù)據(jù)節(jié)點集合;
參考壓縮編碼子單元,用于檢查數(shù)據(jù)節(jié)點x前面W個節(jié)點的祖先列表,W表示窗口參數(shù),找和Out(x)有最多共同祖先節(jié)點的祖先列表,定義Out(y)為這個祖先列表,y就為參考節(jié)點,將Out(x)編碼成三部分:參考號、比特位序列和余下祖先節(jié)點,參考號為x節(jié)點號和y節(jié)點號的差值;針對Out(y)列表生成一個比特位序列,Out(y)列表和Out(x)中共同祖先節(jié)所對應(yīng)的比特位為1,否則為0;余下祖先節(jié)點為原祖先節(jié)點減去共同祖先節(jié)點;
行程長度編碼子單元,用于從Out(x)中余下祖先節(jié)點找出連續(xù)的節(jié)點號,將其編碼為起始節(jié)點號和連續(xù)數(shù)字長度兩部分,余下祖先節(jié)點為上步驟余下祖先節(jié)點減去連續(xù)節(jié)點;
差量編碼子單元,用于定義上步驟中余下祖先節(jié)點為x1,x2,x3,...,xk,且節(jié)點號x1≤x2≤…≤x3,編碼它們之間的差值x1-x,x2,x1,x3-x2,…,xk-xk-1為差值列表。
總體而言,通過本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,具有以下特征及有益效果:
(1)本發(fā)明解決了以往那些經(jīng)典的壓縮算法在壓縮溯源數(shù)據(jù)的過程中沒有保留溯源數(shù)據(jù)的特征,而是按照一般普通文件來壓縮,因此壓縮之后溯源數(shù)據(jù)的特征丟失,導(dǎo)致了溯源數(shù)據(jù)的無法使用問題。
(2)本發(fā)明相比一些現(xiàn)有的基于溯源數(shù)據(jù)特性的壓縮算法,更好地利用了溯源數(shù)據(jù)的特性,充分考慮了溯源數(shù)據(jù)中祖先數(shù)據(jù)的壓縮,使得壓縮效果有了進(jìn)一步的提升。
附圖說明
圖1是本發(fā)明一種壓縮溯源數(shù)據(jù)的方法流程圖;
圖2是祖先數(shù)據(jù)列表化示意圖;
圖3是祖先數(shù)據(jù)壓縮實施例圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點更加清楚明白,以下結(jié)合附圖及實施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
圖1是本發(fā)明一種壓縮溯源數(shù)據(jù)的方法流程圖,包括以下步驟:
(1)數(shù)據(jù)分類步驟:
將溯源數(shù)據(jù)劃分為兩部分,祖先數(shù)據(jù)和身份數(shù)據(jù):其中祖先數(shù)據(jù)表示數(shù)據(jù)對象之間的依賴關(guān)系;身份數(shù)據(jù)描述了數(shù)據(jù)本身的屬性特征,比如文件名、文件ID、進(jìn)程名、進(jìn)程ID等等;
(2)祖先數(shù)據(jù)壓縮步驟:
祖先數(shù)據(jù)壓縮步驟又分為以下子步驟:
(11)列表化祖先數(shù)據(jù):
祖先數(shù)據(jù)由一系列有一個或多個祖先的溯源節(jié)點來表示,每個節(jié)點按照溯源產(chǎn)生時的順序分配節(jié)點號,將節(jié)點數(shù)據(jù)之間的依賴關(guān)系用節(jié)點列表的形式來表示,定義Out(x)來表示節(jié)點x的祖先列表,列表中是數(shù)據(jù)節(jié)點x的祖先數(shù)據(jù)節(jié)點集合;
如圖2所示為用祖先列表表示節(jié)點數(shù)據(jù)的依賴關(guān)系的實施例。
圖中可以看到有兩個溯源節(jié)點,它們都有多個祖先節(jié)點,由于每個節(jié)點按照溯源產(chǎn)生時的順序分配了節(jié)點號,所以可以將數(shù)據(jù)節(jié)點之間的依賴關(guān)系用圖中祖先節(jié)點列表的形式來表示;
(12)參考壓縮編碼:
檢查數(shù)據(jù)節(jié)點x前面W個節(jié)點的祖先列表,W表示窗口參數(shù),找和Out(x)有最多共同祖先節(jié)點的祖先列表,定義Out(y)為這個祖先列表,y就為參考節(jié)點,將Out(x)編碼成三部分:參考號、比特位序列和余下祖先節(jié)點,參考號為x節(jié)點號和y節(jié)點號的差值;針對Out(y)列表生成一個比特位序列,Out(y)列表和Out(x)中共同祖先節(jié)所對應(yīng)的比特位為1,否則為0;余下祖先節(jié)點為原祖先節(jié)點減去共同祖先節(jié)點;
圖3第一步所示為參考壓縮編碼的實施例:
圖中Out(15)是和Out(16)有最多共同祖先的最相似的祖先列表,Out(15)是Out(16)的參考列表。參考號為節(jié)點號16和15的差值為到1。Out(15)和Out(16)的共同祖先節(jié)點為11和14,對應(yīng)參考列表Out(15)生成一個比特位序列,參考列表Out(15)中祖先節(jié)點為共同祖先節(jié)點的比特位為1,否則為0,將Out(16)編碼成如圖中的三部分:參考號1、比特位序列01010和余下祖先節(jié)點為19、20、21、31、33;
參考列表Out(15)的參考號為0,比特位序列為空,所以可以將參考列表Out(15)編碼成如圖中三部分:參考號、比特位序列為空和余下祖先節(jié)點為3、11、13、14、17;
(13)行程長度編碼:
從Out(x)中余下祖先節(jié)點找出連續(xù)的節(jié)點號,將其編碼為起始節(jié)點號和連續(xù)數(shù)字長度兩部分,余下祖先節(jié)點為上步驟余下祖先節(jié)點減去連續(xù)節(jié)點;
圖3第二步所示為行程長度編碼的實施例:
圖中從列表Out(15)中余下祖先節(jié)點中找到連續(xù)的節(jié)點號13、14,使用起始節(jié)點號13和連續(xù)數(shù)字長度2來表示這個連續(xù)節(jié)點列表,余下祖先節(jié)點為3、11、17;
從列表Out(16)中余下祖先節(jié)點中找出連續(xù)的節(jié)點號19、20、21,使用起始節(jié)點號19和連續(xù)數(shù)字長度3來代表這個連續(xù)節(jié)點列表,余下祖先節(jié)點為31、33;
(14)差量編碼:
定義上步驟中余下祖先節(jié)點為x1,x2,x3,…,xk,且節(jié)點號x1≤x2≤…≤x3,編碼它們之間的差值x1-x,x2-x1,x3,x2,…,xk-xk-1為差值列表;
圖3第三步所示為差量編碼的實施例:
圖中找出列表Out(15)中余下祖先節(jié)點,經(jīng)過上述步驟后祖先節(jié)點只剩下3、11、17,那么編碼它們之間的差值3-15,11-3,17-11,得到-12、8、6;
圖中找出列表Out(16)中余下祖先節(jié)點,經(jīng)過上述步驟后祖先節(jié)點只剩下31、33,那么編碼它們之間的差值31-16,33-31,得到15、2;
(3)身份數(shù)據(jù)壓縮步驟:
使用字典編碼對溯源數(shù)據(jù)中的身份數(shù)據(jù)進(jìn)行壓縮,通過掃描數(shù)據(jù)庫或者是文本文件來查找頻繁出現(xiàn)的字符串,然后用整數(shù)代號取代他們,并將整數(shù)代號和字符串之間的映射關(guān)系存儲在數(shù)據(jù)庫中。
以上所述僅為本發(fā)明的較佳實施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。