国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      數(shù)據(jù)去重的收斂分塊方法及裝置與流程

      文檔序號(hào):11063317閱讀:365來(lái)源:國(guó)知局
      數(shù)據(jù)去重的收斂分塊方法及裝置與制造工藝

      本發(fā)明涉及計(jì)算機(jī)領(lǐng)域,尤其涉及存儲(chǔ)系統(tǒng)數(shù)據(jù)去重的收斂分塊方法及裝置。



      背景技術(shù):

      目前數(shù)據(jù)流去重領(lǐng)域采取分塊獲取哈希值進(jìn)行比對(duì)判斷數(shù)據(jù)流是否重復(fù),在分塊后平均塊長(zhǎng)越大,數(shù)據(jù)流去重的粒度也就越大,去重率下降;平均塊長(zhǎng)越小,去重效率低。而目前廣泛采用的基于內(nèi)容分塊方法采用的是逐個(gè)字節(jié)滑動(dòng)窗口,然后計(jì)算和判斷窗口內(nèi)容哈希值的方法,由于基于內(nèi)容分塊算法中哈希值的隨機(jī)性特征,導(dǎo)致分塊后產(chǎn)生的塊長(zhǎng)數(shù)量與塊長(zhǎng)成指數(shù)分布:既有非常多的超小的數(shù)據(jù)塊和超大的數(shù)據(jù)塊;其中分塊出非常多的小的數(shù)據(jù)塊,會(huì)導(dǎo)致分塊的數(shù)據(jù)塊的總數(shù)很大,從而導(dǎo)致計(jì)算和判斷窗口內(nèi)容哈希值的次數(shù)增加,降低了分塊效率。



      技術(shù)實(shí)現(xiàn)要素:

      本發(fā)明的主要目的在于提供一種數(shù)據(jù)去重的收斂分塊方法,旨在控制超小的數(shù)據(jù)塊和超大的數(shù)據(jù)塊的數(shù)量的同時(shí)控制數(shù)據(jù)塊的總數(shù),提高分塊效率。

      為實(shí)現(xiàn)上述目的,本發(fā)明提供的一種數(shù)據(jù)去重的收斂分塊方法包括以下步驟:

      記錄數(shù)據(jù)流的起始位置為一個(gè)分塊位置,并使滑動(dòng)窗口從所述起始位置開始逐步向前移動(dòng);

      當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,判斷所述滑動(dòng)窗口所在的當(dāng)前位置是否是所述數(shù)據(jù)流的結(jié)束位置;

      若否,則根據(jù)當(dāng)前分塊的長(zhǎng)度,動(dòng)態(tài)選擇判斷條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步,所述當(dāng)前分塊為所述滑動(dòng)窗口當(dāng)前位置對(duì)應(yīng)所述數(shù)據(jù)流的位置到所述數(shù)據(jù)流的上一個(gè)分塊位置之間的數(shù)據(jù)塊;

      當(dāng)所述滑動(dòng)窗口所在的當(dāng)前位置是所述數(shù)據(jù)流的結(jié)束位置時(shí),則記錄所述結(jié)束位置為一個(gè)分塊位置,并結(jié)束分塊操作。

      優(yōu)選地,所述當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,所述滑動(dòng)窗口所在的當(dāng)前位置不是所述數(shù)據(jù)流的結(jié)束位置時(shí),根據(jù)當(dāng)前分塊的長(zhǎng)度,動(dòng)態(tài)選擇判斷條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步包括:

      判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度;

      若是,則使用緊縮分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      若否,則使用放寬分塊條件來(lái)判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步。

      優(yōu)選地,所述當(dāng)前分塊的長(zhǎng)度小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),使用緊縮分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步包括:

      獲取用于哈希匹配運(yùn)算的預(yù)設(shè)位數(shù),并設(shè)置根據(jù)所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)計(jì)算出的哈希值中比所述預(yù)設(shè)位數(shù)多的位數(shù)為對(duì)比值;

      判斷所述對(duì)比值與預(yù)設(shè)哈希值是否匹配;

      若是,則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      若否,則使所述滑動(dòng)窗口向前移動(dòng)一步。

      優(yōu)選地,當(dāng)所述當(dāng)前分塊的長(zhǎng)度不小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),所述使用放寬分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步包括:

      獲取用于哈希匹配運(yùn)算的預(yù)設(shè)位數(shù),設(shè)置根據(jù)所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)計(jì)算出的哈希值中比所述預(yù)設(shè)位數(shù)少的位數(shù)為對(duì)比值;

      判斷所述對(duì)比值與預(yù)設(shè)哈希值是否匹配;

      若是,則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      若否,則使所述滑動(dòng)窗口向前移動(dòng)一步。

      優(yōu)選地,在所述判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度之前還包括:

      跳躍移動(dòng)所述滑動(dòng)窗口一個(gè)預(yù)設(shè)跳躍長(zhǎng)度;

      當(dāng)跳躍移動(dòng)所述滑動(dòng)窗口一個(gè)預(yù)設(shè)跳躍長(zhǎng)度后,判斷所述滑窗口的位置是否是所述數(shù)據(jù)流的結(jié)束位置;

      若是,則記錄所述結(jié)束位置為一個(gè)分塊位置,并結(jié)束分塊操作;

      若否,則使所述滑動(dòng)窗口向前移動(dòng)一步。

      此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種一種數(shù)據(jù)去重的收斂分塊裝置包括:

      啟動(dòng)模塊,用于記錄數(shù)據(jù)流的起始位置為一個(gè)分塊位置,并使滑動(dòng)窗口從所述起始位置開始逐步向前移動(dòng);

      判斷模塊,用于當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,判斷所述滑動(dòng)窗口所在的當(dāng)前位置是否是數(shù)據(jù)流的結(jié)束位置;

      第一分塊模塊,用于當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,所述滑動(dòng)窗口所在的當(dāng)前位置不是所述數(shù)據(jù)流的結(jié)束位置時(shí),根據(jù)當(dāng)前分塊的長(zhǎng)度,動(dòng)態(tài)選擇判斷條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步,所述當(dāng)前分塊為所述滑動(dòng)窗口當(dāng)前位置對(duì)應(yīng)所述數(shù)據(jù)流的位置到所述數(shù)據(jù)流的上一個(gè)分塊位置之間的數(shù)據(jù)塊;

      結(jié)束模塊,用于當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,所述滑動(dòng)窗口所在的當(dāng)前位置是所述數(shù)據(jù)流的結(jié)束位置時(shí),記錄所述結(jié)束位置為一個(gè)分塊位置,并結(jié)束分塊操作。

      優(yōu)選地,所述第一分塊模塊包括:

      第一判斷單元,用于判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度;

      第二分塊模塊,用于當(dāng)所述當(dāng)前分塊的長(zhǎng)度小于所述標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),使用緊縮分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      第三分塊模塊,用于當(dāng)所述當(dāng)前分塊的長(zhǎng)度不小于所述標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),使用放寬分塊條件來(lái)判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步。

      優(yōu)選地,所述第二分塊模塊包括:

      第一獲取單元,用于獲取用于哈希匹配運(yùn)算的預(yù)設(shè)位數(shù),并設(shè)置根據(jù)所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)計(jì)算出的哈希值中比所述預(yù)設(shè)位數(shù)多的位數(shù)為對(duì)比值;

      第二判斷單元,用于判斷所述對(duì)比值與預(yù)設(shè)哈希值是否匹配;

      第一分塊單元,用于當(dāng)所述對(duì)比值與預(yù)設(shè)哈希值匹配時(shí),記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      第一移動(dòng)單元,用于當(dāng)所述對(duì)比值與預(yù)設(shè)哈希值不匹配時(shí),使所述滑動(dòng)窗口向前移動(dòng)一步。

      優(yōu)選地,所述第三分塊模塊包括:

      第二獲取單元,獲取用于哈希匹配運(yùn)算的預(yù)設(shè)位數(shù),設(shè)置根據(jù)所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)計(jì)算出的哈希值中比所述預(yù)設(shè)位數(shù)少的位數(shù)為對(duì)比值;

      第三判斷單元,用于判斷所述對(duì)比值與預(yù)設(shè)哈希值是否匹配;

      第二分塊單元,用于當(dāng)所述對(duì)比值與預(yù)設(shè)哈希值匹配時(shí),記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      第二移動(dòng)單元,用于當(dāng)所述對(duì)比值與預(yù)設(shè)哈希值不匹配時(shí),使所述滑動(dòng)窗口向前移動(dòng)一步。

      優(yōu)選地,所述第一分塊模塊還包括:

      跳躍單元,用于跳躍移動(dòng)所述滑動(dòng)窗口一個(gè)預(yù)設(shè)跳躍長(zhǎng)度;

      第四判斷單元,用于當(dāng)跳躍移動(dòng)所述滑動(dòng)窗口后,判斷所述滑窗口的位置是否是所述數(shù)據(jù)流的結(jié)束位置;

      結(jié)束單元,用于當(dāng)所述滑窗口的位置是所述數(shù)據(jù)流的結(jié)束位置時(shí),記錄所述結(jié)束位置為一個(gè)分塊位置,并結(jié)束分塊操作;

      第四移動(dòng)單元,用于當(dāng)所述滑窗口的位置是所述數(shù)據(jù)流的結(jié)束位置時(shí),使所述滑動(dòng)窗口向前移動(dòng)一步。

      本發(fā)明公開了一種數(shù)據(jù)去重的收斂分塊方法及裝置,所述數(shù)據(jù)去重的收斂分塊方法包括以下步驟:記錄數(shù)據(jù)流的起始位置為一個(gè)分塊位置,并使滑動(dòng)窗口從所述起始位置開始逐步向前移動(dòng);當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,判斷所述滑動(dòng)窗口所在的當(dāng)前位置是否是所述數(shù)據(jù)流的結(jié)束位置;若否,則根據(jù)當(dāng)前分塊的長(zhǎng)度,動(dòng)態(tài)選擇判斷條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步,所述當(dāng)前分塊為所述滑動(dòng)窗口當(dāng)前位置對(duì)應(yīng)所述數(shù)據(jù)流的位置到所述數(shù)據(jù)流的上一個(gè)分塊位置之間的數(shù)據(jù)塊。在分塊時(shí)通過(guò)引入所述當(dāng)前分塊的長(zhǎng)度作為分塊參數(shù),動(dòng)態(tài)地選擇放寬或者緊縮分塊判斷條件,使得可以根據(jù)不同的當(dāng)前分塊的長(zhǎng)度選擇判斷分塊條件減少了超小和超大數(shù)據(jù)塊的數(shù)量,控制了數(shù)據(jù)塊的平均塊長(zhǎng),也減少了分塊的總數(shù),提高了去重分塊效率。

      附圖說(shuō)明

      圖1為本發(fā)明數(shù)據(jù)去重的收斂分塊方法第一實(shí)施例的流程示意圖;

      圖2為本發(fā)明數(shù)據(jù)去重的收斂分塊方法第二實(shí)施例的流程示意圖;

      圖3為本發(fā)明數(shù)據(jù)去重的收斂分塊方法第三實(shí)施例中所述當(dāng)前分塊的長(zhǎng)度小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),使用緊縮分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步的細(xì)化流程示意圖;

      圖4為本發(fā)明數(shù)據(jù)去重的收斂分塊方法第四實(shí)施例中當(dāng)所述當(dāng)前分塊的長(zhǎng)度不小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),所述使用放寬分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步的細(xì)化流程示意圖;

      圖5為本發(fā)明數(shù)據(jù)去重的收斂分塊方法第四實(shí)施例中在所述判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度之前進(jìn)行跳躍移動(dòng)的細(xì)化流程示意圖;

      圖6為本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第一實(shí)施例的功能模塊示意圖;

      圖7為本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第二實(shí)施例中第一分塊模塊的細(xì)化功能模塊示意圖;

      圖8為本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第三實(shí)施例中第二分塊模塊的細(xì)化功能模塊示意圖;

      圖9為本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第四實(shí)施例中第三分塊模塊的細(xì)化功能模塊示意圖;

      圖10為本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第五實(shí)施例中第一分塊模塊的細(xì)化功能模塊示意圖;

      圖11為采用本發(fā)明數(shù)據(jù)去重的收斂分塊方法第一實(shí)施例得到的分塊結(jié)果中分塊長(zhǎng)度分布示意圖;

      圖12為采用現(xiàn)有技術(shù)基于內(nèi)容分塊方法得到的分塊結(jié)果中分塊長(zhǎng)度分布示意圖。

      本發(fā)明目的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說(shuō)明。

      具體實(shí)施方式

      應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。

      本發(fā)明提供一種數(shù)據(jù)去重的收斂分塊方法,參照?qǐng)D1,在第一實(shí)施例中,該數(shù)據(jù)去重的收斂分塊方法包括:

      步驟S10,記錄數(shù)據(jù)流的起始位置為一個(gè)分塊位置,并使滑動(dòng)窗口從所述起始位置開始逐步向前移動(dòng);

      針對(duì)給定的一個(gè)需要被分塊的文件或數(shù)據(jù)流開始分塊操作,設(shè)置當(dāng)前位置為Cur,取所述滑動(dòng)窗口的長(zhǎng)度為48字節(jié),從Cur位置開始逐步移動(dòng)所述滑動(dòng)窗口至所述數(shù)據(jù)流的結(jié)束位置,在本實(shí)施例中所述逐步移動(dòng)中的每步為1個(gè)字節(jié)。

      步驟S20,當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,判斷所述滑動(dòng)窗口所在的當(dāng)前位置是否是所述數(shù)據(jù)流的結(jié)束位置;

      如果所述文件或數(shù)據(jù)流的最后一位在所述滑動(dòng)窗口內(nèi)時(shí),即可判斷所述滑動(dòng)窗口是在數(shù)據(jù)流的結(jié)束位置。

      若否,則執(zhí)行步驟S30,根據(jù)當(dāng)前分塊的長(zhǎng)度,動(dòng)態(tài)選擇判斷條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步,所述當(dāng)前分塊為所述滑動(dòng)窗口當(dāng)前位置對(duì)應(yīng)所述數(shù)據(jù)流的位置到所述數(shù)據(jù)流的上一個(gè)分塊位置之間的數(shù)據(jù)塊;

      在分塊時(shí),會(huì)根據(jù)預(yù)定義數(shù)據(jù)流產(chǎn)生的哈希值,如果所述哈希值和當(dāng)前所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)的哈希值匹配,則在當(dāng)前位置進(jìn)行分塊處理。但是由于哈希值是隨機(jī)的,可能會(huì)在當(dāng)前分塊長(zhǎng)度很小或者當(dāng)前分塊長(zhǎng)度很大的時(shí)候判定當(dāng)前位置為分塊位置。為了避免這種現(xiàn)象的發(fā)生,如存在前分塊小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度的時(shí),收緊判斷條件,使得匹配概率降低,盡量使所述滑動(dòng)窗口移動(dòng)到下個(gè)位置再進(jìn)行處理;同理,當(dāng)所述滑動(dòng)窗口已經(jīng)移動(dòng)了很多步后,所述當(dāng)前塊長(zhǎng)已經(jīng)很大時(shí),有可能還沒(méi)有出現(xiàn)與所述預(yù)定義的哈希值相匹配的內(nèi)容而判斷當(dāng)前位置不是分塊位置,所以為了不使分塊長(zhǎng)度繼續(xù)變大,應(yīng)該放寬分塊條件盡可能的在當(dāng)前位置進(jìn)行分塊操作,通過(guò)根據(jù)所述當(dāng)前分塊的長(zhǎng)度動(dòng)態(tài)選擇放寬還是收緊匹配條件來(lái)控制分塊的長(zhǎng)短,減少分塊中分塊長(zhǎng)度極大值或極小值的出現(xiàn)的數(shù)量,控制所述分塊長(zhǎng)度的大小,避免出現(xiàn)過(guò)長(zhǎng)分塊情況導(dǎo)致的去重率下降的問(wèn)題;同時(shí)因?yàn)闇p少了分塊長(zhǎng)度過(guò)短情況的出現(xiàn),降低了分塊的整體數(shù)量,提高了去重分塊效率。

      所述當(dāng)前分塊的長(zhǎng)度為數(shù)據(jù)流起點(diǎn)或者上個(gè)分塊位置到所述滑動(dòng)窗口當(dāng)前位置之間包含數(shù)據(jù)的長(zhǎng)度,本發(fā)明數(shù)據(jù)去重的收斂分塊方法通過(guò)引入所述當(dāng)前分塊的長(zhǎng)度作為分塊參數(shù),根據(jù)當(dāng)前分塊的長(zhǎng)度,動(dòng)態(tài)地選擇放寬或者緊縮判斷條件,使得整個(gè)分塊過(guò)程中數(shù)據(jù)塊的長(zhǎng)度可控;同時(shí)因?yàn)閿?shù)據(jù)流的總長(zhǎng)度不變,小數(shù)據(jù)塊的數(shù)量的減少,也減少了分塊的總數(shù)。

      當(dāng)所述滑動(dòng)窗口所在的當(dāng)前位置是所述數(shù)據(jù)流的結(jié)束位置時(shí),則執(zhí)行步驟S40,記錄所述結(jié)束位置為一個(gè)分塊位置,并結(jié)束分塊操作。

      具體地:所述滑動(dòng)窗從起始位置Cur開始每步一個(gè)字節(jié)向數(shù)據(jù)流結(jié)束位置移動(dòng),在每步都判斷當(dāng)前位置是否可以作為分塊位置,當(dāng)所述當(dāng)前分塊長(zhǎng)度小于4KB時(shí),選取緊縮的,更為苛刻的判斷條件來(lái)判斷所述滑動(dòng)窗口位置是否為分塊位置;當(dāng)所述當(dāng)前分塊長(zhǎng)度大于8KB時(shí),采取寬松的判斷條件來(lái)判斷所述滑動(dòng)窗口位置是否為分塊位置;直至所述滑動(dòng)窗口移動(dòng)到數(shù)據(jù)流的結(jié)束位置,并在所述全部數(shù)據(jù)流的結(jié)束位置進(jìn)行分塊操作并完成分塊操作。使得所述分塊完成后的數(shù)據(jù)塊的長(zhǎng)度大部分都在4KB至8KB附近,減少了超小長(zhǎng)度數(shù)據(jù)塊的數(shù)量,也減少了超大數(shù)據(jù)塊的數(shù)量,保證了去重率;相比現(xiàn)有技術(shù)中,具體如圖12,使用傳統(tǒng)的Rabin哈希算法得出的數(shù)據(jù)塊中有22%的數(shù)據(jù)塊長(zhǎng)度小于2KB,而本實(shí)施例中的數(shù)據(jù)塊長(zhǎng)度都集中收斂在4KB至8KB附近,通過(guò)提高數(shù)據(jù)塊的平均長(zhǎng)度,極大地減小了數(shù)據(jù)塊的數(shù)量,提高了去重分塊效率。

      進(jìn)一步地,請(qǐng)參照?qǐng)D2,基于本發(fā)明數(shù)據(jù)去重的收斂分塊方法第一實(shí)施例,在本發(fā)明數(shù)據(jù)去重的收斂分塊方法第二實(shí)施例中,所述當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,所述滑動(dòng)窗口所在的當(dāng)前位置不是所述數(shù)據(jù)流的結(jié)束位置時(shí),根據(jù)當(dāng)前分塊的長(zhǎng)度,動(dòng)態(tài)選擇判斷條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步包括:

      步驟S31,判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度;

      若是,則執(zhí)行步驟S32,使用緊縮分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      若否,則執(zhí)行步驟S33,使用放寬分塊條件來(lái)判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步。

      具體地:開始分塊,針對(duì)文件的初始位置設(shè)置為Cur,記做0,所述標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度為8KB(需要說(shuō)明的是,標(biāo)準(zhǔn)預(yù)設(shè)塊長(zhǎng)可以變化為4KB、16KB不等,應(yīng)根據(jù)實(shí)際問(wèn)題進(jìn)行選擇)從零開始移動(dòng)所述滑動(dòng)窗口,所述滑動(dòng)窗口為48字節(jié),在所述滑動(dòng)窗口開始移動(dòng)到Cur+8192字節(jié)之前(即所述分塊長(zhǎng)度小于8KB),例如:當(dāng)所述滑動(dòng)窗體移動(dòng)到Cur+7168時(shí),因?yàn)楫?dāng)前分塊長(zhǎng)度為7KB,還不到8KB,使用收緊分塊條件,即相對(duì)苛刻的條件來(lái)判斷是否在當(dāng)前位置可以進(jìn)行分塊操作,盡量使得判斷結(jié)果為不能分塊,使所述滑動(dòng)窗體向數(shù)據(jù)流的結(jié)束位置移動(dòng)一個(gè)字節(jié)成為大概率事件;當(dāng)所述滑動(dòng)窗體移動(dòng)到Cur+9216字節(jié)時(shí),此時(shí)當(dāng)前分塊長(zhǎng)度為9KB,因?yàn)槌^(guò)了8KB,所以采用放寬分塊判斷條件來(lái)使在此分塊成為大概率事件,盡量在當(dāng)前位置進(jìn)行分塊操作,以防止分塊的長(zhǎng)度進(jìn)一步變大;在本實(shí)施例中因?yàn)樗龇謮K的成功率在所述當(dāng)前分塊長(zhǎng)度為8KB時(shí)最高,當(dāng)長(zhǎng)度與8KB越接近時(shí),分塊成功概率越大,當(dāng)前分塊長(zhǎng)度與8KB相差越多,分塊成功概率越小,所以最后數(shù)據(jù)塊的長(zhǎng)度如圖11,近似正態(tài)分布,數(shù)據(jù)塊的長(zhǎng)度8KB為正態(tài)分布的高峰,且大部分?jǐn)?shù)據(jù)塊的塊長(zhǎng)在8KB附近,避免了過(guò)多短數(shù)據(jù)塊的出現(xiàn),減少了分塊數(shù)量,提高了去重分塊效率;也避免了過(guò)多長(zhǎng)數(shù)據(jù)塊的出現(xiàn),提高了去重率;

      進(jìn)一步地,請(qǐng)參照?qǐng)D3,基于本發(fā)明數(shù)據(jù)去重的收斂分塊方法第二實(shí)施例,在本發(fā)明數(shù)據(jù)去重的收斂分塊方法第三實(shí)施例中,所述當(dāng)前分塊的長(zhǎng)度小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),使用緊縮分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步包括:

      步驟S321,獲取用于哈希匹配運(yùn)算的預(yù)設(shè)位數(shù),并設(shè)置根據(jù)所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)計(jì)算出的哈希值中比所述預(yù)設(shè)位數(shù)多的位數(shù)為對(duì)比值;

      所述預(yù)設(shè)位數(shù)為提前設(shè)置好的位數(shù),需要說(shuō)明的是,在有些實(shí)施例中所述預(yù)設(shè)位數(shù)為一個(gè)集合,根據(jù)不同的所述當(dāng)前分塊的塊長(zhǎng)來(lái)選取。對(duì)比值選取的位數(shù)越多,匹配的概率會(huì)越小。

      步驟S322,判斷所述對(duì)比值與預(yù)設(shè)哈希值是否匹配;

      本實(shí)施例中,如果所述對(duì)比值和預(yù)設(shè)的哈希值相等,則認(rèn)為所述對(duì)比值與所述預(yù)設(shè)哈希值匹配。所述預(yù)設(shè)哈希值為指定數(shù)據(jù)計(jì)算出的哈希值,通過(guò)使用指定位數(shù)來(lái)對(duì)比,提高了去重分塊效率。

      若是,則執(zhí)行步驟S323,記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      若否,則執(zhí)行步驟S324,使所述滑動(dòng)窗口向前移動(dòng)一步。

      具體地:設(shè)置預(yù)設(shè)位數(shù)為13位,假定當(dāng)前分塊長(zhǎng)度為4KB時(shí),因?yàn)樾∮跇?biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度8KB,所以選取比13位多的15位進(jìn)行比較,即計(jì)算得到所述滑動(dòng)窗口對(duì)應(yīng)內(nèi)容的哈希值fp后,選取所述fp的最后15位和預(yù)設(shè)哈希值進(jìn)行匹配,因?yàn)閺母怕噬戏治觯涸?3位時(shí)是8KB(即213)個(gè)中有一個(gè)滿足分塊要求,而選取15位時(shí)是32KB(即215)個(gè)中才有一個(gè)滿足分塊要求,所以極大地降低了分塊成功的概率,增大了使所述滑動(dòng)窗口向數(shù)據(jù)流結(jié)尾移動(dòng)一個(gè)字節(jié)的概率,并降低了在該位置分塊的概率。減少了小分塊的數(shù)量,減少了后的數(shù)據(jù)塊數(shù)量,提高了去重分塊效率。

      進(jìn)一步地,請(qǐng)參照?qǐng)D4,基于本發(fā)明數(shù)據(jù)去重的收斂分塊方法第二實(shí)施例,在本發(fā)明數(shù)據(jù)去重的收斂分塊方法第四實(shí)施例中,當(dāng)所述當(dāng)前分塊的長(zhǎng)度不小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),所述使用放寬分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步包括:

      步驟S331,獲取用于哈希匹配運(yùn)算的預(yù)設(shè)位數(shù),設(shè)置根據(jù)所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)計(jì)算出的哈希值中比所述預(yù)設(shè)位數(shù)少的位數(shù)為對(duì)比值;

      所述預(yù)設(shè)位數(shù)為提前設(shè)置好的位數(shù),需要說(shuō)明的是,在有些實(shí)施例中所述預(yù)設(shè)位數(shù)為一個(gè)集合,根據(jù)不同的所述當(dāng)前分塊的塊長(zhǎng)來(lái)選取。對(duì)比值選取的位數(shù)越少,匹配的概率會(huì)越高

      步驟S332,判斷所述對(duì)比值與預(yù)設(shè)哈希值是否匹配;

      若是,則執(zhí)行步驟S333,記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      若否,則執(zhí)行步驟S334,則使所述滑動(dòng)窗口向前移動(dòng)一步。

      具體地:設(shè)置預(yù)設(shè)位數(shù)為13位,當(dāng)前分塊長(zhǎng)度為9KB時(shí),因?yàn)榇笥跇?biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度8KB,所以選取比13位少的11位進(jìn)行比較,即計(jì)算得到所述滑動(dòng)窗口對(duì)應(yīng)內(nèi)容的哈希值fp后,選取所述fp的最后11位和預(yù)設(shè)哈希值進(jìn)行匹配,因?yàn)閺母怕噬戏治觯涸?1位時(shí)是8KB(即213)個(gè)中才有一個(gè)滿足分塊要求,而選取11位時(shí)是2KB(即211)個(gè)中就有一個(gè)滿足分塊要求。使得分塊在當(dāng)前位置進(jìn)行成為大概率事件,避免了分塊過(guò)大,導(dǎo)致的去重率下降的問(wèn)題。

      進(jìn)一步地,請(qǐng)參照?qǐng)D5,基于本發(fā)明數(shù)據(jù)去重的收斂分塊方法第二實(shí)施例,在本發(fā)明數(shù)據(jù)去重的收斂分塊方法第五實(shí)施例中,在所述判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度之前還包括:

      步驟S34,跳躍移動(dòng)所述滑動(dòng)窗口一個(gè)預(yù)設(shè)跳躍長(zhǎng)度;

      步驟S35,當(dāng)跳躍移動(dòng)所述滑動(dòng)窗口一個(gè)預(yù)設(shè)跳躍長(zhǎng)度后,判斷所述滑窗口的位置是否是所述數(shù)據(jù)流的結(jié)束位置;

      若是,則執(zhí)行步驟S36,記錄所述結(jié)束位置為一個(gè)分塊位置,并結(jié)束分塊操作;

      若否,則執(zhí)行步驟S37,使所述滑動(dòng)窗口向前移動(dòng)一步。

      所述預(yù)設(shè)跳躍長(zhǎng)度為預(yù)設(shè)的最小塊長(zhǎng),應(yīng)該根據(jù)實(shí)際需要進(jìn)行設(shè)定。有些待分塊的數(shù)據(jù)流可能很短,不到一個(gè)預(yù)設(shè)跳躍長(zhǎng)度時(shí),則只移動(dòng)所述滑動(dòng)窗口一次即可結(jié)束整個(gè)分塊操作。

      具體地:在每個(gè)分塊位置后,都不進(jìn)行判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度,而是先移動(dòng)所述滑動(dòng)窗口跳躍移動(dòng)2KB(該預(yù)設(shè)跳躍塊長(zhǎng)可以設(shè)置為小于平均預(yù)設(shè)塊長(zhǎng),比如1KB、2KB、4KB不等),在此段距離內(nèi)不做哈希計(jì)算,也不進(jìn)行哈希匹配或判斷在此距離內(nèi)是否存在分塊位置,如果數(shù)據(jù)流剩余的長(zhǎng)度不夠2KB,則以數(shù)據(jù)流的結(jié)束位置為分塊位置分塊;如果數(shù)據(jù)流剩余的長(zhǎng)度大于2KB,則所述滑動(dòng)窗口繼續(xù)向數(shù)據(jù)流結(jié)尾處移動(dòng)一個(gè)字節(jié),并開始每步都進(jìn)行判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度,如果判斷當(dāng)前位置為分塊位置,則下一步又開始步驟S34。因?yàn)橐苿?dòng)到下個(gè)字節(jié)后的當(dāng)前分塊長(zhǎng)度還小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度8KB,所以選取緊縮的判斷條件來(lái)判斷所述滑動(dòng)窗口位置是否為分塊位置,因此分塊的概率很小,立即觸發(fā)步驟S34的概率也很小。因?yàn)槭∪チ祟A(yù)設(shè)跳躍長(zhǎng)度內(nèi)區(qū)域的哈希計(jì)算和判斷計(jì)算操作,進(jìn)一步地提高整體分塊的平均塊長(zhǎng),減少分塊的總數(shù)目,在分塊開始使用此種跳躍分塊,減少分塊的CPU開銷,提升分塊速度。因?yàn)楹罄m(xù)還使用依賴于當(dāng)前塊長(zhǎng)而選擇分塊判斷條件來(lái)實(shí)現(xiàn)分塊,所以此種跳躍分塊沒(méi)有破壞基于內(nèi)容分塊的內(nèi)容依賴屬性。

      本發(fā)明提供一種數(shù)據(jù)去重的收斂分塊裝置,參照?qǐng)D6,在第一實(shí)施例中,該數(shù)據(jù)去重的收斂分塊裝置包括:

      啟動(dòng)模塊10,用于記錄數(shù)據(jù)流的起始位置為一個(gè)分塊位置,并使滑動(dòng)窗口從所述起始位置開始逐步向前移動(dòng);

      針對(duì)給定的一個(gè)需要被分塊的文件或數(shù)據(jù)流開始分塊操作,設(shè)置當(dāng)前位置為Cur,取所述滑動(dòng)窗口的長(zhǎng)度為48字節(jié),從Cur位置開始逐步移動(dòng)所述滑動(dòng)窗口至所述數(shù)據(jù)流的結(jié)束位置,在本實(shí)施例中所述逐步移動(dòng)中的每步為1個(gè)字節(jié)。

      判斷模塊20,用于當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,判斷所述滑動(dòng)窗口所在的當(dāng)前位置是否是數(shù)據(jù)流的結(jié)束位置;

      如果所述文件或數(shù)據(jù)流的最后一位在所述滑動(dòng)窗口內(nèi)時(shí),即可判斷所述滑動(dòng)窗口是在數(shù)據(jù)流的結(jié)束位置。

      第一分塊模塊30,用于當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,所述滑動(dòng)窗口所在的當(dāng)前位置不是所述數(shù)據(jù)流的結(jié)束位置時(shí),根據(jù)當(dāng)前分塊的長(zhǎng)度,動(dòng)態(tài)選擇判斷條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步,所述當(dāng)前分塊為所述滑動(dòng)窗口當(dāng)前位置對(duì)應(yīng)所述數(shù)據(jù)流的位置到所述數(shù)據(jù)流的上一個(gè)分塊位置之間的數(shù)據(jù)塊;

      在分塊時(shí),會(huì)根據(jù)預(yù)定義數(shù)據(jù)流產(chǎn)生的哈希值,如果所述哈希值和當(dāng)前所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)的哈希值匹配,則在當(dāng)前位置進(jìn)行分塊處理。但是由于哈希值是隨機(jī)的,可能會(huì)在當(dāng)前分塊長(zhǎng)度很小或者當(dāng)前分塊長(zhǎng)度很大的時(shí)候判定當(dāng)前位置為分塊位置。為了避免這種現(xiàn)象的發(fā)生,如存在當(dāng)前分塊小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度的時(shí),收緊判斷條件,使得匹配概率降低,盡量使所述滑動(dòng)窗口移動(dòng)到下個(gè)位置再進(jìn)行處理;同理,當(dāng)所述滑動(dòng)窗口已經(jīng)移動(dòng)了很多步后,所述當(dāng)前塊長(zhǎng)已經(jīng)很大時(shí),有可能還沒(méi)有出現(xiàn)與所述預(yù)定義的哈希值相匹配的內(nèi)容而判斷當(dāng)前位置不是分塊位置,所以為了不使分塊長(zhǎng)度繼續(xù)變大,應(yīng)該放寬分塊條件盡可能的在當(dāng)前位置進(jìn)行分塊操作,通過(guò)根據(jù)所述當(dāng)前分塊的長(zhǎng)度動(dòng)態(tài)選擇放寬還是收緊匹配條件來(lái)控制分塊的長(zhǎng)短,減少分塊中分塊長(zhǎng)度極大值或極小值的出現(xiàn)的數(shù)量,控制所述分塊長(zhǎng)度的大小,避免出現(xiàn)過(guò)長(zhǎng)分塊情況導(dǎo)致的去重率下降的問(wèn)題;同時(shí)因?yàn)闇p少了分塊長(zhǎng)度過(guò)短情況的出現(xiàn),降低了分塊的整體數(shù)量,提高了去重分塊效率。

      所述當(dāng)前分塊的長(zhǎng)度為數(shù)據(jù)流起點(diǎn)或者上個(gè)分塊位置到所述滑動(dòng)窗口當(dāng)前位置之間包含數(shù)據(jù)的長(zhǎng)度,本發(fā)明數(shù)據(jù)去重的收斂分塊方法通過(guò)引入所述當(dāng)前分塊的長(zhǎng)度作為分塊參數(shù),根據(jù)當(dāng)前分塊的長(zhǎng)度,動(dòng)態(tài)地選擇放寬或者緊縮判斷條件,使得整個(gè)分塊過(guò)程中數(shù)據(jù)塊的長(zhǎng)度可控;同時(shí)因?yàn)閿?shù)據(jù)流的總長(zhǎng)度不變,小數(shù)據(jù)塊的數(shù)量的減少,也減少了分塊的總數(shù)目。

      結(jié)束模塊40,用于當(dāng)所述滑動(dòng)窗口每移動(dòng)一步后,所述滑動(dòng)窗口所在的當(dāng)前位置是所述數(shù)據(jù)流的結(jié)束位置時(shí),記錄所述結(jié)束位置為一個(gè)分塊位置,并結(jié)束分塊操作。

      具體地:所述啟動(dòng)模塊10操作所述滑動(dòng)窗從起始位置Cur開始每步一個(gè)字節(jié)向數(shù)據(jù)流結(jié)束位置移動(dòng),在每步都判斷當(dāng)前位置是否可以作為分塊位置,當(dāng)所述判斷模塊20判斷所述當(dāng)前分塊長(zhǎng)度小于4KB時(shí),第一分塊模塊30選取緊縮的,更為苛刻的判斷條件來(lái)判斷所述滑動(dòng)窗口位置是否為分塊位置;當(dāng)所述判斷模塊20判斷所述當(dāng)前分塊長(zhǎng)度大于8KB時(shí),第一分塊模塊30采取寬松的判斷條件來(lái)判斷所述滑動(dòng)窗口位置是否為分塊位置;直至所述滑動(dòng)窗口移動(dòng)到全部數(shù)據(jù)流的結(jié)束位置,啟動(dòng)所述結(jié)束模塊40在所述數(shù)據(jù)流的結(jié)束位置并完成分塊操作。使得所述分塊完成后的數(shù)據(jù)塊的長(zhǎng)度大部分都在4KB至8KB附近之間,減少了超小長(zhǎng)度數(shù)據(jù)塊的數(shù)量,也減少了超大數(shù)據(jù)塊的數(shù)量,保證了去重率;相比現(xiàn)有技術(shù)中,具體如圖12,使用傳統(tǒng)的Rabin哈希算法得出的數(shù)據(jù)塊中有22%的數(shù)據(jù)塊長(zhǎng)度小于2KB,而本實(shí)施例中的數(shù)據(jù)塊長(zhǎng)度都收斂集中在4KB至8KB附近,通過(guò)提高數(shù)據(jù)塊的平均長(zhǎng)度,極大地減小了數(shù)據(jù)塊的數(shù)量,提高了去重分塊效率。

      進(jìn)一步地,請(qǐng)參照?qǐng)D7,基于本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第一實(shí)施例,在本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第二實(shí)施例中,所述第一分塊模塊30包括:

      第一判斷單元31,用于判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度;

      第二分塊模塊32,當(dāng)所述當(dāng)前分塊的長(zhǎng)度小于所述標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),使用緊縮分塊條件判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      第三分塊模塊33,用于當(dāng)所述當(dāng)前分塊的長(zhǎng)度不小于所述標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度時(shí),使用放寬分塊條件來(lái)判斷所述當(dāng)前位置是否為分塊位置,如果所述當(dāng)前位置是分塊位置則記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步。

      具體地:開始分塊,針對(duì)文件的初始位置設(shè)置為Cur,記做0,所述標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度為8KB,從零開始移動(dòng)所述滑動(dòng)窗口,所述滑動(dòng)窗口為48字節(jié),在所述滑動(dòng)窗口開始移動(dòng)到Cur+8192字節(jié)之前(即所述分塊長(zhǎng)度小于8KB),例如:當(dāng)所述滑動(dòng)窗體移動(dòng)到Cur+7168時(shí),因?yàn)楫?dāng)前分塊長(zhǎng)度為7KB,第一判斷單元31判斷小于8KB,調(diào)用第二分塊模塊32使用收緊分塊條件,即相對(duì)苛刻的條件來(lái)判斷是否在當(dāng)前位置可以進(jìn)行分塊操作,盡量使得判斷結(jié)果為不能分塊,使所述滑動(dòng)窗體向數(shù)據(jù)流的結(jié)束位置移動(dòng)一個(gè)字節(jié)成為大概率事件;當(dāng)所述滑動(dòng)窗體移動(dòng)到Cur+9216字節(jié)時(shí),此時(shí)當(dāng)前分塊長(zhǎng)度為9KB,第一判斷單元31判斷大于8KB,調(diào)用第三分塊模塊33采用放寬分塊判斷條件來(lái)使在此分塊成為大概率事件,盡量在當(dāng)前位置進(jìn)行分塊操作,以防止分塊的長(zhǎng)度進(jìn)一步變大;在本實(shí)施例中因?yàn)樗龇謮K的成功率在所述當(dāng)前分塊長(zhǎng)度為8KB時(shí)最高,當(dāng)長(zhǎng)度與8KB越接近時(shí),分塊成功概率越大,當(dāng)前分塊長(zhǎng)度與8KB相差越多,分塊成功概率越小,所以最后數(shù)據(jù)塊的長(zhǎng)度如圖11,近似正態(tài)分布,數(shù)據(jù)塊的長(zhǎng)度8KB為正態(tài)分布的高峰,且大部分?jǐn)?shù)據(jù)塊的塊長(zhǎng)在8KB附近,避免了過(guò)多短數(shù)據(jù)塊的出現(xiàn),提高了去重分塊效率;也避免了過(guò)多長(zhǎng)數(shù)據(jù)塊的出現(xiàn),提高了去重率;

      進(jìn)一步地,請(qǐng)參照?qǐng)D8,基于本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第二實(shí)施例,在本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第三實(shí)施例中,所述第二分塊模塊32包括:

      第一獲取單元321,用于獲取用于哈希匹配運(yùn)算的預(yù)設(shè)位數(shù),并設(shè)置根據(jù)所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)計(jì)算出的哈希值中比所述預(yù)設(shè)位數(shù)多的位數(shù)為對(duì)比值;

      所述預(yù)設(shè)位數(shù)為提前設(shè)置好的位數(shù),需要說(shuō)明的是,在有些實(shí)施例中所述預(yù)設(shè)位數(shù)為一個(gè)集合,根據(jù)不同的所述當(dāng)前分塊的塊長(zhǎng)來(lái)選取。對(duì)比值選取的位數(shù)越多,匹配的概率會(huì)越小。

      第二判斷單元322,用于判斷所述對(duì)比值與預(yù)設(shè)哈希值是否匹配;

      本實(shí)施例中,如果所述對(duì)比值和預(yù)設(shè)的哈希值相等,則認(rèn)為所述對(duì)比值與所述預(yù)設(shè)哈希值匹配。所述預(yù)設(shè)哈希值為指定數(shù)據(jù)計(jì)算出的哈希值,通過(guò)使用指定位數(shù)來(lái)對(duì)比,提高了去重分塊效率。

      第一分塊單元323,用于當(dāng)所述對(duì)比值與預(yù)設(shè)哈希值匹配時(shí),記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      第一移動(dòng)單元324,用于當(dāng)所述對(duì)比值與預(yù)設(shè)哈希值不匹配時(shí),使所述滑動(dòng)窗口向前移動(dòng)一步。

      具體地:第一獲取單元321獲取預(yù)設(shè)位數(shù)為13位,假定當(dāng)前分塊長(zhǎng)度為4KB時(shí),因?yàn)樾∮跇?biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度8KB,所以調(diào)用第二判斷單元322選取比13位多的15位進(jìn)行比較,即計(jì)算得到所述滑動(dòng)窗口對(duì)應(yīng)內(nèi)容的哈希值fp后,選取所述fp的最后15位和預(yù)設(shè)哈希值進(jìn)行匹配,因?yàn)閺母怕噬戏治觯涸?3位時(shí)是8KB(即213)個(gè)中有一個(gè)滿足分塊要求,并調(diào)用第一分塊單元323進(jìn)行分塊操作。而選取15位時(shí)是32KB(即215)個(gè)中才有一個(gè)滿足分塊要求,并調(diào)用第一分塊單元323進(jìn)行分塊操作,所以極大地降低了分塊成功的概率,增大了啟動(dòng)第一移動(dòng)單元324使所述滑動(dòng)窗口向數(shù)據(jù)流結(jié)尾移動(dòng)一個(gè)字節(jié)的概率,并降低了在該位置分塊的概率。減少了小分塊的數(shù)量,減少了分塊后的數(shù)據(jù)塊數(shù)量,提高了去重分塊效率。

      進(jìn)一步地,請(qǐng)參照?qǐng)D9,基于本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第二實(shí)施例,在本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第四實(shí)施例中,所述第三分塊模塊33包括:

      第二獲取單元331,獲取用于哈希匹配運(yùn)算的預(yù)設(shè)位數(shù),設(shè)置根據(jù)所述滑動(dòng)窗口內(nèi)的數(shù)據(jù)計(jì)算出的哈希值中比所述預(yù)設(shè)位數(shù)少的位數(shù)為對(duì)比值;

      所述預(yù)設(shè)位數(shù)為提前設(shè)置好的位數(shù),需要說(shuō)明的是,在有些實(shí)施例中所述預(yù)設(shè)位數(shù)為一個(gè)集合,根據(jù)不同的所述當(dāng)前分塊的塊長(zhǎng)來(lái)選取。對(duì)比值選取的位數(shù)越少,匹配的概率會(huì)越高

      第三判斷單元332,用于判斷所述對(duì)比值與預(yù)設(shè)哈希值是否匹配;

      第二分塊單元333,用于當(dāng)所述對(duì)比值與預(yù)設(shè)哈希值匹配時(shí),記錄所述當(dāng)前位置為分塊位置,并使所述滑動(dòng)窗口向前移動(dòng)一步;

      第二移動(dòng)單元334,用于當(dāng)所述對(duì)比值與預(yù)設(shè)哈希值不匹配時(shí),使所述滑動(dòng)窗口向前移動(dòng)一步。

      具體地第一獲取單元321獲取預(yù)設(shè)位數(shù)為13位,當(dāng)前分塊長(zhǎng)度為9KB時(shí),因?yàn)榇笥跇?biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度8KB,調(diào)用第二獲取單元331選取比13位少的11位進(jìn)行比較,即計(jì)算得到所述滑動(dòng)窗口對(duì)應(yīng)內(nèi)容的哈希值fp后,選取所述fp的最后11位和預(yù)設(shè)哈希值進(jìn)行匹配,因?yàn)閺母怕噬戏治觯涸?1位時(shí)是8KB(即213)個(gè)fp中才有一個(gè)滿足分塊要求,調(diào)用第二分塊單元333進(jìn)行分塊操作;而選取11位時(shí)是2KB(即211)個(gè)fp中就有一個(gè)滿足分塊要求,調(diào)用第二分塊單元333進(jìn)行分塊操作。使使得分塊在當(dāng)前位置進(jìn)行成為大概率事件,避免了分塊過(guò)大,導(dǎo)致的去重率下降的問(wèn)題。

      進(jìn)一步地,請(qǐng)參照?qǐng)D10,基于本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第一實(shí)施例,在本發(fā)明數(shù)據(jù)去重的收斂分塊裝置第五實(shí)施例中,所述第一分塊模塊還包括:

      跳躍單元34,用于跳躍移動(dòng)所述滑動(dòng)窗口一個(gè)預(yù)設(shè)跳躍長(zhǎng)度;

      第四判斷單元35,用于當(dāng)跳躍移動(dòng)所述滑動(dòng)窗口后,判斷所述滑窗口的位置是否是所述數(shù)據(jù)流的結(jié)束位置;

      結(jié)束單元36,用于當(dāng)所述滑窗口的位置是所述數(shù)據(jù)流的結(jié)束位置時(shí),記錄所述結(jié)束位置為一個(gè)分塊位置,并結(jié)束分塊操作;

      第四移動(dòng)單元37,用于當(dāng)所述滑窗口的位置是所述數(shù)據(jù)流的結(jié)束位置時(shí),使所述滑動(dòng)窗口向前移動(dòng)一步。

      所述預(yù)設(shè)跳躍長(zhǎng)度為預(yù)設(shè)的最小塊長(zhǎng),應(yīng)該根據(jù)實(shí)際需要進(jìn)行設(shè)定。有些待分塊的數(shù)據(jù)流可能很短,不到一個(gè)預(yù)設(shè)跳躍長(zhǎng)度時(shí),則只移動(dòng)所述滑動(dòng)窗口一次即可結(jié)束整個(gè)分塊操作。

      具體地:在每個(gè)分塊位置后,都不進(jìn)行判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度,而是跳躍單元34使得所述滑動(dòng)窗口移動(dòng)2KB(該預(yù)設(shè)跳躍塊長(zhǎng)可以設(shè)置為小于標(biāo)準(zhǔn)預(yù)設(shè)塊長(zhǎng),比如1KB、2KB、4KB不等),在此段距離內(nèi)不做哈希計(jì)算,也不進(jìn)行哈希匹配或判斷在此距離內(nèi)是否存在分塊位置,第四判斷單元35判斷如果在數(shù)據(jù)流剩余的長(zhǎng)度不夠2KB,則結(jié)束單元36以數(shù)據(jù)流的結(jié)束位置為分塊位置分塊;如果數(shù)據(jù)流剩余的長(zhǎng)度大于2KB,則調(diào)用第四移動(dòng)單元37使得所述滑動(dòng)窗口繼續(xù)向數(shù)據(jù)流結(jié)尾處移動(dòng)一個(gè)字節(jié),并開始每步都進(jìn)行判斷所述當(dāng)前分塊的長(zhǎng)度是否小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度,如果判斷當(dāng)前位置為分塊位置,則下一步又開始步驟S34。因?yàn)橐苿?dòng)到下個(gè)字節(jié)后的當(dāng)前分塊長(zhǎng)度還小于標(biāo)準(zhǔn)預(yù)設(shè)長(zhǎng)度8KB,所以選取緊縮的判斷條件來(lái)判斷所述滑動(dòng)窗口位置是否為分塊位置,因此分塊的概率很小,立即觸發(fā)步驟S34的概率也很小。因?yàn)槭∪チ祟A(yù)設(shè)跳躍長(zhǎng)度內(nèi)區(qū)域的哈希計(jì)算和判斷計(jì)算操作,進(jìn)一步的提高整體分塊的平均塊長(zhǎng),減少分塊的總數(shù)目,在分塊開始使用此種跳躍分塊,減少分塊的CPU開銷,提升分塊速度。因?yàn)楹罄m(xù)還使用依賴于當(dāng)前塊長(zhǎng)而選擇分塊判斷條件來(lái)實(shí)現(xiàn)分塊,所以此種跳躍分塊沒(méi)有破壞基于內(nèi)容分塊的內(nèi)容依賴屬性。

      以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說(shuō)明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。

      當(dāng)前第1頁(yè)1 2 3 
      網(wǎng)友詢問(wèn)留言 已有0條留言
      • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1