專(zhuān)利名稱(chēng):一種重復(fù)數(shù)據(jù)的壓縮方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種計(jì)算機(jī)重復(fù)數(shù)據(jù)的壓縮方法,尤其是涉及一種在計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)、歸檔及 備份中提高重復(fù)數(shù)據(jù)壓縮率的方法。
背景技術(shù):
目前,隨著我國(guó)信息化程度的提高,越來(lái)越多的企事業(yè)單位和組織利用建立本單位計(jì)算機(jī) 局域網(wǎng)絡(luò)來(lái)使其工作人員更好地共享信息與協(xié)同工作,然而,利用網(wǎng)絡(luò)辦公環(huán)境,常常會(huì)使 內(nèi)容相同的一份電子數(shù)據(jù)或以相同或以不同的文件名或文件形式(如郵件、工作文檔等)在 多臺(tái)計(jì)算機(jī)中保存,且一個(gè)局域網(wǎng)內(nèi)的所有客戶(hù)端的數(shù)據(jù)通常會(huì)定期地在服務(wù)器中集中歸檔、 存儲(chǔ)或備份。這樣在歸檔、存儲(chǔ)或備份操作時(shí)就可能產(chǎn)生大量完全重復(fù)的數(shù)據(jù)。為了解決計(jì)算機(jī)重復(fù)數(shù)據(jù)的壓縮問(wèn)題,現(xiàn)有技術(shù)通常為以下兩種一種是基于LZ系列的壓縮算法。LZ系列壓縮算法首先使用字典法對(duì)相同短語(yǔ)進(jìn)行壓縮, 壓縮后,再使用哈夫曼編碼將壓縮的內(nèi)容以最短字節(jié)表示?;贚Z系列的壓縮算法為通用無(wú) 損壓縮。對(duì)于大部分未壓縮的數(shù)據(jù),可以獲得2至8倍的壓縮比,但該算法由于采用字典法 對(duì)短語(yǔ)進(jìn)行壓縮,短語(yǔ)取用長(zhǎng)度較短,如LZ系列中的LZ77僅采用23個(gè)位來(lái)表示短語(yǔ)距離和 短語(yǔ)長(zhǎng)度,其能夠判斷的重復(fù)數(shù)據(jù)的長(zhǎng)度是非常有限的,因而,較短的短語(yǔ)對(duì)于網(wǎng)絡(luò)系統(tǒng)中 的相同或相似文件的重復(fù)數(shù)據(jù)壓縮性能并不佳。另一種是將待處理數(shù)據(jù)的內(nèi)容分割為很多長(zhǎng)度固定的數(shù)據(jù)塊,并為每一數(shù)據(jù)塊生成一個(gè)相 應(yīng)的標(biāo)識(shí)符,在保存數(shù)據(jù)塊內(nèi)容的同時(shí)保存每一塊數(shù)據(jù)的標(biāo)識(shí)符。在判斷待處理數(shù)據(jù)是否為 重復(fù)數(shù)據(jù)時(shí),解決方法是通過(guò)在服務(wù)器的標(biāo)識(shí)符數(shù)據(jù)庫(kù)中搜索是否存在相同的標(biāo)識(shí)符如果 存在,則判斷其為重復(fù)的數(shù)據(jù);如果不存在,則判斷其為不重復(fù)的數(shù)據(jù)。然而,這種技術(shù)的不足之處在于,由于不同類(lèi)型文件的儲(chǔ)存結(jié)構(gòu)是完全不同的,例如文本文件的存儲(chǔ)結(jié)構(gòu)是以 原內(nèi)容方式保存,字處理器軟件生成的文件則是以對(duì)象的半結(jié)構(gòu)化方式保存,而數(shù)據(jù)庫(kù)系統(tǒng) 生成的數(shù)據(jù)庫(kù)文件則以塊狀的結(jié)構(gòu)化方式保存,如果一律采用固定的長(zhǎng)度分割待處理數(shù)據(jù), 而不考慮不同類(lèi)型數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)差異,則在判斷分割后的數(shù)據(jù)塊是否為重復(fù)數(shù)據(jù)時(shí),常常 會(huì)出現(xiàn)識(shí)別率不高的問(wèn)題,從而導(dǎo)致重復(fù)數(shù)據(jù)的壓縮率不甚理想。發(fā)明內(nèi)容為了在更短的時(shí)間內(nèi)提高計(jì)算機(jī)重復(fù)數(shù)據(jù)的壓縮率問(wèn)題,本發(fā)明的技術(shù)方案要點(diǎn)通過(guò)以下步驟實(shí)現(xiàn)首先通過(guò)比較相同類(lèi)型的同名文件發(fā)生變化時(shí)的異同情況,以獲得能體現(xiàn)變化規(guī)律的數(shù)據(jù) 塊變化表;隨后通過(guò)分析程序分析同類(lèi)型文件的所有數(shù)據(jù)塊變化表獲得該類(lèi)型文件的最佳分 割方式,并將其保存到類(lèi)型分割信息庫(kù);最后,在進(jìn)行數(shù)據(jù)壓縮時(shí),本發(fā)明將首先判斷待壓縮文件的類(lèi)型,然后根據(jù)該文件類(lèi)型從類(lèi)型分割信息庫(kù)中調(diào)出該類(lèi)型文件的i佳分割方式,并將待壓縮文件按上述最佳分割方式分割為若干數(shù)據(jù)塊,并在存儲(chǔ)器中査找是否存在與分割 后的數(shù)據(jù)塊相同的數(shù)據(jù)塊存在相同數(shù)據(jù)塊,則該數(shù)據(jù)塊為重復(fù)數(shù)據(jù);不存在相同數(shù)據(jù)塊,則該數(shù)據(jù)塊為不重復(fù)的數(shù)據(jù)。對(duì)于重復(fù)數(shù)據(jù),不將其保存到儲(chǔ)存器中,而是采用指針?lè)绞街?向原已保存的相同數(shù)據(jù)塊;對(duì)于不重復(fù)數(shù)據(jù),則將其保存到存儲(chǔ)器中。與現(xiàn)有技術(shù)相比,本發(fā)明通過(guò)比較同類(lèi)型數(shù)據(jù)中的同名文件的變化規(guī)律而獲得體現(xiàn)該變化 規(guī)律的相應(yīng)數(shù)據(jù)塊變化表,并通過(guò)分析數(shù)據(jù)塊變化表求得該類(lèi)型文件的最佳分割方式,利用 該最佳分割方式能極大地提高重復(fù)數(shù)據(jù)的識(shí)別率及壓縮率;此外,由于最佳分割方式是已經(jīng) 存儲(chǔ)在類(lèi)型分割信息庫(kù)中的數(shù)據(jù),所以,在進(jìn)行重復(fù)數(shù)據(jù)壓縮時(shí),只需要調(diào)用該最佳分割方 式分割數(shù)據(jù),并按照分割后的數(shù)據(jù)塊與存儲(chǔ)器中的數(shù)據(jù)塊作比較來(lái)判斷其是否為重復(fù)數(shù)據(jù), 這樣,每一數(shù)據(jù)塊只需要判斷一次就能得到其是否為重復(fù)數(shù)據(jù),并據(jù)此進(jìn)行壓縮操作,因而 該技術(shù)能最大限度地縮短重復(fù)數(shù)據(jù)的壓縮時(shí)間。
圖1為比較某類(lèi)型同名文件差異的流程2為某類(lèi)型文件的一個(gè)數(shù)據(jù)塊變化表的示意3為求得某類(lèi)型文件的最佳分割方式的流程4為求得某類(lèi)型文件已知長(zhǎng)度部分的最佳分割方式的示意5為求得某類(lèi)型文件未知長(zhǎng)度部分的最佳分割方式的示意6為更新某類(lèi)型文件的最佳分割方式的示意7為調(diào)用某類(lèi)型文件的最佳分割方式壓縮該類(lèi)型文件的重復(fù)數(shù)據(jù)的流程圖具體實(shí)施例下面結(jié)合附圖對(duì)本發(fā)明作進(jìn)一步的描述。圖1是一個(gè)比較某類(lèi)型同名文件差異的流程圖,簡(jiǎn)稱(chēng)比較程序流程圖。圖中所示的步驟用 于比較某類(lèi)型的同名文件發(fā)生變化時(shí)的變化規(guī)律,即哪些部分發(fā)生了變化,哪些部分沒(méi)有發(fā) 生變化,且將這樣的變化規(guī)律表現(xiàn)為一個(gè)數(shù)據(jù)塊變化表,同時(shí)在目標(biāo)計(jì)算機(jī)的存儲(chǔ)器上指定 一個(gè)存儲(chǔ)區(qū)域,用于保存被比較的文件及相應(yīng)的數(shù)據(jù)塊變化表。圖1所示的比較程序的具體步驟如下對(duì)于待比較的文件,首先獲得該文件的文件類(lèi)型,文件類(lèi)型可通過(guò)文件擴(kuò)展名或文件中的 文件控制信息來(lái)判斷;然后,在目標(biāo)計(jì)算機(jī)的存儲(chǔ)區(qū)域中査找是否存在與待比較文件同名的文件如果不存在同 名文件,直接復(fù)制文件到目標(biāo)計(jì)算機(jī)上的存儲(chǔ)區(qū)域內(nèi)并返回;如果存在同名文件,則在源計(jì)算機(jī)獲得待比較文件的文件屬性,通過(guò)文件長(zhǎng)度、最后修改 時(shí)間、歸檔位等文件屬性與目標(biāo)計(jì)算機(jī)存儲(chǔ)區(qū)域內(nèi)已保存的同名文件進(jìn)行比較,若比較的結(jié) 果相同,表示該文件沒(méi)有變化,在此情況下直接返回;若比較結(jié)果不相同,表示該文件發(fā)生了變化,在此情況下,則比較待比較文件與其同名文 件的差異,比較差異的算法可以是Rabin指紋算法、Delta差異算法、TTTD算法等。比較差異后的結(jié)果保存為一個(gè)如圖2所示的數(shù)據(jù)塊變化表,同時(shí)將待比較文件復(fù)制到目標(biāo) 計(jì)算機(jī)存儲(chǔ)區(qū)域內(nèi),替換已存在的與其同名的文件。由于比較程序定期運(yùn)行,故當(dāng)其運(yùn)行時(shí),若待比較文件再次發(fā)生變化時(shí),則按照?qǐng)D1所述的方法再次比較其變化規(guī)律并生成相應(yīng)的新的數(shù)據(jù)塊變化表。圖2為按照?qǐng)D1所述的方法比較某類(lèi)型文件的兩個(gè)同名文件之異同后產(chǎn)生的一個(gè)數(shù)據(jù)塊 變化表的示意圖。圖2中,0表示兩個(gè)同名文件的開(kāi)始位置,其后的數(shù)值表示待比較文件與其同名文件產(chǎn) 生差異的起點(diǎn)與終點(diǎn)位置;矩形圖中的內(nèi)容表示就兩個(gè)相臨數(shù)值之間得部分,待比較文件與 其同名文件是否相同,例如,在[0,1024)之間的這部分,待處理文件與其同名文件是相同的; 而[1024, 2048)之間的這部分,二者是不相同的,即有差異的,這種差異可能是由于修改了 文件內(nèi)容或者新增了內(nèi)容。這樣,在比較任意兩個(gè)同名文件時(shí),其異同部分都可以用如圖2 所示的數(shù)據(jù)塊變化表來(lái)描述,且由于每比較一次某類(lèi)型文件的兩個(gè)同名文件都會(huì)產(chǎn)生一個(gè)數(shù) 據(jù)塊變化表。這樣,在目標(biāo)計(jì)算機(jī)的存儲(chǔ)區(qū)域內(nèi)將會(huì)保存若干個(gè)某類(lèi)型文件的數(shù)據(jù)庫(kù)變化表, 這些數(shù)據(jù)塊變化表將在隨后的分析程序中被用來(lái)求得該類(lèi)型文件的最佳分割方式。圖3為通過(guò)分析某類(lèi)型文件的所有數(shù)據(jù)塊變化表求得該類(lèi)型文件的最佳分割方式的流程 圖,簡(jiǎn)稱(chēng)分析程序流程圖。最佳分割方式,是指將某類(lèi)型的文件按某種方式分割為若干數(shù)據(jù) 塊,且利用分割后的數(shù)據(jù)塊可最大程度地識(shí)別同類(lèi)型文件中與其相同的數(shù)據(jù)塊(即重復(fù)數(shù)據(jù)), 從而達(dá)到在更短的時(shí)間內(nèi)提高重復(fù)數(shù)據(jù)壓縮率的效果。分析程序可在比較程序保存某類(lèi)型文件的數(shù)據(jù)塊變化表達(dá)到一定數(shù)量或在某個(gè)設(shè)定的時(shí) 間啟動(dòng)。分析程序的執(zhí)行步驟如圖3所示首先,收集某類(lèi)型文件的所有數(shù)據(jù)塊變化表;然后,求得該類(lèi)型文件所有數(shù)據(jù)塊變化表的一個(gè)最佳分割方式,這個(gè)最佳分割方式我們稱(chēng) 之為某類(lèi)型文件長(zhǎng)度已知部分的最佳分割方式;隨后,通過(guò)上述該類(lèi)型文件長(zhǎng)度已知部分的最佳分割方式來(lái)求得長(zhǎng)度值大于該類(lèi)型文件所 有數(shù)據(jù)塊變化表中文件長(zhǎng)度值的該類(lèi)型文件的最佳分割方式,此為某類(lèi)型文件長(zhǎng)度未知部分 的最佳分割方式。這樣,某類(lèi)型文件的最佳分割方式就包含了以下兩種情況當(dāng)某類(lèi)型文件的文件長(zhǎng)度值在該類(lèi)型文件所有數(shù)據(jù)塊變化表所涉的文件長(zhǎng)度值之內(nèi)時(shí),使 用該類(lèi)型文件長(zhǎng)度已知部分的最佳分割方式對(duì)其進(jìn)行分割;當(dāng)某類(lèi)型文件的長(zhǎng)度大于該類(lèi)型文件所有數(shù)據(jù)塊變化表所涉的文件長(zhǎng)度值,則在其所有數(shù) 據(jù)塊變化表所涉的文件長(zhǎng)度值之內(nèi)的部分使用該類(lèi)型文件長(zhǎng)度已知部分的最佳分割方式分割 它,而其超過(guò)所有數(shù)據(jù)塊變化表所涉的文件長(zhǎng)度值的部分則使用該類(lèi)型文件長(zhǎng)度未知部分的 最佳分割方式對(duì)其進(jìn)行分割。在分析程序中,本發(fā)明采用最小上限法在若干某類(lèi)型文件的數(shù)據(jù)塊變化表中求其最佳分 割方式,也即求某類(lèi)型文件長(zhǎng)度已知部分的最佳分割方式的算法為最小上限法,且在最小上 限法中,本發(fā)明約定了每一數(shù)據(jù)塊的最小長(zhǎng)度為512字節(jié),最大長(zhǎng)度為32768字節(jié)。最小上限法的具體算法流程為第一步,取上限值。從某類(lèi)型文件的所有數(shù)據(jù)塊變化表中的每一數(shù)據(jù)塊變化表的O字節(jié)開(kāi)始,將各自的第一個(gè)數(shù)據(jù)塊作為當(dāng)前塊,并取出各當(dāng)前塊的上限值。在取各當(dāng)前塊的上限 值時(shí),如果各當(dāng)前塊的上限值中有大于32768字節(jié)的,則將大于32768字節(jié)的當(dāng)前塊分割為 等于或小于32768字節(jié)的數(shù)據(jù)塊,并將前述的32768字節(jié)或小于32768字節(jié)的數(shù)值作為該當(dāng) 前塊上限值。
第二步,取最小上限值。當(dāng)各數(shù)據(jù)塊變化表的當(dāng)前塊的上限值均大于512字節(jié),選擇其 中一個(gè)最小值作為最小上限值;當(dāng)各當(dāng)前塊的上限值都小于512字節(jié)時(shí),則將各當(dāng)前塊與其 下一臨近塊合并為一個(gè)新的當(dāng)前塊,當(dāng)各合并后的新當(dāng)前塊的上限值均大于512字節(jié)時(shí),取 其中一個(gè)最小值作為最小上限值。
根據(jù)上述最小上限法的算法流程,設(shè)某類(lèi)型文件的所有數(shù)據(jù)塊變化表為2個(gè)時(shí),則求其 長(zhǎng)度已知部分的最佳分割方式的步驟如圖4所示
首先,分別取出該類(lèi)型文件的數(shù)據(jù)塊變化表l的第一個(gè)塊[O, 1024),數(shù)據(jù)塊變化表2的 第一個(gè)塊[O, 806)作為各自的當(dāng)前塊,則其各自當(dāng)前塊的上限值分別為1024與806,由比 較可知,數(shù)據(jù)塊變化表1與數(shù)據(jù)塊變化表2的當(dāng)前塊的最小上限值為806,則該二表當(dāng)前塊 的最佳分割方式為[0,806),據(jù)此,最佳分割方式的第二個(gè)塊即從806開(kāi)始,且數(shù)據(jù)塊變化表 1和數(shù)據(jù)塊變化表2的第二個(gè)塊的結(jié)束位置都在2048,則第二個(gè)數(shù)據(jù)塊的最佳分割方式為 [806, 2048),那么,第三個(gè)塊就從2048開(kāi)始,此時(shí),數(shù)據(jù)塊變化表1和數(shù)據(jù)塊變化表的下 一結(jié)束位置分別為3000和3550,根據(jù)最小上限法取二者最小值,所以第三個(gè)數(shù)據(jù)塊的最佳 分割方式為[2048, 3000),依次類(lèi)推,可以得到每一個(gè)塊的最佳分割方式。所有塊的最佳分割 方式的組合即為該類(lèi)型文件已知長(zhǎng)度部分的最佳分割方式。
在獲得某類(lèi)型文件長(zhǎng)度己知部分的最佳分割方式后,分析程序?qū)⒏鶕?jù)該部分的最佳分割 方式來(lái)求取其長(zhǎng)度未知部分的最佳分割方式。其處理流程為
將某類(lèi)型文件的所有數(shù)據(jù)塊變化表中最大的一個(gè)文件長(zhǎng)度值除以該類(lèi)型文件長(zhǎng)度已知部 分的最佳分割方式的總塊數(shù),得出該類(lèi)型文件長(zhǎng)度已知部分的數(shù)據(jù)塊平均間距值;
利用該數(shù)據(jù)塊平均間距值求得最接近1024倍數(shù)的數(shù)值作為該類(lèi)型文件長(zhǎng)度未知部分的數(shù) 據(jù)塊固定分割長(zhǎng)度,按此固定長(zhǎng)度分割該類(lèi)型文件長(zhǎng)度未知部分即為該類(lèi)型文件長(zhǎng)度未知部 分的其最佳分割方式。
圖5為如何利用某類(lèi)型文件已知長(zhǎng)度部分的最佳分割方式來(lái)求得其未知長(zhǎng)度部分的最佳 分割方式的示意圖。例如,利用圖4中的兩個(gè)數(shù)據(jù)塊變化表中的一個(gè)最大文件長(zhǎng)度值8400與 其長(zhǎng)度已知部分的最佳分割方'式中的文件總塊數(shù)7相除,可以得出該類(lèi)型文件長(zhǎng)度已知部分 的數(shù)據(jù)塊平均間距值為1200。當(dāng)數(shù)據(jù)塊平均間距值為1200時(shí),其最接近1024倍數(shù)的數(shù)值為 1024,那么,我們就將1024的固定分割長(zhǎng)度作為該類(lèi)型文件長(zhǎng)度未知部分的該類(lèi)型文件的最 佳分割方式。由此,我們稱(chēng)在某類(lèi)型文件的所有數(shù)據(jù)塊變化表中的一個(gè)最大文件長(zhǎng)度值以?xún)?nèi) 的部分為該類(lèi)型文件的長(zhǎng)度已知部分;超過(guò)前述最大值的部分為該類(lèi)型文件長(zhǎng)度未知部分。 在圖4所示的情況下,當(dāng)某類(lèi)型的文件長(zhǎng)度在8400字節(jié)以上時(shí),超過(guò)8400字節(jié)的文件部分 即被視為某類(lèi)型文件的長(zhǎng)度未知部分;8400字節(jié)以?xún)?nèi)的部分為該類(lèi)型文件的長(zhǎng)度已知部分。 該文件類(lèi)型的最佳分割方式為其長(zhǎng)度已知部分按圖4的最佳分割方式分割,長(zhǎng)度未知的部分則按圖5求得的1024的固定分割長(zhǎng)度分割。
在求得某類(lèi)型文件的長(zhǎng)度已知部分和其長(zhǎng)度未知部分的最佳分割方式后,用于求得該最佳 分割方式的所有數(shù)據(jù)塊變化表將被刪除,且該類(lèi)型文件的最佳分割方式將被保存在類(lèi)型分割 數(shù)據(jù)庫(kù)中。
如前所述,分析程序可在比較程序保存某類(lèi)型文件的數(shù)據(jù)塊變化表達(dá)到一定數(shù)量或在某個(gè) 設(shè)定的時(shí)間啟動(dòng),這就意味著,分析程序在經(jīng)過(guò)一定的時(shí)期后將會(huì)被再次啟動(dòng)。當(dāng)分析程序 再次啟動(dòng)時(shí),若發(fā)現(xiàn)存在比較程序在比較新的同名文件后得到的新的數(shù)據(jù)塊變化表時(shí),就會(huì) 執(zhí)行如圖6所示的更新某類(lèi)型文件的最佳分割方式的步驟。
圖6中,我們?cè)O(shè)分析程序僅收集到一個(gè)某類(lèi)型文件的新的數(shù)據(jù)庫(kù)變化表,那么更新的具體
步驟為
將原來(lái)儲(chǔ)存在類(lèi)型信息庫(kù)中的某類(lèi)型文件的最佳分割方式視為一個(gè)數(shù)據(jù)塊變化表; 利用前述分析程序求得其與新產(chǎn)生的數(shù)據(jù)塊變化表的最佳分割方式,此即為更新后的某類(lèi) 型文件的最佳分割方式。
某類(lèi)型文件的最佳分割方式的更新可以按上述操作重復(fù)進(jìn)行。
圖7為調(diào)用類(lèi)型信息庫(kù)中的某類(lèi)型文件的最佳分割方式實(shí)現(xiàn)重復(fù)數(shù)據(jù)壓縮的流程圖,簡(jiǎn)稱(chēng) 壓縮程序流程圖,其詳細(xì)步驟如下
對(duì)于待壓縮文件,壓縮程序首先獲得其文件名,并根據(jù)文件名的擴(kuò)展名或者文件中的文件 控制信息來(lái)判斷文件的類(lèi)型;
得到待壓縮文件的文件類(lèi)型后,從類(lèi)型分割信息庫(kù)中調(diào)用該類(lèi)型文件的最佳分割方式將待 壓縮文件內(nèi)容按該最佳分割方式分割為若干數(shù)據(jù)塊,并依次將這些數(shù)據(jù)塊從硬盤(pán)裝載到內(nèi)存;
將加載到內(nèi)存的數(shù)據(jù)塊逐一按如下方式處理
首先,使用散列算法為每一數(shù)據(jù)塊生成一個(gè)標(biāo)識(shí)符(散列算法可為MD5或SHA1、 SHA2等), 該標(biāo)識(shí)符與數(shù)據(jù)塊的關(guān)系為唯一對(duì)應(yīng)關(guān)系。
其次,數(shù)據(jù)壓縮程序?qū)⒏鶕?jù)數(shù)據(jù)塊的標(biāo)識(shí)符在存儲(chǔ)器的關(guān)系數(shù)據(jù)庫(kù)中或自行實(shí)現(xiàn)的數(shù)據(jù)結(jié) 構(gòu)中査找是否已經(jīng)存在相同的標(biāo)識(shí)符,如果不存在相同的標(biāo)識(shí)符,數(shù)據(jù)壓縮程序?qū)?shù)據(jù)塊保 存在存儲(chǔ)器上,并將數(shù)據(jù)塊的保存位置和與其對(duì)應(yīng)的標(biāo)識(shí)符存儲(chǔ)在關(guān)系數(shù)據(jù)庫(kù)或自行實(shí)現(xiàn)的 數(shù)據(jù)結(jié)構(gòu)中,以便將來(lái)再次査找;
如果存在相同標(biāo)識(shí)符,則表明該數(shù)據(jù)塊已經(jīng)保存在存儲(chǔ)器上,數(shù)據(jù)壓縮程序在目標(biāo)計(jì)算機(jī) 上獲得該標(biāo)識(shí)符對(duì)應(yīng)的數(shù)據(jù)塊在存儲(chǔ)器上的位置信息,并僅保存該位置信息,這樣可以避免 相同內(nèi)容的數(shù)據(jù)塊的再次傳輸及存儲(chǔ),從而節(jié)約壓縮時(shí)間。
權(quán)利要求
1.一種重復(fù)數(shù)據(jù)的壓縮方法,該方法包括一個(gè)比較程序、一個(gè)分析程序和一個(gè)壓縮程序,其特征為以下步驟a)比較程序比較相同類(lèi)型的同名文件發(fā)生變化時(shí)的異同情況,并獲得能體現(xiàn)該變化規(guī)律的數(shù)據(jù)塊變化表;b)分析程序分析同類(lèi)型文件的所有數(shù)據(jù)塊變化表以獲得該類(lèi)型文件的最佳分割方式,并將其保存于類(lèi)型分割信息庫(kù);c)壓縮程序首先判斷待壓縮文件的類(lèi)型,然后根據(jù)該文件類(lèi)型從類(lèi)型分割信息庫(kù)中調(diào)用該類(lèi)型文件的最佳分割方式對(duì)重復(fù)數(shù)據(jù)進(jìn)行壓縮。
2. 根據(jù)權(quán)利要求1所述的方法,其中所述的類(lèi)型信息庫(kù)是指保存所有類(lèi)型文件的最佳分割方 式的一個(gè)數(shù)據(jù)庫(kù)。
3. 根據(jù)權(quán)利要求1所述的方法,其特征為,步驟a)所述的比較程序的步驟為 對(duì)于待比較的文件,首先獲得該文件的文件類(lèi)型;然后,在目標(biāo)計(jì)算機(jī)的存儲(chǔ)區(qū)域中査找是否存在與待比較文件同名的文件如果不存在同 名文件,直接復(fù)制文件到目標(biāo)計(jì)算機(jī)上的存儲(chǔ)區(qū)域內(nèi)并返回;如果存在同名文件,則比較二者的差異,并將差異結(jié)果保存為一個(gè)數(shù)據(jù)塊變化表,同時(shí)將 待比較文件復(fù)制到目標(biāo)計(jì)算機(jī)的存儲(chǔ)區(qū)域內(nèi),替換已存在的與其同名的文件。
4. 根據(jù)權(quán)利要求3所述的方法,若比較程序再次運(yùn)行時(shí),待比較文件再次發(fā)生變化,則再次 比較兩個(gè)同名文件的變化規(guī)律并生成相應(yīng)的新的數(shù)據(jù)塊變化表。
5. 根據(jù)權(quán)利要求1所述的方法,其特征為,步驟b)所述的分析程序的步驟為 首先,收集某類(lèi)型文件的所有數(shù)據(jù)塊變化表;然后,求得該類(lèi)型文件所有數(shù)據(jù)塊變化表的一個(gè)最佳分割方式,這個(gè)最佳分割方式我們稱(chēng) 之為某類(lèi)型文件長(zhǎng)度已知部分的最佳分割方式;隨后,通過(guò)上述該類(lèi)型文件長(zhǎng)度已知部分的最佳分割方式來(lái)求得長(zhǎng)度值大于該類(lèi)型文件所 有數(shù)據(jù)塊變化表中文件長(zhǎng)度值的該類(lèi)型文件的最佳分割方式,這個(gè)最佳分割方式為某類(lèi)型文 件長(zhǎng)度未知部分的最佳分割方式。
6. 根據(jù)權(quán)利要求1或者權(quán)利要求5所述的方法,其中,某類(lèi)型文件的最佳分割方式是指 當(dāng)某類(lèi)型文件的文件長(zhǎng)度值在該類(lèi)型文件所有數(shù)據(jù)塊變化表所涉的文件長(zhǎng)度值之內(nèi),則使用該類(lèi)型文件長(zhǎng)度已知部分的最佳分割方式分割;當(dāng)某類(lèi)型文件的長(zhǎng)度大于該類(lèi)型文件所有數(shù)據(jù)塊變化表所涉的文件長(zhǎng)度值,則在其所有數(shù) 據(jù)塊變化表所涉的文件長(zhǎng)度值之內(nèi)的部分使用該類(lèi)型文件長(zhǎng)度已知部分的最佳分割方式分 割,而超過(guò)所有數(shù)據(jù)塊變化表所涉的文件長(zhǎng)度值的部分則使用該類(lèi)型文件長(zhǎng)度未知部分的最 佳分割方式分割。
7. 根據(jù)權(quán)利要求5所述的方法,其特征為,分析程序可以在比較程序保存某類(lèi)型文件的數(shù)據(jù) 塊變化表達(dá)到一定數(shù)量或者在某個(gè)設(shè)定的時(shí)間啟動(dòng),且分析程序可以重復(fù)啟動(dòng)。
8. 根據(jù)權(quán)利要求7所述的方法,其特征為,當(dāng)分析程序重復(fù)啟動(dòng)時(shí),若發(fā)現(xiàn)存在新的數(shù)據(jù)塊 變化表,則執(zhí)行更新某類(lèi)型文件的最佳分割方式的步驟。
9. 根據(jù)權(quán)利要求8或權(quán)利要求5所述的方法,當(dāng)執(zhí)行更新某類(lèi)型文件的最佳分割方式的步驟時(shí),其技術(shù)要點(diǎn)為將已存在的某類(lèi)文件的最佳分割方式作為一個(gè)數(shù)據(jù)塊變化表,并將其與 新的數(shù)據(jù)塊變化表按分析程序的步驟求得新的最佳分割方式,此即為更新后的某類(lèi)型文件的 最佳分割方式。
10. 根據(jù)權(quán)利要求9所述的方法,其特征為,某類(lèi)型文件的最佳分割方式的更新操作可重復(fù)進(jìn)行。
11. 根據(jù)權(quán)利要求5所述的方法,其特征為,其中求得某類(lèi)型文件長(zhǎng)度己知部分的最佳分割 方式的算法為最小上限法。
12. 根據(jù)權(quán)利要求5所述的方法,其特征為,其中利用某類(lèi)型文件長(zhǎng)度己知部分的最佳分割 方式求其長(zhǎng)度未知部分的最佳分割方式的步驟為-將某類(lèi)型文件的所有數(shù)據(jù)塊變化表中最大的一個(gè)文件長(zhǎng)度值除以該類(lèi)型文件長(zhǎng)度已知部 分的最佳分割方式的總塊數(shù),得出該類(lèi)型文件長(zhǎng)度己知部分的數(shù)據(jù)塊平均間距值;利用該數(shù)據(jù)塊平均間距值求得最接近某一數(shù)值倍數(shù)的值作為該類(lèi)型文件長(zhǎng)度未知部分的 數(shù)據(jù)塊固定分割長(zhǎng)度;按該固定長(zhǎng)度分割該類(lèi)型文件長(zhǎng)度未知部分即為該類(lèi)型文件長(zhǎng)度未知部分的其最佳分割 方式。
13. 根據(jù)權(quán)利要求5所述的方法,其特征為,在求得某類(lèi)型文件的長(zhǎng)度已知部分和其長(zhǎng)度未 知部分的最佳分割方式后,用于求得該最佳分割方式的所有數(shù)據(jù)塊變化表被刪除,且該類(lèi)型 文件的最佳分割方式被保存于類(lèi)型分割信息庫(kù)。
14. 根據(jù)權(quán)利要求1所述的一種重復(fù)數(shù)據(jù)壓縮方法,其特征為,步驟c)所述的壓縮程序的步 驟為對(duì)于待壓縮文件,壓縮程序首先獲得其文件名,并判斷其文件類(lèi)型;在獲得文件類(lèi)型后,從類(lèi)型分割信息庫(kù)中調(diào)用該類(lèi)型文件的最佳分割方式將待壓縮文件按 該最佳分割方式分割為若干數(shù)據(jù)塊,并依次將這些數(shù)據(jù)塊從硬盤(pán)裝載到內(nèi)存; 將加載到內(nèi)存的數(shù)據(jù)塊逐一按如下方式處理首先,使用散列算法為每一數(shù)據(jù)塊生成一個(gè)標(biāo)識(shí)符,該標(biāo)識(shí)符與數(shù)據(jù)塊的關(guān)系為唯一對(duì)應(yīng) 關(guān)系;其次,根據(jù)數(shù)據(jù)塊的標(biāo)識(shí)符在存儲(chǔ)器上査找是否已經(jīng)存在相同標(biāo)識(shí)符,如果不存在相同的 標(biāo)識(shí)符,壓縮程序?qū)?shù)據(jù)塊和及其存儲(chǔ)位置和與其對(duì)應(yīng)的標(biāo)識(shí)符保存在存儲(chǔ)器上;如果存在相同標(biāo)識(shí)符,則在.目標(biāo)計(jì)算機(jī)上獲得該標(biāo)識(shí)符對(duì)應(yīng)的數(shù)據(jù)塊在存儲(chǔ)器上的位置信 息,并僅保存該位置信息。
15. 根據(jù)權(quán)利要求14所述的方法,其特征為,壓縮程序根據(jù)文件名的擴(kuò)展名或者文件中的文 件控制信息來(lái)判斷文件的類(lèi)型。
16. 根據(jù)權(quán)利要求14所述的方法,其特征為,在存儲(chǔ)器中的關(guān)系數(shù)據(jù)庫(kù)或自行實(shí)現(xiàn)的數(shù)據(jù)結(jié) 構(gòu)中査找相同的標(biāo)識(shí)符。
全文摘要
本發(fā)明公開(kāi)了一種計(jì)算機(jī)重復(fù)數(shù)據(jù)的壓縮方法,利用本方法可在較短時(shí)間內(nèi)較大程度地提高重復(fù)數(shù)據(jù)的壓縮比率。本發(fā)明通過(guò)如下步驟實(shí)現(xiàn)首先,比較程序比較相同類(lèi)型的同名文件發(fā)生變化時(shí)的異同情況,并獲得相應(yīng)的數(shù)據(jù)塊變化表;然后,分析程序分析同類(lèi)型文件的所有數(shù)據(jù)塊變化表,求得該類(lèi)型文件的最佳分割方式,并將其保存于類(lèi)型分割信息庫(kù);最后,當(dāng)需要壓縮某類(lèi)型文件的重復(fù)數(shù)據(jù)時(shí),調(diào)用類(lèi)型分割信息庫(kù)中該類(lèi)型文件的最佳分割方式壓縮待處理文件中的重復(fù)數(shù)據(jù),即可實(shí)現(xiàn)最大程度的壓縮率。
文檔編號(hào)G06F17/30GK101320372SQ200810037869
公開(kāi)日2008年12月10日 申請(qǐng)日期2008年5月22日 優(yōu)先權(quán)日2008年5月22日
發(fā)明者賀鴻富 申請(qǐng)人:上海愛(ài)數(shù)軟件有限公司