[0044] 本發(fā)明提出的合并非重復(fù)單詞的差量編碼,如圖5所示,對于連續(xù)的非重復(fù)單詞, 合并成一個單詞編碼,提高了差量壓縮效率,也能加快差量壓縮的解碼過程。同時,根據(jù)上 述多項技術(shù)的結(jié)合,極大地加速了差量壓縮的編碼和解碼過程,同時保障了數(shù)據(jù)壓縮效率。
[0045] 如圖1所示,本發(fā)明的快速差量壓縮方法,是針對已知的數(shù)據(jù)塊(或文件)A和與其 相似的基準(zhǔn)數(shù)據(jù)塊B進(jìn)行快速差量壓縮編碼,包括以下具體步驟:
[0046] (1)對差量壓縮中的基準(zhǔn)塊B進(jìn)行基于內(nèi)容的快速切分(FastRo 11 ing),以得到多 個單詞,從而構(gòu)成單詞庫;本步驟具體包括如下子步驟:
[0047] (1-1)初始化快速滑動哈希值f = 1,設(shè)置基準(zhǔn)塊B的當(dāng)前滑動位置i = l;
[0048] (1-2)計算基準(zhǔn)塊B在當(dāng)前滑動位置i處的快速滑動哈希值。€=(代〈1)+8^其中& 表示基準(zhǔn)塊B在當(dāng)前滑動位置i處的字節(jié)內(nèi)容,如圖2所示;
[0049] 該哈希算法通過一次左移運(yùn)算和一次加法運(yùn)算既保證了滑動哈希的功能(即本次 哈希值可以從上次哈希值獲得,舊的字節(jié)內(nèi)容將隨著左移運(yùn)算逐步從哈希值中移除,新的 字節(jié)內(nèi)容通過加法計算進(jìn)入新的哈希值),同時又具備計算速度快,哈希值隨機(jī)性強(qiáng)等特 點(diǎn)。
[0050] (1-3)判斷步驟(1-2)計算得到的快速滑動哈希值f是否滿足最低p個位都為0(即 判斷f&(2 p-l)的值是否為0;p的值滿足以下關(guān)系式:切分基準(zhǔn)塊B后得到的單詞的平均長度 近似等于2P個字節(jié),比如,若單詞平均長度近似為64,則p = 6,; 一般4〈 = ?〈 = 13,即單詞平 均長度控制在16個字節(jié)到8192個字節(jié)之間的范圍),是則進(jìn)入步驟(1-4),否則進(jìn)入步驟(1-5);
[0051]這里基于內(nèi)容的快速切分單詞方法保證了在相同內(nèi)容的位置上能產(chǎn)生相同的單 詞切割點(diǎn)??梢酝ㄟ^調(diào)整單詞平均長度(設(shè)置P為不同的數(shù)值)控制差量壓縮效果,一般而 言,單詞平均長度設(shè)置越大,差量壓縮處理的粒度就越大,計算越快,壓縮率越低;單詞平均 長度設(shè)置越小,差量壓縮處理的粒度就越小,計算越慢,壓縮率也就越高。
[0052]如圖3所示,基于內(nèi)容快速切分單詞產(chǎn)生了少量數(shù)目的單詞用于重復(fù)單詞查找,避 免了傳統(tǒng)壓縮編碼產(chǎn)生的大量有重疊內(nèi)容的單詞,簡化了差量壓縮編碼中的單詞匹配的過 程。
[0053] (1-4)標(biāo)記位置i為一個單詞的結(jié)束,并利用指紋算法對該單詞計算指紋(在本實(shí) 施方式中,采用的指紋算法為xxHash),以建立該單詞的指紋索引,設(shè)置f=l,進(jìn)入步驟(1- 5);
[0054] (1-5)設(shè)置i = i+l,并重復(fù)執(zhí)行步驟(1-2)和(1-3),直到處理完數(shù)據(jù)塊B的最后一 個字節(jié)為止。
[0055] (2)對與基準(zhǔn)塊B相似的數(shù)據(jù)塊A進(jìn)行基于內(nèi)容的快速切分,并且對快速切分期間 檢測到的重復(fù)單詞進(jìn)行放大,以得到重復(fù)單詞和非重復(fù)單詞;本步驟具體包括如下子步驟:
[0056] (2-1)初始化快速滑動哈希值g = 1,設(shè)置數(shù)據(jù)塊A的當(dāng)前滑動位置j = 1;
[0057] (2-2)計算數(shù)據(jù)塊A在當(dāng)前位置j處的快速滑動哈希值g,g = g〈〈 1 +Aj,其中Ai表示數(shù) 據(jù)塊A在當(dāng)前滑動位置j處的字節(jié)內(nèi)容;
[0058] (2-3)判斷步驟(2-2)計算得到的快速滑動哈希值g是否滿足最低p個位都為0(即 判斷f&(2 p-l)的值是否為0,這里p取值與步驟(1-3)相同),是則進(jìn)入步驟(2-4);否則轉(zhuǎn)入 步驟(2-6);
[0059] (2-4)標(biāo)記位置j為一個單詞W的結(jié)束,并利用與步驟(1-4)中相同的指紋算法對該 單詞W計算指紋h(在本實(shí)施方式中,采用的指紋算法為xxHash);
[0060] (2-5)根據(jù)指紋h查找基準(zhǔn)塊B的單詞庫,通過指紋索引檢測W是否為重復(fù)單詞,若 是(h在指紋索引中存在,并且基準(zhǔn)塊B中對應(yīng)的單詞V與單詞W字節(jié)內(nèi)容也完全匹配),則進(jìn) 入步驟(2-5);否則標(biāo)記單詞W為非重復(fù)單詞,設(shè)置f = l,進(jìn)入步驟(2-6);
[0061] (2-6)標(biāo)記單詞W為重復(fù)單詞,并繼續(xù)比對單詞W和V后續(xù)的字節(jié)內(nèi)容是否相同,一 旦遇到一個不相同的字節(jié),就停止比對(如圖4所示)。最終得到后續(xù)相同的字節(jié)數(shù)k,設(shè)置單 詞W的長度增加 k;設(shè)置」=」+1^ = 1,并返回步驟(2-2);
[0062] 繼續(xù)比對重復(fù)單詞W和V后續(xù)的字節(jié)內(nèi)容是否相同,即是使用本發(fā)明提出的重復(fù)單 詞放大方法。放大的區(qū)域不需要進(jìn)行費(fèi)時的基于內(nèi)容分塊、指紋計算、指紋索引等操作,節(jié) 省了時間開銷。
[0063] (2-7)設(shè)置j = j+l,并重復(fù)執(zhí)行步驟(2-2)和(2-3),直到處理完數(shù)據(jù)塊A的最后一 個字節(jié)為止。
[0064] (3)對步驟(2)中得到的重復(fù)單詞和非重復(fù)單詞按切分順序依次進(jìn)行編碼和儲存, 分別使用兩種不同的數(shù)據(jù)格式來記錄重復(fù)單詞和非重復(fù)單詞,以得到差量數(shù)據(jù)塊Λβ,α;具 體而言,如圖5所示,分別用' 0 '和' Γ代指兩種數(shù)據(jù)格式,使用' 0 '數(shù)據(jù)格式記錄重復(fù)單詞在 基準(zhǔn)塊Β中的位置和長度信息,使用'1'數(shù)據(jù)格式記錄非重復(fù)單詞的長度信息和字節(jié)內(nèi)容, 從而得到數(shù)據(jù)塊Α對于基準(zhǔn)塊Β的差量數(shù)據(jù)塊(記作Λβ,α)。
[0065] (4)在需要對差量數(shù)據(jù)塊Λβ,α進(jìn)行解碼操作時,依次從Λβ,α中獲取兩種數(shù)據(jù)格式 的記錄,從而依次獲得數(shù)據(jù)塊Α的所有單詞,將這些單詞順序?qū)懭胼敵隽鳎曰謴?fù)出完整的 數(shù)據(jù)塊A;具體而言,如圖5所示,對于' 0 '數(shù)據(jù)格式的記錄,根據(jù)位置和長度信息,從基準(zhǔn)塊B 中獲取重復(fù)單詞;對于'1'數(shù)據(jù)格式的記錄,直接從該記錄中取出非重復(fù)單詞。
[0066] 總而言之,本發(fā)明能夠加速差量壓縮編碼過程,并具有重復(fù)單詞查找效率快,計算 開銷小和數(shù)據(jù)壓縮效率高等優(yōu)點(diǎn)。
[0067]本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以 限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含 在本發(fā)明的保護(hù)范圍之內(nèi)。
【主權(quán)項】
1. 一種快速差量壓縮方法,包括以下步驟: (1) 對差量壓縮中的基準(zhǔn)塊B進(jìn)行基于內(nèi)容的快速切分,以得到多個單詞,從而構(gòu)成單 詞庫; (2) 對與基準(zhǔn)塊B相似的數(shù)據(jù)塊A進(jìn)行基于內(nèi)容的快速切分,并且對快速切分期間檢測 到的重復(fù)單詞進(jìn)行放大,以得到重復(fù)單詞和非重復(fù)單詞; (3) 對步驟(2)中得到的重復(fù)單詞和非重復(fù)單詞按切分順序依次進(jìn)行編碼和儲存,并分 別使用兩種不同的數(shù)據(jù)格式來記錄重復(fù)單詞和非重復(fù)單詞,以得到差量數(shù)據(jù)塊Λβ,α; (4) 在需要對差量數(shù)據(jù)塊Λβ,a進(jìn)行解碼操作時,依次從Λβ,a中獲取兩種數(shù)據(jù)格式的記 錄,從而依次獲得數(shù)據(jù)塊A的所有單詞,將這些單詞順序?qū)懭胼敵隽?,以恢?fù)出完整的數(shù)據(jù) 塊A 〇2. 根據(jù)權(quán)利要求1所述的快速差量壓縮方法,其特征在于,步驟(1)包括如下子步驟: (1-1)初始化快速滑動哈希值f = 1,設(shè)置基準(zhǔn)塊B的當(dāng)前滑動位置i = 1; (1-2)計算基準(zhǔn)塊B在當(dāng)前滑動位置i處的快速滑動哈希值€4=(代〈1)+8^其中&表示 基準(zhǔn)塊B在當(dāng)前滑動位置i處的字節(jié)內(nèi)容; (1-3)判斷步驟(1-2)計算得到的快速滑動哈希值f是否滿足最低p個位都為0,是則進(jìn) 入步驟(1-4),否則進(jìn)入步驟(1-5); (1-4)標(biāo)記位置i為一個單詞的結(jié)束,并利用指紋算法對該單詞計算指紋,以建立該單 詞的指紋索引,設(shè)置f = l,進(jìn)入步驟(1-5); (1-5)設(shè)置i = i + l,并重復(fù)執(zhí)行步驟(1-2)和(1-3),直到處理完數(shù)據(jù)塊B的最后一個字 節(jié)為止。3. 根據(jù)權(quán)利要求1所述的快速差量壓縮方法,其特征在于,步驟(2)包括如下子步驟: (2-1)初始化快速滑動哈希值g= 1,設(shè)置數(shù)據(jù)塊A的當(dāng)前滑動位置j = 1; (2-2)計算數(shù)據(jù)塊A在當(dāng)前位置j處的快速滑動哈希值8^=&〈〈1)+、,其中仏表示數(shù)據(jù) ±夬八在當(dāng)前滑動位置j處的字節(jié)內(nèi)容; (2-3)判斷步驟(2-2)計算得到的快速滑動哈希值g是否滿足最低p個位都為0,是則進(jìn) 入步驟(2-4),否則轉(zhuǎn)入步驟(2-6); (2-4)標(biāo)記位置j為一個單詞W的結(jié)束,并利用與步驟(1-4)中相同的指紋算法對該單詞 W計算指紋h; (2-5)根據(jù)指紋h查找基準(zhǔn)塊B的單詞庫,通過指紋索引檢測W是否為重復(fù)單詞,若是則 進(jìn)入步驟(2-5);否則標(biāo)記單詞W為非重復(fù)單詞,設(shè)置f = l,進(jìn)入步驟(2-6); (2-6)標(biāo)記單詞W為重復(fù)單詞,并繼續(xù)比對單詞W和W在基準(zhǔn)塊B中的重復(fù)單詞V后續(xù)的字 節(jié)內(nèi)容是否相同,一旦遇到一個不相同的字節(jié),就停止比對,最終得到后續(xù)相同的字節(jié)數(shù)k, 設(shè)置單詞W的長度增加 k,設(shè)置」=」+1^4 = 1,并返回步驟(2-2); (2-7)設(shè)置j = j + l,并重復(fù)執(zhí)行步驟(2-2)和(2-3),直到處理完數(shù)據(jù)塊A的最后一個字 節(jié)為止。4. 根據(jù)權(quán)利要求1所述的快速差量壓縮方法,其特征在于,步驟(3)具體為,使用'0'數(shù) 據(jù)格式記錄重復(fù)單詞在基準(zhǔn)塊B中的位置和長度信息,使用' Γ數(shù)據(jù)格式記錄非重復(fù)單詞的 長度信息和字節(jié)內(nèi)容,以得到數(shù)據(jù)塊A對于基準(zhǔn)塊B的差量數(shù)據(jù)塊Λβ,α。5. 根據(jù)權(quán)利要求1所述的快速差量壓縮方法,其特征在于,步驟(4)具體為,對于'0'數(shù) 據(jù)格式的記錄,根據(jù)位置和長度信息,從基準(zhǔn)塊B中獲取重復(fù)單詞;對于'1'數(shù)據(jù)格式的記 錄,直接從該記錄中取出非重復(fù)單詞。
【專利摘要】本發(fā)明公開了一種快速差量壓縮方法,包括:對差量壓縮中的基準(zhǔn)塊B進(jìn)行基于內(nèi)容的快速切分,以得到多個單詞,從而構(gòu)成單詞庫,對與基準(zhǔn)塊B相似的數(shù)據(jù)塊A進(jìn)行基于內(nèi)容的快速切分,并且對快速切分期間檢測到的重復(fù)單詞進(jìn)行放大,以得到重復(fù)單詞和非重復(fù)單詞,對得到的重復(fù)單詞和非重復(fù)單詞按切分順序依次進(jìn)行編碼和儲存,并分別使用兩種不同的數(shù)據(jù)格式來記錄重復(fù)單詞和非重復(fù)單詞,以得到差量數(shù)據(jù)塊△B,A,在需要對差量數(shù)據(jù)塊△B,A進(jìn)行解碼操作時,依次從△B,A中獲取兩種數(shù)據(jù)格式的記錄,從而依次獲得數(shù)據(jù)塊A的所有單詞,將這些單詞順序?qū)懭胼敵隽鳎曰謴?fù)出完整的數(shù)據(jù)塊A。本發(fā)明具有重復(fù)單詞查找效率快,計算開銷小和數(shù)據(jù)壓縮效率高等優(yōu)點(diǎn)。
【IPC分類】H03M7/30
【公開號】CN105515586
【申請?zhí)枴緾N201510927001
【發(fā)明人】夏文, 馮丹, 李春光, 江泓
【申請人】華中科技大學(xué)
【公開日】2016年4月20日
【申請日】2015年12月14日