專利名稱:數(shù)據(jù)分割方法和數(shù)據(jù)分割裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種將數(shù)據(jù)流中的數(shù)據(jù)分割為數(shù)據(jù)段的數(shù)據(jù)分割方法和數(shù)據(jù)分割裝置。
背景技術(shù):
在數(shù)據(jù)傳輸過程中,通常的手段是對要傳輸?shù)臄?shù)據(jù)進(jìn)行編碼壓縮,編碼壓縮的實(shí)質(zhì),是減少數(shù)據(jù)流中重復(fù)數(shù)據(jù)的傳輸,在數(shù)據(jù)接收的端點(diǎn),再對減少傳輸?shù)闹貜?fù)的數(shù)據(jù)進(jìn)行必要的重復(fù)恢復(fù)以復(fù)原數(shù)據(jù)流。例如,如果要傳輸?shù)臄?shù)據(jù)串為011000110101011,其中,可以劃分出需要重復(fù)傳輸?shù)臄?shù)據(jù)子串“011”,顯然,如果“011”只傳輸一次,就可以減少實(shí)際傳輸?shù)臄?shù)據(jù)量,實(shí)現(xiàn)數(shù)據(jù)的壓縮。
要找到重復(fù)傳輸?shù)臄?shù)據(jù),需要解決如下的問題首先要知道哪些數(shù)據(jù)段是重復(fù)的,其次要知道預(yù)傳輸?shù)臄?shù)據(jù)流中哪些數(shù)據(jù)段是重復(fù)的,這樣才能實(shí)現(xiàn)重復(fù)數(shù)據(jù)的替代傳輸,即將位數(shù)較長的重復(fù)數(shù)據(jù)段用位數(shù)較少的替代符號傳輸,從而大大減少實(shí)際需要傳輸?shù)臄?shù)據(jù)量。例如,專利號為US20060061495的美國專利公開了一種用于處理輸入數(shù)據(jù)的設(shè)備,在設(shè)備中輸入的數(shù)據(jù)被分割成多數(shù)的數(shù)據(jù)段,這個設(shè)備能夠判斷數(shù)據(jù)流中的一個或多個數(shù)據(jù)段是否是可以被引用的數(shù)據(jù)段;然后,對于每一個或多個被引用的數(shù)據(jù)段,邏輯上被設(shè)定為用一個引用標(biāo)簽來替代。更進(jìn)一步,對于每一個未出現(xiàn)在固定數(shù)據(jù)段存儲器中的被引用的數(shù)據(jù)段,可以為其分配一個引用標(biāo)簽,并且將所述引用標(biāo)簽和所述數(shù)據(jù)段綁定后存儲入一個數(shù)據(jù)庫。
按照上述專利的說法,只要能夠分割出在數(shù)據(jù)流中重復(fù)概率較大的數(shù)據(jù)段,就可以通過與其綁定的標(biāo)簽代替數(shù)據(jù)段進(jìn)行數(shù)據(jù)傳輸,從而實(shí)現(xiàn)數(shù)據(jù)的編碼壓縮。這里所說的數(shù)據(jù)重復(fù)有兩種含義,一種是歷史性重復(fù),即與存儲在數(shù)據(jù)庫中的數(shù)據(jù)段的重復(fù),只有這種重復(fù)可以通過引用標(biāo)簽的替代作用實(shí)現(xiàn)數(shù)據(jù)的壓縮;另一種是臨時性重復(fù),即本次傳輸?shù)臄?shù)據(jù)流中的重復(fù)次數(shù)較多或重復(fù)概率較大的數(shù)據(jù)段。無論什么樣的重復(fù)數(shù)據(jù),按照上述專利的指示,要么通過數(shù)據(jù)訓(xùn)練預(yù)先存儲在數(shù)據(jù)庫中,要么在即時的數(shù)據(jù)流傳輸過程中被發(fā)現(xiàn)并取出,然后為其分配引用標(biāo)簽并綁定后存入數(shù)據(jù)庫。問題的關(guān)鍵在于,如何確定一個數(shù)據(jù)段是可以被引用的數(shù)據(jù)段,以及,如何進(jìn)行數(shù)據(jù)的分割能夠才能發(fā)便地找到這樣的數(shù)據(jù)段。
按照本申請人的名稱為,可以按照數(shù)據(jù)應(yīng)用領(lǐng)域的數(shù)據(jù)特性設(shè)置包括滿足所述數(shù)據(jù)特性要求的數(shù)據(jù)段及引用標(biāo)簽,所述引用標(biāo)簽與所述數(shù)據(jù)段綁定后存入數(shù)據(jù)庫。對于某個特定的數(shù)據(jù)應(yīng)用領(lǐng)域,例美國如金融領(lǐng)域,往往會有明顯的數(shù)據(jù)特性,指示重復(fù)概率較大的數(shù)據(jù)或數(shù)據(jù)段,如通常的詞語、短句和表格數(shù)據(jù)等等??梢园凑誙S20060061495號專利所說的方式或按照“數(shù)據(jù)傳輸方法”的專利申請的指示通過數(shù)據(jù)訓(xùn)練獲得這些重復(fù)概率較大的數(shù)據(jù)。剩下的問題是,如何進(jìn)行有效的數(shù)據(jù)分割才能在一個數(shù)據(jù)流中找到這些可能的重復(fù)數(shù)據(jù)?一種常用的方法是,首先將數(shù)據(jù)流按照預(yù)先設(shè)置的窗口進(jìn)行分割,然后按照數(shù)據(jù)庫的具體記錄中存儲的數(shù)據(jù)段的指示,到窗口中匹配所述數(shù)據(jù)段,如果成功,則認(rèn)為找到了可以用引用標(biāo)簽代替的數(shù)據(jù)段。由于這種方法需要遍歷數(shù)據(jù)庫中的所有數(shù)據(jù)段,用每一個數(shù)據(jù)段到窗口中進(jìn)行匹配操作,而匹配到的數(shù)據(jù)段也可能有多個,還要在一組數(shù)據(jù)段中通過判決找到最佳的數(shù)據(jù)段,因此該方法的計(jì)算量大而效率低下。一個改進(jìn)的方法是,在窗口中首先從數(shù)據(jù)的起點(diǎn)起選擇一個最小的數(shù)據(jù)段,然后順序增加數(shù)據(jù)段的長度,計(jì)算每一個新長度數(shù)據(jù)串的散列值,然后利用該散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄,如果匹配成功,則認(rèn)為找到了可以用引用標(biāo)簽代替的數(shù)據(jù)段。由于這種方法固定了數(shù)據(jù)的起點(diǎn),每找到一個數(shù)據(jù)段,都要到數(shù)據(jù)庫中進(jìn)行多次匹配猜可能完成,所述次數(shù)與數(shù)據(jù)段的長度相等。因此這種方法仍然要消耗大量的計(jì)算資源,導(dǎo)致編碼效率較低。
發(fā)明方案本發(fā)明要解決的技術(shù)問題在于,提供一種效率高、易于找到最佳重復(fù)數(shù)據(jù)段的數(shù)據(jù)分割方法和裝置。
本發(fā)明提供的數(shù)據(jù)分割方法,包括用一個預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流中選取部分待編碼的數(shù)據(jù);從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取一個數(shù)據(jù)段;用所述數(shù)據(jù)段到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄,如果匹配成功,確定數(shù)據(jù)分割點(diǎn),將所述窗口順序向后移動相應(yīng)的長度;否則,將所述窗口順序向后移動第二預(yù)定長度。
其中,從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取大于第一預(yù)定長度的數(shù)據(jù)段。
其中,用一個預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流的起點(diǎn)連續(xù)選取待編碼的數(shù)據(jù)。
按照下述步驟隨機(jī)選取大于第一預(yù)定長度的數(shù)據(jù)段從窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的特定字符的個數(shù);如果所述預(yù)定字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
也可以按照下述步驟隨機(jī)選取大于第一預(yù)定長度的數(shù)據(jù)段從窗口內(nèi)的數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),查找所述窗口后部緊鄰所述窗口的連續(xù)的最長字符串并記錄所述字符串;如果所述字符串的字符個數(shù)值大于所述第一預(yù)定長度值,將掃描到的字符串作為分割的數(shù)據(jù)段。
所述方法還包括,計(jì)算所述數(shù)據(jù)段的散列值,以及,用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄。
所述相應(yīng)的長度為數(shù)據(jù)段的長度或大于數(shù)據(jù)段的長度。
所述第二預(yù)定長度等于1或大于1。
所述方法還包括,當(dāng)用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功時,判斷所述數(shù)據(jù)段是否為高概率重復(fù)字符串,如果是,為該字符串分配引用標(biāo)簽,計(jì)算所述字符串的散列值,將所述散列值與所述引用標(biāo)簽、字符串綁定后存儲入所述數(shù)據(jù)庫。
當(dāng)用所述數(shù)據(jù)段到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功,調(diào)整窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)后繼續(xù)隨機(jī)選取數(shù)據(jù)段,直到所述窗口的調(diào)整不滿足設(shè)定的條件時,將所述窗口順序向后移動第二預(yù)定長度。
所述方法還包括,設(shè)置一個第二數(shù)據(jù)庫作為備用數(shù)據(jù)庫,用于存儲重復(fù)概率較低的數(shù)據(jù)段和其重復(fù)次數(shù),以及,將第二數(shù)據(jù)庫中重復(fù)次數(shù)大于指定閾值的數(shù)據(jù)段存儲入所述第一數(shù)據(jù)庫。
所述方法還包括,將第一數(shù)據(jù)庫中被引用次數(shù)小于指定閾值的數(shù)據(jù)段移動到所述第二數(shù)據(jù)庫。
本發(fā)明提供的數(shù)據(jù)分割裝置,包括存儲數(shù)據(jù)段和與其綁定的引用標(biāo)簽的第一數(shù)據(jù)庫,一以及一個用于存儲數(shù)據(jù)分割結(jié)果的第二數(shù)據(jù)庫,還包括數(shù)據(jù)段選擇單元,用一個預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流中選取部分待編碼的數(shù)據(jù),以及,從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取一個數(shù)據(jù)段;數(shù)據(jù)段匹配單元,用所述數(shù)據(jù)段選擇單元提供的數(shù)據(jù)段到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄;窗口移動單元,用于將所述窗口順序向后移動相應(yīng)的長度,或者,將所達(dá)窗口順序向后移動第二預(yù)定長度。
其中,所述數(shù)據(jù)段選擇單元從窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的特定字符的個數(shù);如果所述預(yù)定字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
或者,所述數(shù)據(jù)段選擇單元從窗口內(nèi)的數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),查找所述窗口后部緊鄰所述窗口的連續(xù)的最長字符串并記錄所述字符串;如果所述字符串的字符個數(shù)值大于所述第一預(yù)定長度值,將掃描到的字符串作為分割的數(shù)據(jù)段。
更進(jìn)一步,所述數(shù)據(jù)段匹配單元計(jì)算所述數(shù)據(jù)段的散列值,以及,用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄。
所述裝置還包括,第一處理單元,用于當(dāng)用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功時,判斷所述數(shù)據(jù)段是否為高概率重復(fù)字符串,如果是,為該字符串分配引用標(biāo)簽,計(jì)算所述字符串的散列值,將所述散列值與所述引用標(biāo)簽、字符串綁定后存儲入所述數(shù)據(jù)庫。
所述裝置還包括,第二數(shù)據(jù)庫,用于存儲重復(fù)概率較低的數(shù)據(jù)段和其重復(fù)次數(shù)。
所述裝置還包括,第二處理單元,用于將第二數(shù)據(jù)庫中重復(fù)次數(shù)大于指定閾值的數(shù)據(jù)段存儲入所述第一數(shù)據(jù)庫,以及,將第一數(shù)據(jù)庫中被引用次數(shù)小于指定閾值的數(shù)據(jù)段移動到所述第二數(shù)據(jù)庫。
本發(fā)明提供的另一種數(shù)據(jù)分割方法,包括從待編碼的數(shù)據(jù)流中順序選取部分待編碼的數(shù)據(jù)作為一個數(shù)據(jù)段,所述數(shù)據(jù)段大于第一預(yù)定長度;用所述數(shù)據(jù)段到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄,如果匹配成功,確定數(shù)據(jù)分割點(diǎn),將所述窗口順序向后移動相應(yīng)的長度;否則,將所述窗口順序向后移動第二預(yù)定長度。
其中,從待編碼的數(shù)據(jù)流的起點(diǎn)連續(xù)選取待編碼的數(shù)據(jù)。
按照下述步驟選取大于第一預(yù)定長度的數(shù)據(jù)段從當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的特定字符的個數(shù);如果所述預(yù)定字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
或者,按照下述步驟選取大于第一預(yù)定長度的數(shù)據(jù)段從當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的連續(xù)字符的個數(shù);如果所述連續(xù)字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
所述方法還包括,計(jì)算所述數(shù)據(jù)段的散列值,以及,用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄。
所述相應(yīng)的長度為數(shù)據(jù)段的長度或大于數(shù)據(jù)段的長度。
所述第二預(yù)定長度等于1或大于1。
所述方法還包括,當(dāng)用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功時,判斷所述數(shù)據(jù)段是否為高概率重復(fù)字符串,如果是,為該字符串分配引用標(biāo)簽,計(jì)算所述字符串的散列值,將所述散列值與所述引用標(biāo)簽、字符串綁定后存儲入所述數(shù)據(jù)庫。
當(dāng)用所述數(shù)據(jù)段到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功,調(diào)整窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)后繼續(xù)隨機(jī)選取數(shù)據(jù)段,直到所述窗口的調(diào)整不滿足設(shè)定的條件時,將所述窗口順序向后移動第二預(yù)定長度。
所述方法還包括,設(shè)置一個第二數(shù)據(jù)庫作為備用數(shù)據(jù)庫,用于存儲重復(fù)概率較低的數(shù)據(jù)段和其重復(fù)次數(shù),以及,將第二數(shù)據(jù)庫中重復(fù)次數(shù)大于指定閾值的數(shù)據(jù)段存儲入所述第一數(shù)據(jù)庫。
所述方法還包括,將第一數(shù)據(jù)庫中被引用次數(shù)小于指定閾值的數(shù)據(jù)段移動到所述第二數(shù)據(jù)庫。
本發(fā)明通過在預(yù)設(shè)長度的窗口中隨機(jī)選取一個數(shù)據(jù)段,以及用所述數(shù)據(jù)段到數(shù)據(jù)庫中匹配相應(yīng)記錄的方式,可以避免數(shù)據(jù)段找到以前進(jìn)行的大量重復(fù)的比較運(yùn)算,尤其是,采用散列值查找的方式,以及窗口的動態(tài)調(diào)整移動步長,更能夠快速在數(shù)據(jù)庫中定位所述數(shù)據(jù)段以及提高數(shù)據(jù)流的分割速度,與現(xiàn)有的方法相比,具有更高的數(shù)據(jù)分割效率。
圖1是本發(fā)明所述方法的第一個實(shí)施例流程圖;圖2是圖1所述實(shí)施例采用的數(shù)據(jù)庫示例圖;圖3是本發(fā)明所述方法的第二個實(shí)施例流程圖;圖4是本發(fā)明所述方法的第三個實(shí)施例流程圖;圖5本發(fā)明所述實(shí)施例采用的隨機(jī)選取數(shù)據(jù)段的實(shí)施例流程圖;圖6(1)是本發(fā)明實(shí)施例采用的窗口初始狀態(tài)示意圖;圖6(2)是本發(fā)明實(shí)施例采用的窗口移動后的狀態(tài)示意圖;圖7是本發(fā)明所述裝置的第一個實(shí)施例框圖;圖8是本發(fā)明所述裝置的第二個實(shí)施例框圖。
具體實(shí)施方式圖1是本發(fā)明所述方法的第一個實(shí)施例流程圖。圖1所示實(shí)施例應(yīng)用于具有引用標(biāo)簽和與之綁定的數(shù)據(jù)段的多個記錄,同時,為了方便數(shù)據(jù)庫內(nèi)容的檢索,所述數(shù)據(jù)庫還有散列值或其它有利于檢索數(shù)據(jù)庫的字段及其對應(yīng)的數(shù)據(jù),這些數(shù)據(jù)也與引用標(biāo)簽和數(shù)據(jù)段綁定在一起。所述數(shù)據(jù)庫的例子參考圖2。
按照圖1的指示,由于數(shù)據(jù)流是一個已經(jīng)取出的長度確定且長度較大的字符串,或者是一個正在動態(tài)輸入的數(shù)據(jù)流,使得直接處理數(shù)據(jù)流變得比較困難,而實(shí)際中長度確定但長度值較小的數(shù)據(jù)段更容易處理。因此,首先要預(yù)先設(shè)定一個用于從數(shù)據(jù)流中選擇部分?jǐn)?shù)據(jù)的窗口,所述窗口的長度要滿足一定的要求,例如要大于需要選擇的最大長度的數(shù)據(jù)段,且要有一定的數(shù)據(jù)冗余,因此,窗口的長度要預(yù)先確定。例如,如果圖2所述數(shù)據(jù)庫的數(shù)據(jù)內(nèi)容的字段長度為8K字節(jié),則窗口的長度要大于8K字節(jié),例如16K字節(jié)。
其次,在步驟11用一個所述預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流中選取部分?jǐn)?shù)據(jù)。最好是用一個所述預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流的當(dāng)前起點(diǎn),連續(xù)選取部分待編碼的數(shù)據(jù)。對于第一次選擇數(shù)據(jù),所述當(dāng)前起點(diǎn)就是數(shù)據(jù)流的起點(diǎn)。而在本發(fā)明另外的實(shí)施例中,只要求順序、連續(xù)選擇,對起點(diǎn)沒有要求,可以向后跨越一個偏移量。
所述窗口內(nèi)的數(shù)據(jù)確定后,就可以從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取一個數(shù)據(jù)段(步驟12)。所述隨機(jī)選取,是指從窗口內(nèi)的數(shù)據(jù)中盡可能選擇一個數(shù)據(jù)段能夠與數(shù)據(jù)庫中的數(shù)據(jù)段匹配,這個數(shù)據(jù)段如果存在,則該數(shù)據(jù)段在窗口中的位置就難以是固定的,具有隨機(jī)的成分,這導(dǎo)致數(shù)據(jù)段的選擇是隨機(jī)的。
如果找到了所述數(shù)據(jù)段,就可以到數(shù)據(jù)庫中匹配,看是否為可以用引用標(biāo)簽代替的高重復(fù)概率數(shù)據(jù)段。然而如果按照通常的順序查找的匹配方式,需要數(shù)據(jù)段字符串直接到數(shù)據(jù)庫中與每一個記錄中的數(shù)據(jù)段字符串精確比較,消耗的計(jì)算資源較多,速度慢,因此需要選擇一種快速的匹配方式,例如,折半查找的匹配方式。在本實(shí)施例中,利用數(shù)據(jù)庫中的散列值字段,實(shí)現(xiàn)快速匹配。因此,要在步驟13計(jì)算所述所述數(shù)據(jù)段的散列值,用所述散列值到數(shù)據(jù)庫中進(jìn)行記錄的匹配。
接著在步驟14判斷所述匹配是否成功,如果沒有匹配成功,可以認(rèn)為所述數(shù)據(jù)段不是高重復(fù)概率數(shù)據(jù)段,應(yīng)當(dāng)移動窗口繼續(xù)查找,因此在步驟16將所述窗口向數(shù)據(jù)流的后部方向移動一個指定的偏移量后返回步驟12繼續(xù)選擇數(shù)據(jù)段。所述偏移量也是一個預(yù)定的長度,最好等于1,使所述窗口向后移動1個數(shù)據(jù)單位,例如1個字節(jié),這樣就會實(shí)現(xiàn)數(shù)據(jù)流的不間斷匹配查找。在本發(fā)明的另外實(shí)施例中,為了提高數(shù)據(jù)流的處理速度,使所述窗口向后移動的偏移舉例大于1個數(shù)據(jù)單位,例如使所述窗口向后移動5個字節(jié)。
如果在步驟14匹配成功,說明所述數(shù)據(jù)段就是高重復(fù)概率數(shù)據(jù)段,可以在數(shù)據(jù)傳輸時用引用標(biāo)簽代替。因此要在步驟15以所述數(shù)據(jù)段在窗口中的位置為依據(jù)確定數(shù)據(jù)分割點(diǎn),還可以進(jìn)一步為后續(xù)的數(shù)據(jù)傳輸做一些必要的準(zhǔn)備,例如,將所述分割點(diǎn)用另外一個數(shù)據(jù)表存儲起來,或者用數(shù)據(jù)庫中的相應(yīng)的引用標(biāo)簽標(biāo)識所述數(shù)據(jù)段,然后直接存儲所述標(biāo)簽,從而形成一個按順序存儲標(biāo)簽和剩余數(shù)據(jù)的數(shù)據(jù)表,所述標(biāo)簽也可能是更高級的標(biāo)簽。然后在步驟17將所述窗口順序向后移動相應(yīng)的長度,所述相應(yīng)的長度為數(shù)據(jù)段的長度或大于數(shù)據(jù)段的長度。所述窗口移動的長度可以靈活決定,窗口向后移動的長度可以大于或等于數(shù)據(jù)段的長度,但小于可能引起數(shù)據(jù)段的重復(fù)從而導(dǎo)致數(shù)據(jù)傳輸?shù)幕靵y或失敗。最好所述相應(yīng)的長度等于數(shù)據(jù)段的長度,這樣作是為了避免遺漏作為判斷起點(diǎn)的字符。但是,當(dāng)一個字符串被分割出來,后續(xù)的字符構(gòu)成的字符串重復(fù)的概率可能較小,此時,所述窗口后移的長度大一些,不但不會影響高概率字符串的查找,還會提高查找的速度。
經(jīng)過步驟16或步驟17后,都要在步驟18判斷整個數(shù)據(jù)流的分割是否完畢,如果完畢,在步驟19結(jié)束數(shù)據(jù)分割操作,否則都要返回到步驟12繼續(xù)數(shù)據(jù)段的查找和分割。步驟18可以有多種方式實(shí)現(xiàn),例如,當(dāng)所述窗口向后移動后超出了數(shù)據(jù)流的范圍就可以確定數(shù)據(jù)流分割完畢。
在一個極限的例子中,所述引用標(biāo)簽和散列值用一個值表示。
需要說明的是,在圖1所示的例子中,可能有多個記錄具有相同的散列值,如果選擇到多個具有相同散列值的數(shù)據(jù)段,還要精確匹配才能確定準(zhǔn)確的記錄。
在本發(fā)明的另一個實(shí)施例中,對從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取的數(shù)據(jù)段的長度是有一定要求的,要求其大于一個預(yù)定的長度值。因此該實(shí)施例在步驟12、13之間增加一個判斷步驟,判斷所述隨機(jī)選取的數(shù)據(jù)段的長度是否大于預(yù)定的長度,如果大于,轉(zhuǎn)步驟13進(jìn)行后續(xù)操作,否則轉(zhuǎn)到步驟16此向后移動所述窗口后重新查找新的符合條件的數(shù)據(jù)段。
主要考慮的數(shù)據(jù)分割的效率而要求一個數(shù)據(jù)段大于一個指定值。一個數(shù)據(jù)段的壓縮效率可以用引用標(biāo)簽的長度除以被替代的數(shù)據(jù)段的長度得到的比值標(biāo)識,該值越小,壓縮率越大。當(dāng)選取的數(shù)據(jù)段長度太短時,會增大該比值,從而降低數(shù)據(jù)段的壓縮率,因此,需要設(shè)置一個具體的長度值,即第一預(yù)定長度,用于控制數(shù)據(jù)段的壓縮效率。這種思想在設(shè)置圖2所示數(shù)據(jù)庫的數(shù)據(jù)內(nèi)容字段時也同樣有所應(yīng)用。例如,考慮了數(shù)據(jù)的壓縮率,數(shù)據(jù)庫中往往盡可能存儲較長位數(shù)的重復(fù)數(shù)據(jù)。
圖3是本發(fā)明所述方法的第二個實(shí)施例流程圖。圖3所述實(shí)施例與圖1所述實(shí)施例的區(qū)別是在步驟14和步驟16之間增加了判斷步驟1A和步驟1B。其中,在經(jīng)過步驟13判斷數(shù)據(jù)段匹配不成功時,可能不能說明該數(shù)據(jù)段的重復(fù)概率。數(shù)據(jù)段重復(fù)概率的大小,是由客觀的標(biāo)準(zhǔn)提供判斷依據(jù)的,如果一個重復(fù)概率較高的字符串沒有被預(yù)先存儲入所述數(shù)據(jù)庫,找到并將其補(bǔ)充存儲入所述數(shù)據(jù)庫,能夠提高系統(tǒng)數(shù)據(jù)壓縮的效率。判斷一個字符串是否具有較高的重復(fù)概率有兩個標(biāo)準(zhǔn),一是符合某種來自實(shí)際的判斷準(zhǔn)則,例如一種統(tǒng)計(jì)概率,另一個是在當(dāng)前傳輸?shù)臄?shù)據(jù)流中出現(xiàn)的高重復(fù)概率的數(shù)據(jù);尤其當(dāng)在數(shù)據(jù)流中出現(xiàn)的最長的重復(fù)字符串且符合所述判斷準(zhǔn)則,更具有較高的重復(fù)概率。
在經(jīng)過步驟13判斷數(shù)據(jù)段匹配不成功時,在步驟1A判斷所述數(shù)據(jù)段中的字符串是否為高概率重復(fù)字符串,如果是,在步驟1B為該字符串分配引用標(biāo)簽,計(jì)算所述字符串的散列值,將所述散列值與所述引用標(biāo)簽、字符串綁定后存儲入所述數(shù)據(jù)庫;否則直接進(jìn)入步驟16。
步驟1A、1B使本實(shí)施例具有了學(xué)習(xí)的功能,還需要設(shè)置在步驟13和步驟1A之間的步驟S1(圖中未繪出),更有利于數(shù)據(jù)的分割。在本實(shí)施例中,對于每一個從窗口中隨機(jī)找到的字符串,首先將其存儲在內(nèi)存中,并為其設(shè)置一個記錄重復(fù)次數(shù)的計(jì)數(shù)器,內(nèi)存中存儲有許多這樣的數(shù)據(jù)段和對應(yīng)的計(jì)數(shù)器。當(dāng)在經(jīng)過步驟13判斷數(shù)據(jù)段匹配不成功時,首先在內(nèi)存中與這些數(shù)據(jù)段進(jìn)行匹配,如果匹配成功,未相應(yīng)的數(shù)據(jù)段的計(jì)數(shù)器增加1個單位,然后再在步驟1A通過所述計(jì)數(shù)器的值對該數(shù)據(jù)段是否高重復(fù)概率進(jìn)行判斷;如果匹配不成功,僅在內(nèi)存中存儲這些數(shù)據(jù)段,并為其分配計(jì)數(shù)器,所述計(jì)數(shù)器可以用存儲單元或寄存器實(shí)現(xiàn)。
更具體地說,可以在一個內(nèi)存的數(shù)據(jù)表中的一個數(shù)據(jù)域中存儲上述數(shù)據(jù)段,在另一個數(shù)據(jù)域中存儲重復(fù)次數(shù)的計(jì)數(shù)值,每一個記錄中的數(shù)據(jù)段都有一個重復(fù)的次數(shù)與其對應(yīng),比如一個數(shù)據(jù)段的字符串“abccdecc”(實(shí)際中字符串會長很多)在學(xué)習(xí)的過程中重復(fù)了30次(假設(shè)的閾值),那么就認(rèn)為它是一個重復(fù)概率較高的熱數(shù)據(jù),用一個指紋函數(shù)F(X)為其生成標(biāo)簽,存入數(shù)據(jù)庫中,作為匹配時的標(biāo)本如果abccdecc的重復(fù)次數(shù)少于30次則認(rèn)為它是冷數(shù)據(jù)不生成標(biāo)簽,仍然存儲在原來的數(shù)據(jù)表中(也可以稱為備用數(shù)據(jù)表或備用數(shù)據(jù)庫),當(dāng)冷數(shù)據(jù)達(dá)到一定的條件,也就是說單位時間內(nèi)達(dá)到閾值成為熱數(shù)據(jù)才會為其生成標(biāo)簽寫入熱數(shù)據(jù)庫。在實(shí)際匹配時,可以將熱數(shù)據(jù)組成的數(shù)據(jù)庫加載到內(nèi)存使用,而冷數(shù)據(jù)是放在硬盤上備用(在內(nèi)存資源不足時使用)。之所以這樣處理是為了在使用時達(dá)到比較好的性能,把常用的數(shù)據(jù)放在內(nèi)存中,不常用的放在硬盤上,可以最大限度地利用內(nèi)存進(jìn)行數(shù)據(jù)段的匹配操作,因此能夠提高系統(tǒng)整體的性能。但是數(shù)據(jù)的熱和冷是不斷變化的,通過自動調(diào)整熱數(shù)據(jù)庫(存儲引用標(biāo)簽、數(shù)據(jù)段和其散列值大數(shù)據(jù)庫,例如圖2)中的數(shù)據(jù),使得熱數(shù)據(jù)庫中的數(shù)據(jù)利用率更高。將備用數(shù)據(jù)庫中重復(fù)次數(shù)大于指定閾值的數(shù)據(jù)段存儲入所述熱數(shù)據(jù)庫。以及,將熱數(shù)據(jù)庫中被引用次數(shù)小于指定閾值的數(shù)據(jù)段移動到所述第二數(shù)據(jù)庫(包括刪除熱數(shù)據(jù)庫中的相應(yīng)數(shù)據(jù)段的記錄的操作)。由于這種實(shí)現(xiàn)及其簡單,在此不再贅述。
需要說明,在本發(fā)明的另一個實(shí)施例中,步驟S1可以在步驟1A、1B的后面,步驟16的前面。
圖4是本發(fā)明所述方法的第三個實(shí)施例流程圖。圖4所述實(shí)施例與圖1所述實(shí)施例的區(qū)別是在步驟14和步驟16之間增加了判斷步驟2A和步驟2B。
其中,在經(jīng)過步驟13判斷數(shù)據(jù)段匹配不成功時,可能不能說明在所述窗口中不存在重復(fù)概率較高的數(shù)據(jù)段,可能由于起點(diǎn)字符的選擇不當(dāng)而導(dǎo)致。因此,在步驟2A調(diào)整窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)。實(shí)際可以通過當(dāng)前數(shù)據(jù)的起點(diǎn)從原起點(diǎn)向后移動一個或若干個字符實(shí)現(xiàn)。然后在步驟2B判斷所述窗口的調(diào)整是否滿足設(shè)定的條件,如果滿足條件,轉(zhuǎn)步驟12繼續(xù)數(shù)據(jù)段的隨機(jī)選擇操作。所述條件以從窗口當(dāng)前字符到窗口結(jié)束的字符數(shù)量大于一定的長度,以及不影響數(shù)據(jù)段的查找為標(biāo)準(zhǔn),例如,如果圖2所述數(shù)據(jù)庫的數(shù)據(jù)內(nèi)容的字段長度為8K字節(jié),則窗口內(nèi)從當(dāng)前字符到窗口結(jié)束的字符數(shù)量要大于8K字節(jié),例如10K字節(jié)。如果不滿足條件,轉(zhuǎn)步驟16完成窗口后移動預(yù)定長度的調(diào)整操作。
對步驟2A調(diào)整窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)的理解可以參考圖6(1)和圖6(2)。圖6(1)所示,一個數(shù)據(jù)流被串口分為三個部分,分別為部分61、62、63,在窗口內(nèi),選擇的數(shù)據(jù)段的起點(diǎn)為字符64,終點(diǎn)為字符65。圖6(2)示例當(dāng)前數(shù)據(jù)起點(diǎn)向后移動了一個字符,即選擇的數(shù)據(jù)段的起點(diǎn)字符64,終點(diǎn)字符65都向后移動了一個字符。
圖5本發(fā)明所述實(shí)施例采用的隨機(jī)選取數(shù)據(jù)段的實(shí)施例流程圖。按照圖5,首先在步驟51從窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),并記錄掃描到的特定字符的個數(shù);對于一個新窗口,即剛移動完畢的窗口,當(dāng)前起點(diǎn)為第一個字符的位置;所述特定字符,是為了隨機(jī)選擇一個數(shù)據(jù)段,而在所傳送的數(shù)據(jù)流中隨機(jī)選擇的一個字符,例如,在一個由ASCII碼組成的數(shù)據(jù)流中選擇字符A作為特定的字符。記錄掃描到的特定字符的個數(shù)可以隨機(jī)選擇到一個數(shù)據(jù)段。如前所述,這個隨機(jī)選擇的數(shù)據(jù)段的長度要大于一個預(yù)定的長度,這首先要求掃描到的特定字符的個數(shù)要大于和等于一個設(shè)定的長度,才能保證隨機(jī)選擇的數(shù)據(jù)段的長度滿足要求。因此在步驟52,判斷所述預(yù)定字符的個數(shù)值是否大于或等于所述一個預(yù)定的長度閾值,如果大于或等于,在所述窗口中掃描到的連續(xù)字符構(gòu)成的字符串就可以在步驟53作為分割得到的數(shù)據(jù)段;否則要回到步驟51繼續(xù)特定字符的掃描。
在本發(fā)明的另一個實(shí)施例中,步驟51采用下述步驟實(shí)現(xiàn)從窗口內(nèi)的數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),查找所述窗口后部緊鄰所述窗口的連續(xù)的最長字符串并記錄所述字符串,在步驟52,判斷所述預(yù)定字符串長度是否大于或等于所述一個預(yù)定的長度閾值,如果大于或等于,在所述窗口中掃描到的字符串就可以在步驟5 3作為分割得到的數(shù)據(jù)段。
步驟51的具體實(shí)現(xiàn)可以參考下述描述。在本實(shí)施例中,需要借助一個預(yù)讀緩沖器,對應(yīng)的窗口為動態(tài)窗口,是個歷史緩沖器。一個動態(tài)窗口的數(shù)據(jù)范圍可以根據(jù)實(shí)際需要調(diào)整。先用窗口從數(shù)據(jù)流的開始取出一串?dāng)?shù)據(jù),預(yù)讀緩沖器是與動態(tài)窗口相對應(yīng)的,它被用來存放數(shù)據(jù)流的前n個字節(jié),預(yù)讀緩沖器的大小n也可以根據(jù)需要動態(tài)調(diào)整,例如256字節(jié)。若能后用窗口后面的n個字節(jié)填充預(yù)讀緩存器,再在動態(tài)窗口中尋找與預(yù)讀緩沖器中的最匹配的數(shù)據(jù),如果匹配的數(shù)據(jù)長度大于最小匹配長度(通常取決于編碼器,以及動態(tài)窗口的大小,比如一個4K的動態(tài)窗口,它的最小匹配長度就是2),那么就輸出一對<長度(length),距離(distance)>數(shù)組。長度(length)是匹配的數(shù)據(jù)長度,而距離(distance)說明了在輸入流中向后多少字節(jié)這個匹配數(shù)據(jù)可以被找到。
例如假設(shè)一個10個字節(jié)的動態(tài)窗口,以及一個5個字節(jié)的預(yù)讀緩沖器,要傳輸?shù)臄?shù)據(jù)流為AAAAAAAAAAABABAAAAA,假設(shè)數(shù)據(jù)流的方向是從左到右。則動態(tài)窗口、預(yù)讀緩存器中的內(nèi)容分別為動態(tài)窗口中包含10個A,這就是數(shù)據(jù)流左側(cè)(前面)讀取的10個字節(jié)。預(yù)讀緩沖器包含了BABAA,即窗口后面的字符。
第一步,尋找動態(tài)窗口與預(yù)讀緩存器相似長度大于2的字節(jié)部分。在動態(tài)窗口中找不到BABAA,所以B就被按照字面輸出。然后動態(tài)窗口向后滑過1個字節(jié),現(xiàn)在暫時輸出了一個B。(此時動態(tài)窗口中的內(nèi)容為“AAAAAAAAAB”,預(yù)讀緩沖器的內(nèi)容“ABAAA”(此時預(yù)讀緩沖器中最左側(cè)的B輸出了,而在最右側(cè)又讀了一個字符A)。
第二步,用預(yù)讀緩存器中的內(nèi)容再和動態(tài)窗口中的內(nèi)容進(jìn)行比較。這時,在動態(tài)窗口找到了相似長度為2的AB,因此一對<長度,距離>就被輸出了。長度(length)是2并且向后距離也是2,所以輸出為<2,2>,這里的距離是從窗口最右側(cè)字符起計(jì)算的距離,然后動態(tài)窗口向后(右)滑過2個字節(jié)(2個字符)。
現(xiàn)在已經(jīng)輸出了B<2,2>。此時動態(tài)窗口中為“AAAAAAABAB”?而預(yù)讀緩沖器中為“AAAAA”。
第三步繼續(xù)上面的方法得到輸出結(jié)果<5,8>,因?yàn)榫嚯x指的是這個字符串距離動態(tài)窗口最右邊的距離也就是從右邊數(shù)AAAAABAB然后取前五位就是AAAAA了,所以是<5,8>?,F(xiàn)在已經(jīng)輸出了B<2,2><5,8>。
最終的數(shù)據(jù)段查找結(jié)果是AAAAAAAAAAB<2,2><5,8>,這些數(shù)據(jù)可以利用一個數(shù)據(jù)表管理起來,以便進(jìn)行數(shù)據(jù)的編碼操作。其中,根據(jù)數(shù)組<2,2>、<5,8>,就能夠以初始窗口的數(shù)據(jù)為基礎(chǔ),得到的數(shù)據(jù)分割點(diǎn)和分割出的具體數(shù)據(jù)段。
在上述過程中,每得到一個數(shù)據(jù)段,即是確定了一個分割出的數(shù)據(jù)段,都要進(jìn)行圖1實(shí)施例的步驟13、14等,用于查找引用標(biāo)簽。當(dāng)檢查到AB重復(fù)時如果判斷為不經(jīng)常出現(xiàn)則依然以AB的形式輸出,同時存入備用數(shù)據(jù)庫中。當(dāng)檢查到AAAAA在熱數(shù)據(jù)庫中存在,則用F(AAAAA)這個標(biāo)簽來替代AAAAA。
可以通過散列值定位,在數(shù)據(jù)庫中檢查F(AAAAA)是否存在,如果存在則輸出F(AAAAA),如果不存在,但如果其在備用數(shù)據(jù)庫中,并且認(rèn)為其重復(fù)率達(dá)到了指標(biāo)(大于或等于制定的閾值),則將其移動到熱數(shù)據(jù)庫中。即,如果指紋函數(shù)F(AAAAA)得到的值F(X)在熱數(shù)據(jù)庫中無記載,而從學(xué)習(xí)時判斷得知AAAAA重復(fù)的概率很大,則將F(X)和AAAAA綁定后存儲入所述熱數(shù)據(jù)庫。所以AAAAAAAAAAABABAAAAA為例的字符串的壓縮之后的編碼是AAAAAAAAAAABABF(AAAAA)。
如前所述的方法實(shí)際上描述了內(nèi)容引導(dǎo)分割的方案,例如,從窗口內(nèi)的數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),查找所述窗口后部緊鄰所述窗口的連續(xù)的最長字符串并記錄所述字符串,實(shí)際上就是一種內(nèi)容引導(dǎo)分割的方法,這種方法的特點(diǎn)是隨著數(shù)據(jù)流的輸入而不斷完成數(shù)據(jù)分割的操作,在數(shù)據(jù)流輸入完畢后,數(shù)據(jù)流的分割點(diǎn)就已經(jīng)確定,不需要數(shù)據(jù)全部輸入就可以啟動數(shù)據(jù)段的分割操作。這里所述的動態(tài)窗口、預(yù)讀緩存器,以及計(jì)算查找重復(fù)數(shù)據(jù)段的指紋函數(shù)F(X)共同作用完成數(shù)據(jù)段的分割。一個確定的指紋函數(shù)還可以引發(fā)返回一個邏輯值,標(biāo)識是否在熱數(shù)據(jù)庫中找到一個高重復(fù)概率的數(shù)據(jù)段,根據(jù)該值以及動態(tài)窗口可以用來確定一個可以分割的數(shù)據(jù)段的邊界,這個所述的邊界的序列,就是利用一個指紋函數(shù),在輸入數(shù)據(jù)流上確定的一系列的分割點(diǎn),利用所述分割點(diǎn)就可以得到分割的數(shù)據(jù)段和長度。例如,如果指紋函數(shù)以及具備一個給定的偏移量的數(shù)據(jù)及其長度,加上動態(tài)窗口以及一個確定的指紋值時,例如該指紋函數(shù)的值為1時,就可以確定一個分割出的數(shù)據(jù)段。
很多時候,窗口的大小即偏移量并不總能處于理想狀態(tài),因此,可能經(jīng)常調(diào)整窗口的偏移量和大小,即動態(tài)確定窗口的大小和位置,這樣也會消耗一些數(shù)據(jù),形成剩余數(shù)據(jù),但是這樣的收益是可能獲得更多或更長的重復(fù)數(shù)據(jù)段。
圖7是本發(fā)明所述裝置的第一個實(shí)施例框圖;圖7所示數(shù)據(jù)分割裝置,包括存儲數(shù)據(jù)段和與其綁定的引用標(biāo)簽的第一數(shù)據(jù)庫75,以及一個用于存儲數(shù)據(jù)分割結(jié)果的第二數(shù)據(jù)庫74,還包括一個數(shù)據(jù)段選擇單元71,它用一個預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流中選取部分待編碼的數(shù)據(jù),并且,所述單元71還用于從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取一個數(shù)據(jù)段;還包括一個數(shù)據(jù)段匹配單元72,用所述數(shù)據(jù)段選擇單元提供的數(shù)據(jù)段到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄;還包括一個窗口移動單元,用于將所述窗口順序向后移動相應(yīng)的長度,或者,將所述窗口順序向后移動第二預(yù)定長度。
輸入分?jǐn)?shù)據(jù)流或者一段從輸入緩沖區(qū)中取出的數(shù)據(jù),順序流入數(shù)據(jù)段選擇單元71,所述單元7 1用一個所述預(yù)設(shè)長度的窗口從流入的待編碼的數(shù)據(jù)流中選取部分?jǐn)?shù)據(jù),待所述窗口內(nèi)的數(shù)據(jù)確定后,就從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取一個數(shù)據(jù)段用于到所述第一數(shù)據(jù)庫中去比較,以找到對應(yīng)的引用標(biāo)簽。所述數(shù)據(jù)段選擇單元71從窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的特定字符的個數(shù),如果所述預(yù)定字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
所述數(shù)據(jù)段選擇單元71還可以這樣選擇數(shù)據(jù)段從窗口內(nèi)的數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),查找所述窗口后部緊鄰所述窗口的連續(xù)的最長字符串并記錄所述字符串,如果所述字符串的字符個數(shù)值大于所述第一預(yù)定長度值,將掃描到的字符串作為分割的數(shù)據(jù)段。
前面所述字符串就是找到的數(shù)據(jù)段,如果找到了所述數(shù)據(jù)段,將該數(shù)據(jù)段交給數(shù)據(jù)段匹配單元72,由單元72到第一數(shù)據(jù)庫75中匹配,更具體地說,所述數(shù)據(jù)段匹配單元72通過計(jì)算所述數(shù)據(jù)段的散列值,用所述散列值到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄,看該數(shù)據(jù)段是否為可以用引用標(biāo)簽代替的高重復(fù)概率數(shù)據(jù)段。因此單元72判斷所述匹配是否成功,如果沒有匹配成功,可以認(rèn)為所述數(shù)據(jù)段不是高重復(fù)概率數(shù)據(jù)段,應(yīng)當(dāng)移動窗口繼續(xù)查找,因此指示窗口移動單元73將所述窗口向數(shù)據(jù)流的后部方向移動一個指定的偏移量后繼續(xù)選擇數(shù)據(jù)段。所述偏移量也是一個預(yù)定的長度,最好等于1,使所述窗口向后移動1個數(shù)據(jù)單位,例如1個字節(jié),這樣就會實(shí)現(xiàn)數(shù)據(jù)流的不間斷匹配查找。在本發(fā)明的另外實(shí)施例中,為了提高數(shù)據(jù)流的處理速度,使所述窗口向后移動的偏移舉例大于1個數(shù)據(jù)單位,例如使所述窗口向后移動5個字節(jié)。
如果單元72的匹配成功,說明所述數(shù)據(jù)段就是高重復(fù)概率數(shù)據(jù)段,可以在數(shù)據(jù)傳輸時用引用標(biāo)簽代替。因此以所述數(shù)據(jù)段在窗口中的位置為依據(jù)確定數(shù)據(jù)分割點(diǎn),還可以進(jìn)一步為后續(xù)的數(shù)據(jù)傳輸做一些必要的準(zhǔn)備,例如,將所述分割點(diǎn)存儲在第二數(shù)據(jù)庫74中,或者用數(shù)據(jù)庫中的相應(yīng)的引用標(biāo)簽標(biāo)識所述數(shù)據(jù)段,然后直接存儲所述標(biāo)簽在第二數(shù)據(jù)庫74中,從而形成一個按順序存儲標(biāo)簽和剩余數(shù)據(jù)的數(shù)據(jù)表,所述標(biāo)簽也可能是更高級的標(biāo)簽。
然后指示窗口移動單元73將所述窗口順序向后移動相應(yīng)的長度,所述相應(yīng)的長度為數(shù)據(jù)段的長度或大于數(shù)據(jù)段的長度。所述窗口移動的長度可以靈活決定,窗口向后移動的長度可以大于或等于數(shù)據(jù)段的長度,但小于可能引起數(shù)據(jù)段的重復(fù)從而導(dǎo)致數(shù)據(jù)傳輸?shù)幕靵y或失敗。最好所述相應(yīng)的長度等于數(shù)據(jù)段的長度,這樣作是為了避免遺漏作為判斷起點(diǎn)的字符。
圖8是本發(fā)明所述裝置的第二個實(shí)施例框圖。圖8所示裝置在圖7的基礎(chǔ)上增加了第一處理單元78,所述單元78用于當(dāng)用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功時,判斷所述數(shù)據(jù)段是否為高概率重復(fù)字符串,如果是,為該字符串分配引用標(biāo)簽,計(jì)算所述字符串的散列值,將所述散列值與所述引用標(biāo)簽、字符串綁定后存儲入所述第一數(shù)據(jù)庫75。
圖8所示裝置還包括第三數(shù)據(jù)庫76,用于存儲重復(fù)概率較低的數(shù)據(jù)段和其重復(fù)次數(shù)。所述第三數(shù)據(jù)庫就是前文所說的冷數(shù)據(jù)庫。還包括第二處理單元77,用于將第三數(shù)據(jù)庫中重復(fù)次數(shù)大于指定閾值的數(shù)據(jù)段存儲入所述第一數(shù)據(jù)庫,以及,將第一數(shù)據(jù)庫中被引用次數(shù)小于指定閾值的數(shù)據(jù)段移動到所述第三數(shù)據(jù)庫。
在本發(fā)明的其它實(shí)施例中,在圖7所示裝置基礎(chǔ)上,增加第一處理單元78,就可以使所述裝置增加學(xué)習(xí)功能;增加第三數(shù)據(jù)庫76,可以輔助學(xué)習(xí)功能使之進(jìn)一步改善;而增加第二處理單元77,則會使學(xué)習(xí)功能效果最佳。從而,在所述第一數(shù)據(jù)庫75的內(nèi)容較少時,本發(fā)明也能很好地工作,具有較佳的性能。
本發(fā)明還提供一種數(shù)據(jù)分割方法,這種數(shù)據(jù)分割方法是在預(yù)先已經(jīng)有第一數(shù)據(jù)庫存在,且該數(shù)據(jù)庫的內(nèi)容不變時采用的一種方案,該方法的具體實(shí)施例包括從待編碼的數(shù)據(jù)流中順序選取部分待編碼的數(shù)據(jù)作為一個數(shù)據(jù)段,所述數(shù)據(jù)段大于第一預(yù)定長度;用所述數(shù)據(jù)段到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄,如果匹配成功,確定數(shù)據(jù)分割點(diǎn),將所述窗口順序向后移動相應(yīng)的長度;否則,將所述窗口順序向后移動第二預(yù)定長度。在本實(shí)施例中,還可以具體采用下述的方案。
例如,從待編碼的數(shù)據(jù)流的起點(diǎn)連續(xù)選取待編碼的數(shù)據(jù)。
更具體地說,可以按照下述步驟選取大于第一預(yù)定長度的數(shù)據(jù)段從當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的特定字符的個數(shù);如果所述預(yù)定字符的個數(shù)值失于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
或者,按照下述步驟選取大于第一預(yù)定長度的數(shù)據(jù)段從當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的連續(xù)字符的個數(shù);如果所述連續(xù)字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
所述實(shí)施例還可以包括,計(jì)算所述數(shù)據(jù)段的散列值,以及,用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄。
而且,所述相應(yīng)的長度為數(shù)據(jù)段的長度或大于數(shù)據(jù)段的長度。所述第二預(yù)定長度等于1或大于1。
所述實(shí)施例還包括,當(dāng)用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功時,判斷所述數(shù)據(jù)段是否為高概率重復(fù)字符串,如果是,為該字符串分配引用標(biāo)簽,計(jì)算所述字符串的散列值,將所述散列值與所述引用標(biāo)簽、字符串綁定后存儲入所述數(shù)據(jù)庫。
當(dāng)用所述數(shù)據(jù)段到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功,調(diào)整窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)后繼續(xù)隨機(jī)選取數(shù)據(jù)段,直到所述窗口的調(diào)整不滿足設(shè)定的條件時,將所述窗口順序向后移動第二預(yù)定長度。
所述實(shí)施例還包括,設(shè)置一個第二數(shù)據(jù)庫作為備用數(shù)據(jù)庫,用于存儲重復(fù)概率較低的數(shù)據(jù)段和其重復(fù)次數(shù),以及,將第二數(shù)據(jù)庫中重復(fù)次數(shù)大于指定閾值的數(shù)據(jù)段存儲入所述第一數(shù)據(jù)庫。
以及還包括,將第一數(shù)據(jù)庫中被引用次數(shù)小于指定閾值的數(shù)據(jù)段移動到所述第二數(shù)據(jù)庫。
由于本實(shí)施例的具體實(shí)施細(xì)節(jié)在前文已經(jīng)有詳細(xì)的表述,在此不再詳述。
權(quán)利要求
1.一種數(shù)據(jù)分割方法,其特征在于包括用一個預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流中選取部分待編碼的數(shù)據(jù);從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取一個數(shù)據(jù)段;用所述數(shù)據(jù)段到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄,如果匹配成功,確定數(shù)據(jù)分割點(diǎn),將所述窗口順序向后移動相應(yīng)的長度;否則,將所述窗口順序向后移動第二預(yù)定長度。
2.如權(quán)利要求
1所述的數(shù)據(jù)分割方法,其特征在于,從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取大于第一預(yù)定長度的數(shù)據(jù)段。
3.如權(quán)利要求
2所述的數(shù)據(jù)分割方法,其特征在于,用一個預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流的起點(diǎn)連續(xù)選取待編碼的數(shù)據(jù)。
4.如權(quán)利要求
3所述的數(shù)據(jù)分割方法,其特征在于,按照下述步驟隨機(jī)選取大于第一預(yù)定長度的數(shù)據(jù)段從窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的特定字符的個數(shù);如果所述預(yù)定字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
5.如權(quán)利要求
3所述的數(shù)據(jù)分割方法,其特征在于,按照下述步驟隨機(jī)選取大于第一預(yù)定長度的數(shù)據(jù)段從窗口內(nèi)的數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),查找所述窗口后部緊鄰所述窗口的連續(xù)的最長字符串并記錄所述字符串;如果所述字符串的字符個數(shù)值大于所述第一預(yù)定長度值,將掃描到的字符串作為分割的數(shù)據(jù)段。
6.如權(quán)利要求
1、2、3、4或5所述的數(shù)據(jù)分割方法,其特征在于還包括,計(jì)算所述數(shù)據(jù)段的散列值,以及,用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄。
7.如權(quán)利要求
6所述的數(shù)據(jù)分割方法,其特征在于,所述相應(yīng)的長度為數(shù)據(jù)段的長度或大于數(shù)據(jù)段的長度。
8.如權(quán)利要求
7所述的數(shù)據(jù)分割方法,其特征在于,所述第二預(yù)定長度等于1或大于1。
9.如權(quán)利要求
8所述的數(shù)據(jù)分割方法,其特征在于還包括,當(dāng)用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功時,判斷所述數(shù)據(jù)段是否為高概率重復(fù)字符串,如果是,為該字符串分配引用標(biāo)簽,計(jì)算所述字符串的散列值,將所述散列值與所述引用標(biāo)簽、字符串綁定后存儲入所述數(shù)據(jù)庫。
10.如權(quán)利要求
4所述的數(shù)據(jù)分割方法,其特征在于,當(dāng)用所述數(shù)據(jù)段到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功,調(diào)整窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)后繼續(xù)隨機(jī)選取數(shù)據(jù)段,直到所述窗口的調(diào)整不滿足設(shè)定的條件時,將所述窗口順序向后移動第二預(yù)定長度。
11.如權(quán)利要求
9所述的數(shù)據(jù)分割方法,其特征在于還包括,設(shè)置一個第二數(shù)據(jù)庫作為備用數(shù)據(jù)庫,用于存儲重復(fù)概率較低的數(shù)據(jù)段和其重復(fù)次數(shù),以及,將第二數(shù)據(jù)庫中重復(fù)次數(shù)大于指定閾值的數(shù)據(jù)段存儲入所述第一數(shù)據(jù)庫。
12.如權(quán)利要求
11所述的數(shù)據(jù)分割方法,其特征在于還包括,將第一數(shù)據(jù)庫中被引用次數(shù)小于指定閾值的數(shù)據(jù)段移動到所述第二數(shù)據(jù)庫。
13.一種數(shù)據(jù)分割裝置,包括存儲數(shù)據(jù)段和與其綁定的引用標(biāo)簽的第一數(shù)據(jù)庫,以及一個用于存儲數(shù)據(jù)分割結(jié)果的第二數(shù)據(jù)庫,其特征在于還包括數(shù)據(jù)段選擇單元,用一個預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流中選取部分待編碼的數(shù)據(jù),以及,從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取一個數(shù)據(jù)段;數(shù)據(jù)段匹配單元,用所述數(shù)據(jù)段選擇單元提供的數(shù)據(jù)段到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄;窗口移動單元,用于將所述窗口順序向后移動相應(yīng)的長度,或者,將所述窗口順序向后移動第二預(yù)定長度。
14.如權(quán)利要求
13所述的數(shù)據(jù)分割裝置,其特征在于,所述數(shù)據(jù)段選擇單元從窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的特定字符的個數(shù);如果所述預(yù)定字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
15.如權(quán)利要求
13所述的數(shù)據(jù)分割裝置,其特征在于,所述數(shù)據(jù)段選擇單元從窗口內(nèi)的數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),查找所述窗口后部緊鄰所述窗口的連續(xù)的最長字符串并記錄所述字符串;如果所述字符串的字符個數(shù)值大于所述第一預(yù)定長度值,將掃描到的字符串作為分割的數(shù)據(jù)段。
16.如權(quán)利要求
13、14或15所述的數(shù)據(jù)分割裝置,其特征在于還包括,所述數(shù)據(jù)段匹配單元計(jì)算所述數(shù)據(jù)段的散列值,以及,用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄。
17.如權(quán)利要求
16所述的數(shù)據(jù)分割裝置,其特征在于還包括,第一處理單元,用于當(dāng)用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功時,判斷所述數(shù)據(jù)段是否為高概率重復(fù)字符串,如果是,為該字符串分配引用標(biāo)簽,計(jì)算所述字符串的散列值,將所述散列值與所述引用標(biāo)簽、字符串綁定后存儲入所述數(shù)據(jù)庫。
18.如權(quán)利要求
17所述的數(shù)據(jù)分割裝置,其特征在于還包括,第二數(shù)據(jù)庫,用于存儲重復(fù)概率較低的數(shù)據(jù)段和其重復(fù)次數(shù)。
19.如權(quán)利要求
18所述的數(shù)據(jù)分割裝置,其特征在于還包括,第二處理單元,用于將第二數(shù)據(jù)庫中重復(fù)次數(shù)大于指定閾值的數(shù)據(jù)段存儲入所述第一數(shù)據(jù)庫,以及,將第一數(shù)據(jù)庫中被引用次數(shù)小于指定閾值的數(shù)據(jù)段移動到所述第二數(shù)據(jù)庫。
20.一種數(shù)據(jù)分割方法,其特征在于包括從待編碼的數(shù)據(jù)流中順序選取部分待編碼的數(shù)據(jù)作為一個數(shù)據(jù)段,所述數(shù)據(jù)段大于第一預(yù)定長度;用所述數(shù)據(jù)段到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄,如果匹配成功,確定數(shù)據(jù)分割點(diǎn),將所述窗口順序向后移動相應(yīng)的長度;否則,將所述窗口順序向后移動第二預(yù)定長度。
21.如權(quán)利要求
20所述的數(shù)據(jù)分割方法,其特征在于,從待編碼的數(shù)據(jù)流的起點(diǎn)連續(xù)選取待編碼的數(shù)據(jù)。
22.如權(quán)利要21所述的數(shù)據(jù)分割方法,其特征在于,按照下述步驟選取大于第一預(yù)定長度的數(shù)據(jù)段從當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的特定字符的個數(shù);如果所述預(yù)定字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
23.如權(quán)利要21所述的數(shù)據(jù)分割方法,其特征在于,按照下述步驟選取大于第一預(yù)定長度的數(shù)據(jù)段從當(dāng)前數(shù)據(jù)起點(diǎn)開始連續(xù)掃描數(shù)據(jù),記錄掃描到的連續(xù)字符的個數(shù);如果所述連續(xù)字符的個數(shù)值大于所述第一預(yù)定長度值,將掃描到的連續(xù)字符構(gòu)成的字符串作為分割的數(shù)據(jù)段。
24.如權(quán)利要求
21、22或2 3所述的數(shù)據(jù)分割方法,其特征在于還包括,計(jì)算所述數(shù)據(jù)段的散列值,以及,用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄。
25.如權(quán)利要求
24所述的數(shù)據(jù)分割方法,其特征在于,所述相應(yīng)的長度為數(shù)據(jù)段的長度或大于數(shù)據(jù)段的長度。
26.如權(quán)利要求
25所述的數(shù)據(jù)分割方法,其特征在于,所述第二預(yù)定長度等于1或大于1。
27.如權(quán)利26所述的數(shù)據(jù)分割方法,其特征在于還包括,當(dāng)用所述散列值到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功時,判斷所述數(shù)據(jù)段是否為高概率重復(fù)字符串,如果是,為該字符串分配引用標(biāo)簽,計(jì)算所述字符串的散列值,將所述散列值與所述引用標(biāo)簽、字符串綁定后存儲入所述數(shù)據(jù)庫。
28.如權(quán)利要求
27所述的數(shù)據(jù)分割方法,其特征在于,當(dāng)用所述數(shù)據(jù)段到數(shù)據(jù)庫中匹配相應(yīng)的記錄沒有成功,調(diào)整窗口內(nèi)的當(dāng)前數(shù)據(jù)起點(diǎn)后繼續(xù)隨機(jī)選取數(shù)據(jù)段,直到所述窗口的調(diào)整不滿足設(shè)定的條件時,將所述窗口順序向后移動第二預(yù)定長度。
29.如權(quán)利要求
28所述的數(shù)據(jù)分割方法,其特征在于還包括,設(shè)置一個第二數(shù)據(jù)庫作為備用數(shù)據(jù)庫,用于存儲重復(fù)概率較低的數(shù)據(jù)段和其重復(fù)次數(shù),以及,將第二數(shù)據(jù)庫中重復(fù)次數(shù)大于指定閾值的數(shù)據(jù)段存儲入所述第一數(shù)據(jù)庫。
30.如權(quán)利要求
29所述的數(shù)據(jù)分割方法,其特征在于還包括,將第一數(shù)據(jù)庫中被引用次數(shù)小于指定閾值的數(shù)據(jù)段移動到所述第二數(shù)據(jù)庫。
專利摘要
本發(fā)明提供了一種數(shù)據(jù)分割方法,包括用一個預(yù)設(shè)長度的窗口從待編碼的數(shù)據(jù)流中選取部分待編碼的數(shù)據(jù);從窗口內(nèi)的數(shù)據(jù)中隨機(jī)選取一個數(shù)據(jù)段,或者從待編碼的數(shù)據(jù)流中順序選取部分待編碼的數(shù)據(jù)作為一個數(shù)據(jù)段,所述數(shù)據(jù)段大于第一預(yù)定長度以及,用所述數(shù)據(jù)段到第一數(shù)據(jù)庫中匹配相應(yīng)的記錄,如果匹配成功,確定數(shù)據(jù)分割點(diǎn),將所述窗口順序向后移動相應(yīng)的長度;否則,將所述窗口順序向后移動第二預(yù)定長度。可以避免數(shù)據(jù)段找到以前進(jìn)行的大量重復(fù)的比較運(yùn)算,尤其是采用窗口的動態(tài)調(diào)整移動步長,更能夠快速在數(shù)據(jù)庫中定位所述數(shù)據(jù)段以及提高數(shù)據(jù)流的分割速度,本發(fā)明還提供了一種數(shù)據(jù)分割裝置。
文檔編號H04L29/06GK1997011SQ200610103639
公開日2007年7月11日 申請日期2006年7月26日
發(fā)明者白杰, 李薇, 魯征宇 申請人:白杰, 李薇, 魯征宇導(dǎo)出引文BiBTeX, EndNote, RefMan