本發(fā)明涉及信息處理技術(shù)領(lǐng)域,更具體地說(shuō),涉及一種數(shù)據(jù)存儲(chǔ)方法及存儲(chǔ)設(shè)備。
背景技術(shù):
在數(shù)據(jù)存儲(chǔ)/備份過(guò)程中,對(duì)于內(nèi)容相同的數(shù)據(jù),只保留其中一份進(jìn)行存儲(chǔ),這樣可以提高存儲(chǔ)效率,降低數(shù)據(jù)占用的存儲(chǔ)空間。而為了方便后續(xù)查找,除了存儲(chǔ)數(shù)據(jù),還需要建立索引庫(kù)。
目前,較常用的一種數(shù)據(jù)存儲(chǔ)方法是基于數(shù)據(jù)塊實(shí)現(xiàn)的:假設(shè)需要對(duì)文件a進(jìn)行存儲(chǔ)或備份,則將文件a劃分為若干個(gè)數(shù)據(jù)塊,對(duì)于每一個(gè)數(shù)據(jù)塊,計(jì)算該數(shù)據(jù)塊的指紋,在索引庫(kù)(索引庫(kù)中存儲(chǔ)有文件與指紋的對(duì)應(yīng)關(guān)系,以及指紋與數(shù)據(jù)塊的存儲(chǔ)位置的對(duì)應(yīng)關(guān)系)中查找是否存在與該數(shù)據(jù)塊的指紋相同的指紋,若存在(說(shuō)明該數(shù)據(jù)塊的內(nèi)容已被存儲(chǔ),該數(shù)據(jù)塊不需要再存儲(chǔ)了),則不存儲(chǔ)該數(shù)據(jù)塊,而只在索引庫(kù)中增加文件a與該數(shù)據(jù)塊的指紋的對(duì)應(yīng)關(guān)系;若不存在,則存儲(chǔ)該數(shù)據(jù)塊,并在索引庫(kù)中增加文件a與該數(shù)據(jù)塊的指紋的對(duì)應(yīng)關(guān)系,以及該數(shù)據(jù)塊的指紋與該數(shù)據(jù)塊的存儲(chǔ)位置的對(duì)應(yīng)關(guān)系。
為了達(dá)到更好的存儲(chǔ)效果,在數(shù)據(jù)存儲(chǔ)過(guò)程中,會(huì)綜合使用定長(zhǎng)分塊和變長(zhǎng)分塊兩種分塊方式對(duì)文件進(jìn)行分塊,即部分文件采用定長(zhǎng)分塊方式進(jìn)行切分,部分文件采用變長(zhǎng)分塊方式進(jìn)行切分。采用定長(zhǎng)分塊方式時(shí),得到的數(shù)據(jù)塊的長(zhǎng)度是固定的;采用變長(zhǎng)分塊方式時(shí),得到的數(shù)據(jù)塊的長(zhǎng)度的變動(dòng)的。發(fā)明人研究發(fā)現(xiàn),目前在綜合使用定長(zhǎng)分塊和變長(zhǎng)分塊兩種數(shù)據(jù)分塊方式進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),采用變長(zhǎng)分塊的文件的索引庫(kù)和采用定長(zhǎng)分塊的文件的索引庫(kù)采分別單獨(dú)存儲(chǔ),使得重復(fù)數(shù)據(jù)的刪除概率較低,且后續(xù)進(jìn)行數(shù)據(jù)查找時(shí)的查詢效率較低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的是提供一種數(shù)據(jù)存儲(chǔ)方法及存儲(chǔ)設(shè)備,以提高重復(fù)數(shù)據(jù)的刪除概率和數(shù)據(jù)查找效率。
為實(shí)現(xiàn)上述目的,本發(fā)明提供了如下技術(shù)方案:
一種數(shù)據(jù)存儲(chǔ)方法,包括:
獲取待存儲(chǔ)文件;
將所述待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊;所述若干個(gè)數(shù)據(jù)塊中至少有部分?jǐn)?shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度;
對(duì)于每一個(gè)數(shù)據(jù)塊,若所述數(shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度,基于第一索引庫(kù)判斷是否需存儲(chǔ)所述數(shù)據(jù)塊,基于判斷結(jié)果對(duì)所述數(shù)據(jù)塊進(jìn)行處理并生成與所述數(shù)據(jù)塊對(duì)應(yīng)的第一索引,將所述第一索引存入所述第一索引庫(kù);
若所述數(shù)據(jù)塊的長(zhǎng)度與所述預(yù)設(shè)長(zhǎng)度不同,基于第二索引庫(kù)判斷是否需存儲(chǔ)所述數(shù)據(jù)塊,基于判斷結(jié)果對(duì)所述數(shù)據(jù)塊進(jìn)行處理并生成與所述數(shù)據(jù)塊對(duì)應(yīng)的第二索引,將所述第二索引存入所述第二索引庫(kù)。
優(yōu)選的,所述將所述待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊包括:
采用定長(zhǎng)分塊方式或者變長(zhǎng)分塊方式將所述待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊;
若采用定長(zhǎng)分塊方式,所述若干個(gè)數(shù)據(jù)塊的長(zhǎng)度均為所述預(yù)設(shè)長(zhǎng)度;
若采用變長(zhǎng)分塊方式,所述若干個(gè)數(shù)據(jù)塊中部分?jǐn)?shù)據(jù)塊的長(zhǎng)度為所述預(yù)設(shè)長(zhǎng)度。
優(yōu)選的,采用變長(zhǎng)分塊方式將待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊包括:
將長(zhǎng)度為所述預(yù)設(shè)長(zhǎng)度的滑動(dòng)窗口在所述待存儲(chǔ)文件的數(shù)據(jù)中滑動(dòng);
每將所述滑動(dòng)窗口滑動(dòng)一個(gè)步長(zhǎng),判斷是否達(dá)到數(shù)據(jù)塊切分條件;
若達(dá)到數(shù)據(jù)塊切分條件,則將滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)確定為切分出的一個(gè)數(shù)據(jù)塊,并將所述滑動(dòng)窗口滑經(jīng)過(guò)的且未切分的數(shù)據(jù)段確定為數(shù)據(jù)塊。
優(yōu)選的,所述判斷是否達(dá)到數(shù)據(jù)塊切分條件包括:
計(jì)算所述滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)的校驗(yàn)和;在第三索引庫(kù)中查找是否存在所述校驗(yàn)和;所述第三索引庫(kù)中存儲(chǔ)有校驗(yàn)和與所述第一索引庫(kù)中包含的哈希值之間的對(duì)應(yīng)關(guān)系;若所述第三索引庫(kù)中存在所述校驗(yàn)和,確定達(dá)到數(shù)據(jù)塊切分條件。
優(yōu)選的,采用變長(zhǎng)分塊方式將待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊,還包括:
如果所述滑動(dòng)窗口滑經(jīng)過(guò)的數(shù)據(jù)段的長(zhǎng)度是否達(dá)到所述預(yù)設(shè)長(zhǎng)度,若將所述數(shù)據(jù)段確定為切分出的一個(gè)數(shù)據(jù)塊。
另一方面,本申請(qǐng)實(shí)施例還提供了一種存儲(chǔ)設(shè)備,包括:
通信接口,用于獲取待存儲(chǔ)文件;
處理器,用于將所述待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊;所述若干個(gè)數(shù)據(jù)塊中至少有部分?jǐn)?shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度;對(duì)于每一個(gè)數(shù)據(jù)塊,若所述數(shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度,基于第一索引庫(kù)判斷是否需存儲(chǔ)所述數(shù)據(jù)塊,基于判斷結(jié)果對(duì)所述數(shù)據(jù)塊進(jìn)行處理并生成與所述數(shù)據(jù)塊對(duì)應(yīng)的第一索引,將所述第一索引存入所述第一索引庫(kù);若所述數(shù)據(jù)塊的長(zhǎng)度與所述預(yù)設(shè)長(zhǎng)度不同,基于第二索引庫(kù)判斷是否需存儲(chǔ)所述數(shù)據(jù)塊,基于判斷結(jié)果對(duì)所述數(shù)據(jù)塊進(jìn)行處理并生成與所述數(shù)據(jù)塊對(duì)應(yīng)的第二索引,將所述第二索引存入所述第二索引庫(kù)。
優(yōu)選的,所述處理器在將所述待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊時(shí),具體用于:
采用定長(zhǎng)分塊方式或者變長(zhǎng)分塊方式將所述待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊;
若采用定長(zhǎng)分塊方式,所述若干個(gè)數(shù)據(jù)塊的長(zhǎng)度均為所述預(yù)設(shè)長(zhǎng)度;
若采用變長(zhǎng)分塊方式,所述若干個(gè)數(shù)據(jù)塊中部分?jǐn)?shù)據(jù)塊的長(zhǎng)度為所述預(yù)設(shè)長(zhǎng)度。
優(yōu)選的,所述處理器在采用變長(zhǎng)分塊方式將待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊時(shí),具體用于:
將長(zhǎng)度為所述預(yù)設(shè)長(zhǎng)度的滑動(dòng)窗口在所述待存儲(chǔ)文件的數(shù)據(jù)中滑動(dòng);
每將所述滑動(dòng)窗口滑動(dòng)一個(gè)步長(zhǎng),判斷是否達(dá)到數(shù)據(jù)塊切分條件;
若達(dá)到數(shù)據(jù)塊切分條件,則將滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)確定為切分出的一個(gè)數(shù)據(jù)塊,并將所述滑動(dòng)窗口滑經(jīng)過(guò)的且未切分的數(shù)據(jù)段確定為數(shù)據(jù)塊。
優(yōu)選的,所述處理器在判斷是否達(dá)到數(shù)據(jù)塊切分條件時(shí),具體用于:
計(jì)算所述滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)的校驗(yàn)和;在第三索引庫(kù)中查找是否存在所述校驗(yàn)和;所述第三索引庫(kù)中存儲(chǔ)有校驗(yàn)和與所述第一索引庫(kù)中包含的哈希值之間的對(duì)應(yīng)關(guān)系;若所述第三索引庫(kù)中存在所述校驗(yàn)和,確定達(dá)到數(shù)據(jù)塊切分條件。
優(yōu)選的,所述處理器在采用變長(zhǎng)分塊方式將待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊時(shí),還用于,如果所述滑動(dòng)窗口滑經(jīng)過(guò)的數(shù)據(jù)段的長(zhǎng)度是否達(dá)到所述預(yù)設(shè)長(zhǎng)度,若將所述數(shù)據(jù)段確定為切分出的一個(gè)數(shù)據(jù)塊。
通過(guò)以上方案可知,本申請(qǐng)?zhí)峁┑囊环N數(shù)據(jù)存儲(chǔ)方法和裝置,在數(shù)據(jù)存儲(chǔ)過(guò)程中,按照數(shù)據(jù)塊的長(zhǎng)度建立索引庫(kù),數(shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊建立一個(gè)索引庫(kù),而數(shù)據(jù)塊的長(zhǎng)度不是預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊建立另一個(gè)索引庫(kù),從而當(dāng)綜合使用定長(zhǎng)分塊和變長(zhǎng)分塊兩種數(shù)據(jù)分塊方式進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),部分通過(guò)變長(zhǎng)分塊方式劃分得到的數(shù)據(jù)塊(長(zhǎng)度為預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊)會(huì)與通過(guò)定長(zhǎng)分塊方式劃分得到的數(shù)據(jù)塊(長(zhǎng)度為預(yù)設(shè)長(zhǎng)度)共用同一個(gè)索引庫(kù),從而兩個(gè)索引庫(kù)中不會(huì)存在相同的索引,且索引總數(shù)相對(duì)于現(xiàn)有技術(shù)有所減少,提高了重復(fù)數(shù)據(jù)的刪除概率和數(shù)據(jù)查找效率。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本申請(qǐng)實(shí)施例提供的一種數(shù)據(jù)存儲(chǔ)方法一個(gè)實(shí)施例的流程示意圖;
圖2為本申請(qǐng)實(shí)施例提供的一種數(shù)據(jù)存儲(chǔ)方法又一個(gè)實(shí)施例的流程示意圖;
圖3為本申請(qǐng)實(shí)施例提供的數(shù)據(jù)存儲(chǔ)方法中采用滑動(dòng)定長(zhǎng)方式對(duì)待存儲(chǔ)文件進(jìn)行數(shù)據(jù)分塊的一種流程示意圖;
圖4為本申請(qǐng)實(shí)施例的提供的一種存儲(chǔ)設(shè)備一個(gè)實(shí)施例的組成結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有付出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
請(qǐng)參閱圖1,其示出了本申請(qǐng)一種數(shù)據(jù)存儲(chǔ)方法一個(gè)實(shí)施例的流程示意圖,本實(shí)施例的方法可以應(yīng)用于存儲(chǔ)設(shè)備,如,該存儲(chǔ)設(shè)備可以為個(gè)人計(jì)算機(jī),也該分布式存儲(chǔ)系統(tǒng)或者集中式存儲(chǔ)系統(tǒng)中的服務(wù)器。本實(shí)施例的方法可以包括:
101,獲取待存儲(chǔ)文件。
本申請(qǐng)實(shí)施例中將需要分塊存儲(chǔ)的文件稱為待存儲(chǔ)文件。
102,將該待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊,該若干個(gè)數(shù)據(jù)塊中至少有部分?jǐn)?shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度。
其中,數(shù)據(jù)塊的長(zhǎng)度是指數(shù)據(jù)塊的大小,如,預(yù)設(shè)長(zhǎng)度可以為8比特,預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊為8比特的數(shù)據(jù)塊。
在本申請(qǐng)實(shí)施例中,將該待存儲(chǔ)文件劃分為若干數(shù)據(jù)塊的方式可以采用定長(zhǎng)分塊方式進(jìn)行切分,也可以是采用變長(zhǎng)分塊方式進(jìn)行切分。
其中,采用定長(zhǎng)分塊方式進(jìn)行切分也可以理解為按照定長(zhǎng)分塊方式對(duì)文件進(jìn)行切分,該種方式為采用預(yù)先定義好的塊大小對(duì)文件進(jìn)行切分。如,預(yù)先定義的塊大小為8比特,則文件中第1個(gè)比特至第8個(gè)比特可以分為一個(gè)數(shù)據(jù)塊,相應(yīng)的,文件中第9個(gè)比特至第16個(gè)比特的數(shù)據(jù)為一個(gè)數(shù)據(jù)塊,以此類推。
與定長(zhǎng)分塊方式不同,變長(zhǎng)分塊方式為按照預(yù)定的算法,將文件切分為長(zhǎng)度(或者說(shuō)大小)不同的數(shù)據(jù)塊。
可以理解的是,采用變長(zhǎng)分塊方式對(duì)文件進(jìn)行分塊的過(guò)程中,也可能會(huì)出現(xiàn)切分出的數(shù)據(jù)塊的大小與定長(zhǎng)分塊方式預(yù)定義的塊大小相同。如,定長(zhǎng)分塊方式中預(yù)定義的塊大小為8比特,那么采用變長(zhǎng)分塊方式對(duì)文件進(jìn)行切分的過(guò)程中,也可能切換出大小為8比特的數(shù)據(jù)塊。為了后續(xù)能夠?qū)⑾嗤L(zhǎng)度的數(shù)據(jù)塊的索引存儲(chǔ)到同一個(gè)索引庫(kù)中,在本申請(qǐng)實(shí)施例中,該預(yù)設(shè)長(zhǎng)度可以以定長(zhǎng)分塊方式中所設(shè)定的塊大小為準(zhǔn),例如,定長(zhǎng)分塊方式所采用的預(yù)定義的塊大小為16比特,則該預(yù)設(shè)長(zhǎng)度可以為16比特。
相應(yīng)的,如果采用定長(zhǎng)分塊方式將該待存儲(chǔ)文件切換為若干個(gè)數(shù)據(jù)塊,則該若干個(gè)數(shù)據(jù)塊的長(zhǎng)度均為該預(yù)設(shè)長(zhǎng)度;如果采用變長(zhǎng)分塊方式將該待存儲(chǔ)文件切換為若干數(shù)據(jù)塊,則該若干個(gè)數(shù)據(jù)塊中至少有部分?jǐn)?shù)據(jù)塊的長(zhǎng)度為該預(yù)設(shè)長(zhǎng)度。
可以理解的是,對(duì)于不同的待存儲(chǔ)文件所需采用的分塊方式有可能會(huì)有所不同,具體采取哪種分塊方式可以根據(jù)實(shí)際需要選定。如,定長(zhǎng)分塊方式更適用于在追加寫的場(chǎng)景,同時(shí)配合壓縮來(lái)達(dá)到一定的去重效果;變長(zhǎng)分塊方式主要是解決類似備份場(chǎng)景中增量備份全量備份,修改寫比較多的場(chǎng)景,能夠比定長(zhǎng)分塊方式效果更顯著。
103,對(duì)于每一個(gè)數(shù)據(jù)塊,若該數(shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度,基于第一索引庫(kù)判斷是否需存儲(chǔ)該數(shù)據(jù)塊,基于判斷結(jié)果對(duì)該數(shù)據(jù)塊進(jìn)行處理并生成與該數(shù)據(jù)塊對(duì)應(yīng)的第一索引,將該第一索引存入該第一索引庫(kù)。
在本申請(qǐng)實(shí)施例中,通過(guò)第一索引庫(kù)存儲(chǔ)該預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊的索引信息??梢?,第一索引庫(kù)中存儲(chǔ)的是針對(duì)相同長(zhǎng)度的數(shù)據(jù)塊所建立的索引。
其中,根據(jù)該第一索引庫(kù)可以判斷數(shù)據(jù)庫(kù)中是否存在該數(shù)據(jù)塊,如果數(shù)據(jù)庫(kù)中存儲(chǔ)有與該數(shù)據(jù)塊相同的數(shù)據(jù)塊,則無(wú)需重復(fù)存儲(chǔ)該數(shù)據(jù)塊;如果數(shù)據(jù)庫(kù)中未存儲(chǔ)有該數(shù)據(jù)塊,則需要將該數(shù)據(jù)塊存儲(chǔ)到數(shù)據(jù)庫(kù)中。如,可以計(jì)算數(shù)據(jù)塊的哈希值,并檢測(cè)該第一索引庫(kù)中是否存在該數(shù)據(jù)塊的哈希值,如果不存在該數(shù)據(jù)塊的哈希值,則說(shuō)明數(shù)據(jù)庫(kù)中不存在與該數(shù)據(jù)塊相同的數(shù)據(jù)塊;否則,則數(shù)據(jù)庫(kù)中存在該數(shù)據(jù)塊。
無(wú)論是否需要將該數(shù)據(jù)塊存儲(chǔ)到數(shù)據(jù)庫(kù)中,為了可以定位出該待存儲(chǔ)文件中該數(shù)據(jù)塊的存儲(chǔ)位置,都需要生成與該待存儲(chǔ)文件以及該數(shù)據(jù)塊對(duì)應(yīng)的索引信息,為了便于區(qū)分,將為該待存儲(chǔ)文件切分出的該數(shù)據(jù)塊所生成的索引稱為第一索引。
可以理解的是,在數(shù)據(jù)庫(kù)中已經(jīng)存儲(chǔ)有該數(shù)據(jù)塊的情況下,該第一索引數(shù)據(jù)庫(kù)中必然也已經(jīng)存在該數(shù)據(jù)塊的標(biāo)識(shí)與該數(shù)據(jù)塊的存儲(chǔ)地址的索引關(guān)系,因此,只需要構(gòu)建該待存儲(chǔ)文件與該數(shù)據(jù)塊的標(biāo)識(shí)對(duì)應(yīng)關(guān)系,該對(duì)應(yīng)關(guān)系即為第一索引。
如果數(shù)據(jù)庫(kù)中未存儲(chǔ)有該數(shù)據(jù)塊,則將該數(shù)據(jù)塊存儲(chǔ)到數(shù)據(jù)庫(kù)之后,需要建立該待存儲(chǔ)文件與該數(shù)據(jù)塊的標(biāo)識(shí),以及該數(shù)據(jù)塊的標(biāo)識(shí)與數(shù)據(jù)塊的存儲(chǔ)地址之間的對(duì)應(yīng)關(guān)系。即,在該種情況下,第一索引除了包括待存儲(chǔ)文件與該數(shù)據(jù)塊的標(biāo)識(shí)之間的對(duì)應(yīng)關(guān)系之外,還包括數(shù)據(jù)塊的標(biāo)識(shí)與數(shù)據(jù)塊的存儲(chǔ)地址之間的對(duì)應(yīng)關(guān)系。
需要說(shuō)明的是,在本申請(qǐng)實(shí)施例中,索引中所包含的數(shù)據(jù)塊的標(biāo)識(shí)用于唯一標(biāo)識(shí)該數(shù)據(jù)塊。作為一種可選方式,該數(shù)據(jù)塊的標(biāo)識(shí)可以為數(shù)據(jù)塊的哈希值,即利用哈希算法計(jì)算出的該數(shù)據(jù)塊的哈希值,由于不同數(shù)據(jù)塊所包含的數(shù)據(jù)不同,因此,不同數(shù)據(jù)塊對(duì)應(yīng)的哈希值也不同,從而通過(guò)哈希值可以唯一標(biāo)識(shí)一個(gè)數(shù)據(jù)塊。
104,若該數(shù)據(jù)塊的長(zhǎng)度與該預(yù)設(shè)長(zhǎng)度不同,基于第二索引庫(kù)判斷是否需存儲(chǔ)該數(shù)據(jù)塊,基于判斷結(jié)果對(duì)該數(shù)據(jù)塊進(jìn)行處理并生成與該數(shù)據(jù)塊對(duì)應(yīng)的第二索引,將該第二索引存入該第二索引庫(kù)。
在本實(shí)施例中,通過(guò)第二索引庫(kù)存儲(chǔ)該預(yù)設(shè)長(zhǎng)度之外的其他長(zhǎng)度的數(shù)據(jù)塊的索引信息。
由于定長(zhǎng)分塊方式所切換出的數(shù)據(jù)塊的大小是相同的,而本申請(qǐng)中預(yù)設(shè)長(zhǎng)度以定長(zhǎng)分塊方式所設(shè)定的預(yù)定大小為準(zhǔn),因此,第二索引庫(kù)實(shí)際上是針對(duì)采用變長(zhǎng)分塊方式切分出的,且長(zhǎng)度不屬于該預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊所構(gòu)建的索引庫(kù)。
基于該第二索引庫(kù)判斷是否存儲(chǔ)該數(shù)據(jù)塊的過(guò)程與前面基于第一索引庫(kù)判斷是否存儲(chǔ)該數(shù)據(jù)塊的過(guò)程相似,具體都是根據(jù)索引庫(kù)判斷數(shù)據(jù)庫(kù)中是否存儲(chǔ)有該數(shù)據(jù)塊,并在數(shù)據(jù)庫(kù)中未存儲(chǔ)有該數(shù)據(jù)塊的情況下,才存儲(chǔ)該數(shù)據(jù)塊,以避免重復(fù)存儲(chǔ),在此不再贅述。
在本申請(qǐng)實(shí)施例中,將第二索引庫(kù)中,針對(duì)長(zhǎng)度不屬于預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊所生成的索引稱為第二索引。與前面生成第一索引相似,如,如果數(shù)據(jù)庫(kù)中不存在該數(shù)據(jù)塊,則生成該待存儲(chǔ)文件的標(biāo)識(shí)與該數(shù)據(jù)塊的哈希值,以及該數(shù)據(jù)塊的哈希值與該數(shù)據(jù)塊的存儲(chǔ)地址之間的索引關(guān)系;如果數(shù)據(jù)庫(kù)中存在該數(shù)據(jù)塊,則只需生成該待存儲(chǔ)文件的標(biāo)識(shí)與該數(shù)據(jù)塊的哈希值的索引關(guān)系。
可見,本申請(qǐng)實(shí)施例中,在數(shù)據(jù)存儲(chǔ)過(guò)程中,按照數(shù)據(jù)塊的長(zhǎng)度建立索引庫(kù),數(shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊建立一個(gè)索引庫(kù),而數(shù)據(jù)塊的長(zhǎng)度不是預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊建立另一個(gè)索引庫(kù),從而當(dāng)綜合使用定長(zhǎng)分塊和變長(zhǎng)分塊兩種數(shù)據(jù)分塊方式進(jìn)行數(shù)據(jù)存儲(chǔ)時(shí),部分通過(guò)變長(zhǎng)分塊方式劃分得到的數(shù)據(jù)塊(長(zhǎng)度為預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊)會(huì)與通過(guò)定長(zhǎng)分塊方式劃分得到的數(shù)據(jù)塊(長(zhǎng)度為預(yù)設(shè)長(zhǎng)度)共用同一個(gè)索引庫(kù),而由于不同長(zhǎng)度的數(shù)據(jù)塊不可能相同,兩個(gè)不同長(zhǎng)度的數(shù)據(jù)塊所對(duì)應(yīng)的哈希值等標(biāo)識(shí)也不可能相同,因此,兩個(gè)索引庫(kù)中不會(huì)存在相同的索引,有利于減少索引總數(shù),從而可以提高數(shù)據(jù)查找效率。
同時(shí),現(xiàn)有的采用變長(zhǎng)分塊的文件的索引庫(kù)和采用定長(zhǎng)分塊的文件的索引庫(kù)分別單獨(dú)存儲(chǔ),這樣,采用不同分塊方式所切分出的數(shù)據(jù)塊會(huì)按照不同的索引塊來(lái)判斷是否存在重復(fù)存儲(chǔ),就可能導(dǎo)致數(shù)據(jù)塊的重復(fù)存儲(chǔ),進(jìn)而使得兩個(gè)索引庫(kù)中存在相同哈希值(相同數(shù)據(jù)塊的標(biāo)識(shí))。而與現(xiàn)有的方式相比,本申請(qǐng)的針對(duì)預(yù)設(shè)長(zhǎng)度以及不屬于預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊分別設(shè)置索引數(shù)據(jù)庫(kù),只要數(shù)據(jù)塊的長(zhǎng)度都為預(yù)設(shè)長(zhǎng)度,就會(huì)將數(shù)據(jù)塊的索引存儲(chǔ)到同一個(gè)索引庫(kù)中,從而避免該預(yù)設(shè)長(zhǎng)度的相同數(shù)據(jù)塊重復(fù)存儲(chǔ),有利于減少數(shù)據(jù)重復(fù)存儲(chǔ)的概率,從而提高重復(fù)數(shù)據(jù)的刪除概率。
參見圖2,其示出了本申請(qǐng)一種數(shù)據(jù)存儲(chǔ)方法又一個(gè)實(shí)施例的流程示意圖,本實(shí)施例的方法可以應(yīng)用于具有數(shù)據(jù)處理功能的存儲(chǔ)設(shè)備,本實(shí)施例的方法可以包括:
201,獲取待存儲(chǔ)文件;
202,確定對(duì)該待存儲(chǔ)文件的分塊方式;
其中,該分塊方式可以根據(jù)實(shí)際需要選擇或者設(shè)定,在此不加以限制。
203,如果分塊方式為變長(zhǎng)分塊方式,按照變長(zhǎng)分塊算法,對(duì)該待存儲(chǔ)文件進(jìn)行分塊,并執(zhí)行步驟204;
其中,變長(zhǎng)分塊算法可以有多種,對(duì)于采用任意變長(zhǎng)分塊算法對(duì)該待存儲(chǔ)文件進(jìn)行分塊的方式均適用于本申請(qǐng)實(shí)施例。
可選的,為了使得采用變成分塊方式對(duì)該待存儲(chǔ)文件進(jìn)行分塊的過(guò)程中,能夠產(chǎn)生更多預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊,本申請(qǐng)可以該變長(zhǎng)分塊算法可以為滑動(dòng)定長(zhǎng)分塊方式,其中,滑動(dòng)定長(zhǎng)分塊的滑動(dòng)窗口的長(zhǎng)度可以為該預(yù)設(shè)長(zhǎng)度。
204,對(duì)于該待存儲(chǔ)文件切分出的每個(gè)數(shù)據(jù)塊,判斷該數(shù)據(jù)塊的長(zhǎng)度是否為預(yù)設(shè)長(zhǎng)度,如果是,則執(zhí)行步驟s206;如果否,則執(zhí)行步驟209;
如果數(shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度,則通過(guò)第一索引庫(kù)管理以及存儲(chǔ)該待存儲(chǔ)文件與該數(shù)據(jù)塊之間的索引關(guān)系;否則,則通過(guò)第二索引庫(kù)管理以及存儲(chǔ)該待存儲(chǔ)文件與數(shù)據(jù)塊之間的索引關(guān)系。
205,如果分塊方式為定長(zhǎng)分塊方式,則按照預(yù)設(shè)長(zhǎng)度,將該待存儲(chǔ)文件劃分為若干個(gè)該預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊,并執(zhí)行步驟206;
其中,該預(yù)定長(zhǎng)度為定長(zhǎng)分塊算法中設(shè)定的分塊大小。
206,對(duì)于切分出的每一個(gè)數(shù)據(jù)塊,計(jì)算該數(shù)據(jù)塊的哈希值,并檢索第一索引庫(kù)中是否存在該哈希值,如果是,則執(zhí)行步驟207,如果否,則執(zhí)行步驟208;
207,生成包含該待存儲(chǔ)文件的標(biāo)識(shí)與數(shù)據(jù)塊的哈希值之間的第一對(duì)應(yīng)關(guān)系,并將包含該第一對(duì)應(yīng)關(guān)系的第一索引存儲(chǔ)到第一索引庫(kù);
即,該第一對(duì)應(yīng)關(guān)系為第一索引所包含的內(nèi)容。
可以理解的是,在第一索引庫(kù)中包含該數(shù)據(jù)塊的哈希值的情況下,則說(shuō)明數(shù)據(jù)庫(kù)中已經(jīng)存儲(chǔ)了該數(shù)據(jù)塊,而該數(shù)據(jù)塊為該待存儲(chǔ)文件之外的其他文件切分得到的,為了避免數(shù)據(jù)重復(fù),不會(huì)將該待存儲(chǔ)文件切分得到的數(shù)據(jù)塊再重復(fù)存儲(chǔ)到數(shù)據(jù)庫(kù)中,而為了避免后續(xù)刪除該其他文件時(shí),導(dǎo)致將該數(shù)據(jù)塊刪除,而影響到該待存儲(chǔ)文件的完整性,因此,在該步驟206的同時(shí),還可以將該數(shù)據(jù)塊的引用計(jì)數(shù)加一。其中,該引用計(jì)數(shù)表明包含該數(shù)據(jù)塊的文件的個(gè)數(shù),如,文件a切分出數(shù)據(jù)塊m,而文件b也切分出相同的數(shù)據(jù)塊m,則數(shù)據(jù)塊m的引用計(jì)數(shù)為2。
相應(yīng)的,當(dāng)刪除引用該數(shù)據(jù)塊的一個(gè)文件時(shí),則將該數(shù)據(jù)塊的引用計(jì)數(shù)減一。如果該數(shù)據(jù)塊的引用計(jì)數(shù)為零時(shí),則刪除該數(shù)據(jù)塊。
208,將數(shù)據(jù)塊存儲(chǔ)到數(shù)據(jù)庫(kù),并生成包含該待存儲(chǔ)文件的標(biāo)識(shí)與數(shù)據(jù)塊的哈希值之間的第一對(duì)應(yīng)關(guān)系,以及數(shù)據(jù)塊的哈希值與數(shù)據(jù)塊的存儲(chǔ)地址之間的第二對(duì)應(yīng)關(guān)系,并將包含第二對(duì)應(yīng)關(guān)系以及第二對(duì)應(yīng)關(guān)系的第一索引存儲(chǔ)到該第一索引庫(kù)。
即,第一索引包括第一對(duì)應(yīng)關(guān)系以及該第一對(duì)應(yīng)關(guān)系。
209,計(jì)算該數(shù)據(jù)塊的哈希值,并檢索第二索引庫(kù)中是否存在該哈希值,如果是,則執(zhí)行步驟210;如果否,則執(zhí)行步驟211;
210,生成包含該待存儲(chǔ)文件的標(biāo)識(shí)與該數(shù)據(jù)塊的哈希值之間的第三對(duì)應(yīng)關(guān)系,并將包含該第三對(duì)應(yīng)關(guān)系的第二索引存儲(chǔ)到第二索引庫(kù);
即,該第三對(duì)應(yīng)關(guān)系為第一索引所包含的內(nèi)容。
為了便于與前面預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊的哈希值與該待存儲(chǔ)文件的標(biāo)識(shí)之間的第一對(duì)應(yīng)關(guān)系進(jìn)行區(qū)分,對(duì)于不屬于預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊,將該待存儲(chǔ)文件的標(biāo)識(shí)與該數(shù)據(jù)塊的哈希值之間的對(duì)應(yīng)關(guān)系稱為第三對(duì)應(yīng)關(guān)系。
211,將數(shù)據(jù)塊存儲(chǔ)到數(shù)據(jù)庫(kù),并生成包含該待存儲(chǔ)文件的標(biāo)識(shí)與數(shù)據(jù)塊的哈希值之間的第三對(duì)應(yīng)關(guān)系,以及數(shù)據(jù)塊的哈希值與數(shù)據(jù)塊的存儲(chǔ)地址之間的第四對(duì)應(yīng)關(guān)系,并將包含第三對(duì)應(yīng)關(guān)系以及第四對(duì)應(yīng)關(guān)系的第二索引存儲(chǔ)到該第二索引庫(kù)。
為了便于與前面預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊的哈希值與該數(shù)據(jù)塊的存儲(chǔ)地址之間的第二對(duì)應(yīng)關(guān)系進(jìn)行區(qū)分,對(duì)于不屬于預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊,將該數(shù)據(jù)塊的哈希值與該數(shù)據(jù)塊的存儲(chǔ)地址之間的對(duì)應(yīng)關(guān)系稱為第四對(duì)應(yīng)關(guān)系。
可以理解的是,在本申請(qǐng)以上實(shí)施例中,變長(zhǎng)分塊方式可以有多種,可選的,為了能夠最大限度的減少索引數(shù)量,并減少數(shù)據(jù)重復(fù)存儲(chǔ)的概率,本申請(qǐng)實(shí)施例中變長(zhǎng)分塊方式具體可以為滑動(dòng)定長(zhǎng)分塊,所謂滑動(dòng)定長(zhǎng)分塊為利用
如,參見圖3,其示出了本申請(qǐng)的數(shù)據(jù)存儲(chǔ)方法中采用滑動(dòng)定長(zhǎng)分塊方式對(duì)待存儲(chǔ)文件進(jìn)行切分,以完成對(duì)待存儲(chǔ)文件進(jìn)行變長(zhǎng)分塊的一種實(shí)現(xiàn)流程,該實(shí)現(xiàn)流程可以包括:
301,利用窗口大小為預(yù)設(shè)長(zhǎng)度的滑動(dòng)窗口在該待存儲(chǔ)文件的數(shù)據(jù)中滑動(dòng);
其中,每次滑動(dòng)一個(gè)步長(zhǎng),該步長(zhǎng)可以根據(jù)需要,如該步長(zhǎng)為一個(gè)比特。
302,每將該滑動(dòng)窗口滑動(dòng)一個(gè)步長(zhǎng),檢測(cè)該待存儲(chǔ)文件的數(shù)據(jù)中,該滑動(dòng)窗口滑經(jīng)且未切分的數(shù)據(jù)段的長(zhǎng)度是否等于預(yù)設(shè)長(zhǎng)度,如果是,則執(zhí)行步驟303;如果否,則執(zhí)行步驟304;
其中,滑動(dòng)窗口滑過(guò)的滑過(guò)且未切分的數(shù)據(jù)段的長(zhǎng)度等于預(yù)設(shè)長(zhǎng)度為確定一種滿足數(shù)據(jù)塊切分條件,即確定數(shù)據(jù)切分邊界的條件。
303,如果該數(shù)據(jù)段的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度,則將該數(shù)據(jù)段切分為一個(gè)數(shù)據(jù)塊,并計(jì)算該滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)的校驗(yàn)和;
如果該數(shù)據(jù)段的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度,則該數(shù)據(jù)段構(gòu)成一個(gè)數(shù)據(jù)塊,而且由于該數(shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度,則按照前面對(duì)于切分出的預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)塊的存儲(chǔ)以及生成索引的方式進(jìn)行處理,在此不再贅述。
同時(shí),為了驗(yàn)證滑動(dòng)窗口內(nèi)的目標(biāo)數(shù)據(jù)是否可以被切分為一個(gè)數(shù)據(jù)塊,本申請(qǐng)還需要計(jì)算該目標(biāo)數(shù)據(jù)的校驗(yàn)和,其中,計(jì)算該校驗(yàn)和的方式可以采用現(xiàn)有的任意方式,在此不加以限制。
可選的,在將該預(yù)設(shè)長(zhǎng)度的數(shù)據(jù)段切分為一個(gè)數(shù)據(jù)塊之后,由于會(huì)將該數(shù)據(jù)塊存儲(chǔ)到數(shù)據(jù)庫(kù),同時(shí),會(huì)在第一索引庫(kù)中生成與該數(shù)據(jù)段對(duì)應(yīng)的第一索引,這樣,為了后續(xù)對(duì)該待存儲(chǔ)文件進(jìn)行數(shù)據(jù)分塊時(shí),為了能夠驗(yàn)證該待存儲(chǔ)文件中是否存在與該數(shù)據(jù)段相同的數(shù)據(jù)塊,還需要計(jì)算該數(shù)據(jù)段的校驗(yàn)和,并將該數(shù)據(jù)段的校驗(yàn)和與該數(shù)據(jù)段的哈希值進(jìn)行關(guān)聯(lián)存儲(chǔ)到第三索引數(shù)據(jù)庫(kù)中。
304,計(jì)算該滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)的校驗(yàn)和;
如果滑動(dòng)窗口滑經(jīng)的數(shù)據(jù)段的長(zhǎng)度不足該預(yù)設(shè)長(zhǎng)度,則說(shuō)明滑動(dòng)窗口之前的數(shù)據(jù)不符合數(shù)據(jù)塊切分條件,則僅僅計(jì)算該滑動(dòng)窗口內(nèi)的目標(biāo)數(shù)據(jù)的校驗(yàn)和,以便驗(yàn)證該目標(biāo)數(shù)據(jù)是否需要構(gòu)成一個(gè)數(shù)據(jù)塊。
305,在第三索引庫(kù)中查找是否存在計(jì)算得到的校驗(yàn)和;
其中,該第三索引庫(kù)中存儲(chǔ)有校驗(yàn)和與第一索引庫(kù)中哈希值的對(duì)應(yīng)關(guān)系。也就是說(shuō),如果第一索引庫(kù)中存儲(chǔ)有某個(gè)數(shù)據(jù)塊的哈希值,則確定該哈希值可能對(duì)應(yīng)的校驗(yàn)和,并在第三索引庫(kù)中存儲(chǔ)校驗(yàn)和與相應(yīng)的哈希值的對(duì)應(yīng)關(guān)系。
可以理解的是,由于校驗(yàn)和并不具有唯一性,因此,不同數(shù)據(jù)的校驗(yàn)和有可能相同,因此,同一個(gè)哈希值有可能對(duì)應(yīng)著多個(gè)校驗(yàn)和。
如果第三索引庫(kù)中存在該目標(biāo)數(shù)據(jù)的校驗(yàn)和,則說(shuō)明第一索引庫(kù)中有可能存在該目標(biāo)數(shù)據(jù)的哈希值,也就是說(shuō),數(shù)據(jù)庫(kù)中有可能存在與該目標(biāo)數(shù)據(jù)相同的數(shù)據(jù)塊,而如果數(shù)據(jù)庫(kù)中存在與該目標(biāo)數(shù)據(jù)相同的數(shù)據(jù)塊,那么為了達(dá)到減少數(shù)據(jù)存儲(chǔ)量的目的,可以將該目標(biāo)數(shù)據(jù)構(gòu)成一個(gè)數(shù)據(jù)塊。而為了驗(yàn)證數(shù)據(jù)庫(kù)中是否存在該目標(biāo)數(shù)據(jù),則需要進(jìn)一步計(jì)算該數(shù)據(jù)塊的哈希值,即執(zhí)行后續(xù)的步驟306。
306,若該第三索引庫(kù)中存在計(jì)算得到的校驗(yàn)和,則計(jì)算該目標(biāo)數(shù)據(jù)的哈希值;
307,如果該第一索引庫(kù)中存在該目標(biāo)數(shù)據(jù)的哈希值,將滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)確定為切分出的一個(gè)數(shù)據(jù)塊,并將該滑動(dòng)窗口滑經(jīng)過(guò)的且未切分的數(shù)據(jù)段確定為數(shù)據(jù)塊。
可見,在確定出滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)的校驗(yàn)和之后,如果在第三索引庫(kù)中存在該計(jì)算得到的校驗(yàn)和,則確定達(dá)到數(shù)據(jù)塊切分條件,將該目標(biāo)數(shù)據(jù)構(gòu)成一個(gè)數(shù)據(jù)塊。
當(dāng)然,本申請(qǐng)實(shí)施例僅僅是以上提到的兩種數(shù)據(jù)塊切分條件為例進(jìn)行介紹,但是可以理解的是,在實(shí)際應(yīng)用中還可以根據(jù)需要設(shè)定其他的數(shù)據(jù)塊切分條件,在此不加以限制。
可以理解的是,不斷重復(fù)以上步驟302至306可以最終完成將該待存儲(chǔ)文件切換為若干個(gè)數(shù)據(jù)塊。
需要說(shuō)明的是,與計(jì)算數(shù)據(jù)的哈希值相比,計(jì)算數(shù)據(jù)的校驗(yàn)和所需的計(jì)算量較小,計(jì)算速度更快,因此,本申請(qǐng)?jiān)诖_定出滑動(dòng)窗口覆蓋的目標(biāo)數(shù)據(jù)之后,先計(jì)算該目標(biāo)數(shù)據(jù)的校驗(yàn)和,并通過(guò)判斷第三索引庫(kù)中是否存在該校驗(yàn)和,來(lái)預(yù)估該第一索引庫(kù)中是否可能存在該目標(biāo)數(shù)據(jù)的哈希值(也可以認(rèn)為是預(yù)估該數(shù)據(jù)庫(kù)中是否可能存在該目標(biāo)數(shù)據(jù))的目的,并在第三索引庫(kù)存在該校驗(yàn)和的前提下,再計(jì)算該目標(biāo)數(shù)據(jù)的哈希值,并與第一索引庫(kù)中的哈希值進(jìn)行比對(duì),以減少數(shù)據(jù)處理量。但是可以理解的是,在實(shí)際應(yīng)用中,也可以不執(zhí)行“計(jì)算該滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)的校驗(yàn)和”以及“在第三索引庫(kù)中查找是否存在計(jì)算得到的校驗(yàn)和”的操作,而直接計(jì)算目標(biāo)數(shù)據(jù)的哈希值,并檢測(cè)該第一索引庫(kù)中存在該目標(biāo)數(shù)據(jù)的哈希值,也同樣適用于本申請(qǐng)實(shí)施例,在此不加以限制。
另一方面,本申請(qǐng)實(shí)施例還提供了一種存儲(chǔ)設(shè)備,如,參見圖4,其示出了本申請(qǐng)一種存儲(chǔ)設(shè)備的組成結(jié)構(gòu)示意圖,該存儲(chǔ)設(shè)備400包括:
通信接口401,用于獲取待存儲(chǔ)文件;
處理器402,用于將所述待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊;所述若干個(gè)數(shù)據(jù)塊中至少有部分?jǐn)?shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度;對(duì)于每一個(gè)數(shù)據(jù)塊,若所述數(shù)據(jù)塊的長(zhǎng)度為預(yù)設(shè)長(zhǎng)度,基于第一索引庫(kù)判斷是否需存儲(chǔ)所述數(shù)據(jù)塊,基于判斷結(jié)果對(duì)所述數(shù)據(jù)塊進(jìn)行處理并生成與所述數(shù)據(jù)塊對(duì)應(yīng)的第一索引,將所述第一索引存入所述第一索引庫(kù);若所述數(shù)據(jù)塊的長(zhǎng)度與所述預(yù)設(shè)長(zhǎng)度不同,基于第二索引庫(kù)判斷是否需存儲(chǔ)所述數(shù)據(jù)塊,基于判斷結(jié)果對(duì)所述數(shù)據(jù)塊進(jìn)行處理并生成與所述數(shù)據(jù)塊對(duì)應(yīng)的第二索引,將所述第二索引存入所述第二索引庫(kù)。
當(dāng)然,該存儲(chǔ)設(shè)備還可以包括存儲(chǔ)器403,用于存儲(chǔ)該處理器執(zhí)行上述操作所需的程序。
可選的,存儲(chǔ)器、處理器以及通信接口可以通過(guò)通信總線相連。
可選的,所述處理器在將所述待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊時(shí),具體用于:
采用定長(zhǎng)分塊方式或者變長(zhǎng)分塊方式將所述待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊;
若采用定長(zhǎng)分塊方式,所述若干個(gè)數(shù)據(jù)塊的長(zhǎng)度均為所述預(yù)設(shè)長(zhǎng)度;
若采用變長(zhǎng)分塊方式,所述若干個(gè)數(shù)據(jù)塊中部分?jǐn)?shù)據(jù)塊的長(zhǎng)度為所述預(yù)設(shè)長(zhǎng)度。
可選的,所述處理器在采用變長(zhǎng)分塊方式將待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊時(shí),具體用于:
將長(zhǎng)度為所述預(yù)設(shè)長(zhǎng)度的滑動(dòng)窗口在所述待存儲(chǔ)文件的數(shù)據(jù)中滑動(dòng);
每將所述滑動(dòng)窗口滑動(dòng)一個(gè)步長(zhǎng),判斷是否達(dá)到數(shù)據(jù)塊切分條件;
若達(dá)到數(shù)據(jù)塊切分條件,則將滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)確定為切分出的一個(gè)數(shù)據(jù)塊,并將所述滑動(dòng)窗口滑經(jīng)過(guò)的且未切分的數(shù)據(jù)段確定為數(shù)據(jù)塊。
可選的,所述處理器在判斷是否達(dá)到數(shù)據(jù)塊切分條件時(shí),具體用于:
計(jì)算所述滑動(dòng)窗口當(dāng)前覆蓋的目標(biāo)數(shù)據(jù)的校驗(yàn)和;在第三索引庫(kù)中查找是否存在所述校驗(yàn)和;所述第三索引庫(kù)中存儲(chǔ)有校驗(yàn)和與所述第一索引庫(kù)中包含的哈希值之間的對(duì)應(yīng)關(guān)系;若所述第三索引庫(kù)中存在所述校驗(yàn)和,確定達(dá)到數(shù)據(jù)塊切分條件。
可選的,所述處理器在采用變長(zhǎng)分塊方式將待存儲(chǔ)文件劃分為若干個(gè)數(shù)據(jù)塊時(shí),還用于,如果所述滑動(dòng)窗口滑經(jīng)過(guò)的數(shù)據(jù)段的長(zhǎng)度是否達(dá)到所述預(yù)設(shè)長(zhǎng)度,若將所述數(shù)據(jù)段確定為切分出的一個(gè)數(shù)據(jù)塊。
本申請(qǐng)所出現(xiàn)的術(shù)語(yǔ)“第一”、“第二”、“第三”“第四”等(如果存在)是用于區(qū)別類似的部分,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請(qǐng)的實(shí)施例能夠以除了在這里圖示的以外的順序?qū)嵤?/p>
對(duì)所公開的實(shí)施例的上述說(shuō)明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來(lái)說(shuō)將是顯而易見的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開的原理和新穎特點(diǎn)相一致的最寬的范圍。