本發(fā)明涉及信息存儲(chǔ)領(lǐng)域,尤其涉及基于分布式文件系統(tǒng)的多層重復(fù)數(shù)據(jù)刪除方法及裝置。
背景技術(shù):
現(xiàn)有的分布式文件系統(tǒng)中會(huì)使用重復(fù)數(shù)據(jù)刪除技術(shù)對(duì)重復(fù)數(shù)據(jù)進(jìn)行存儲(chǔ)以提高磁盤利用率,降低成本。但是隨著技術(shù)和信息的發(fā)展,文件變得越來越多樣化,整個(gè)文件內(nèi)容完全相同的幾率越來越小。例如,開發(fā)者會(huì)根據(jù)自己的需求對(duì)軟件做出針對(duì)性的修改,這種情況下,修改后的軟件與原軟件存在細(xì)微差異,現(xiàn)有的重復(fù)數(shù)據(jù)刪除方法對(duì)重復(fù)數(shù)據(jù)的刪除率較低。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的主要目的在于提供一種基于分布式文件系統(tǒng)的多層重復(fù)數(shù)據(jù)刪除方法及裝置,旨在提高對(duì)重復(fù)數(shù)據(jù)的刪除率。
為實(shí)現(xiàn)上述目的,本發(fā)明提供一種基于分布式文件系統(tǒng)的多層重復(fù)數(shù)據(jù)刪除方法,所述方法包括以下步驟:
獲取待寫入文件的數(shù)字指紋;
判斷全局文件數(shù)字指紋列表中是否存在所述待寫入文件的數(shù)字指紋;
若是,則記錄所述待寫入文件的元數(shù)據(jù)信息;
若否,則將待寫入文件按預(yù)設(shè)方式切片,并獲取每個(gè)切片的數(shù)字指紋;
判斷全局文件切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋;
若是,則將所述切片的元數(shù)據(jù)信息記錄到存儲(chǔ)節(jié)點(diǎn)中;
若否,則將所述切片及該切片的數(shù)字指紋發(fā)送到對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
優(yōu)選的,所述將所述切片及該切片的數(shù)字指紋發(fā)送到對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)之后還包括步驟:
判斷當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋;
若是,則確認(rèn)該切片寫入成功;
若否,則寫入所述切片,并將所述切片的數(shù)字指紋記錄到本存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表。
優(yōu)選的,所述將所述切片寫入磁盤,并將所述切片的數(shù)字指紋記錄到本存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表之后還包括步驟:
定時(shí)獲取系統(tǒng)負(fù)載;
當(dāng)系統(tǒng)負(fù)載低于預(yù)設(shè)值時(shí),將每個(gè)存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中的信息上傳至所述全局切片數(shù)字指紋列表。
優(yōu)選的,所述將待寫入文件按預(yù)設(shè)方式切片,并獲取每個(gè)切片的數(shù)字指紋具體包括步驟:
判斷所述待寫入文件的大小是否大于預(yù)設(shè)值;
若是,則將所述待寫入文件按預(yù)設(shè)大小切片;
若否,則將所述待寫入文件整體確定為一個(gè)切片。
優(yōu)選的,所述獲取待寫入文件的數(shù)字指紋具體包括步驟:
獲取所述待寫入文件的MD5校驗(yàn)值和sha值;
將所述MD5校驗(yàn)值和sha值的字符串疊加作為待寫入文件的數(shù)字指紋。
此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種基于分布式文件系統(tǒng)的多層重復(fù)數(shù)據(jù)刪除裝置,包括:
第一獲取模塊,用于獲取待寫入文件的數(shù)字指紋;
第一判斷模塊,用于判斷全局文件數(shù)字指紋列表中是否存在所述待寫入文件的數(shù)字指紋;
第一記錄模塊,用于在所述第一判斷模塊的判斷結(jié)果為“是”時(shí),記錄所述待寫入文件的元數(shù)據(jù)信息;
切片模塊,用于在所述第一判斷模塊的判斷結(jié)果為“否”時(shí),將待寫入文件按預(yù)設(shè)方式切片,并獲取每個(gè)切片的數(shù)字指紋;
第二判斷模塊,用于判斷全局文件切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋;
第二記錄模塊,用于在所述第二判斷模塊的判斷結(jié)果為“是”時(shí),將所述切片的元數(shù)據(jù)信息記錄到存儲(chǔ)節(jié)點(diǎn)中;
發(fā)送模塊,用于在所述第二判斷模塊的判斷結(jié)果為“否”時(shí),將所述切片及該切片的數(shù)字指紋發(fā)送到對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
優(yōu)選的,還包括:
第三判斷模塊,用于判斷當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋;
確認(rèn)模塊,用于在所述第三判斷模塊判斷為“是”時(shí)時(shí),確認(rèn)該切片寫入成功;
寫入模塊,用于在所述第三判斷模塊判斷為“否”時(shí),寫入所述切片,并將所述切片的數(shù)字指紋記錄到本存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表。
優(yōu)選的,還包括:
第二獲取模塊,用于定時(shí)獲取系統(tǒng)負(fù)載;
上傳模塊,用于在系統(tǒng)負(fù)載低于預(yù)設(shè)值時(shí),將每個(gè)存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中的信息上傳至所述全局切片數(shù)字指紋列表。
優(yōu)選的,所述切片模塊具體包括:
判斷單元,用于判斷所述待寫入文件的大小是否大于預(yù)設(shè)值;
切片單元,用于在所述判斷單元判斷為“是”時(shí),將所述待寫入文件按預(yù)設(shè)大小切片;
確定單元,用于在所述判斷單元判斷為“否”時(shí),將所述待寫入文件整體確定為一個(gè)切片。
優(yōu)選的,所述第一獲取模塊具體包括:
獲取單元,用于獲取所述待寫入文件的MD5校驗(yàn)值和sha值;
疊加單元,用于將所述MD5校驗(yàn)值和sha值的字符串疊加作為待寫入文件的數(shù)字指紋。
本發(fā)明的實(shí)施例包括以下步驟:獲取待寫入文件的數(shù)字指紋;判斷全局文件數(shù)字指紋列表中是否存在所述待寫入文件的數(shù)字指紋;若是,則記錄所述待寫入文件的元數(shù)據(jù)信息;若否,則將待寫入文件按預(yù)設(shè)方式切片,并獲取每個(gè)切片的數(shù)字指紋;判斷全局文件切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋;若是,則將所述切片的元數(shù)據(jù)信息記錄到存儲(chǔ)節(jié)點(diǎn)中;若否,則將所述切片及該切片的數(shù)字指紋發(fā)送到對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)。本發(fā)明的技術(shù)方案通過對(duì)文件或切片的數(shù)字指紋進(jìn)行存儲(chǔ),提高了對(duì)重復(fù)數(shù)據(jù)的刪除率,節(jié)約了存儲(chǔ)空間。
附圖說明
圖1為本發(fā)明的方法一實(shí)施例的流程示意圖;
圖2為本發(fā)明的方法第二實(shí)施例的流程示意圖;
圖3為本發(fā)明的方法第三實(shí)施例的流程示意圖;
圖4為本發(fā)明的裝置一實(shí)施例的功能模塊示意圖;
圖5為本發(fā)明的裝置第二實(shí)施例功能模塊示意圖;
圖6為本發(fā)明的裝置第四實(shí)施例中切片模塊的細(xì)化功能模塊示意圖。
本發(fā)明目的的實(shí)現(xiàn)、功能特點(diǎn)及優(yōu)點(diǎn)將結(jié)合實(shí)施例,參照附圖做進(jìn)一步說明。
具體實(shí)施方式
應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
本發(fā)明提供一種基于分布式文件系統(tǒng)的多層重復(fù)數(shù)據(jù)刪除方法。
分布式系統(tǒng)(distributed system)是建立在網(wǎng)絡(luò)之上的軟件系統(tǒng),具有高度的內(nèi)聚性和透明性。內(nèi)聚性是指每一個(gè)數(shù)據(jù)庫分布節(jié)點(diǎn)高度自治,有本地的數(shù)據(jù)庫管理系統(tǒng)。透明性是指每一個(gè)數(shù)據(jù)庫分布節(jié)點(diǎn)對(duì)用戶的應(yīng)用來說都是透明的,看不出是本地還是遠(yuǎn)程。在分布式數(shù)據(jù)庫系統(tǒng)中,用戶感覺不到數(shù)據(jù)是分布的,即用戶不須知道關(guān)系是否分割、有無副本、數(shù)據(jù)存于哪個(gè)站點(diǎn)以及事務(wù)在哪個(gè)站點(diǎn)上執(zhí)行等。獨(dú)立的計(jì)算機(jī)展現(xiàn)給用戶的是一個(gè)統(tǒng)一的整體,就好像是一個(gè)系統(tǒng),該系統(tǒng)擁有多種通用的物理和邏輯資源,可以動(dòng)態(tài)的分配任務(wù),分散的物理和邏輯資源通過計(jì)算機(jī)網(wǎng)絡(luò)實(shí)現(xiàn)信息交換。最典型的的分布式系統(tǒng)就是萬維網(wǎng)(World Wide Web)。
現(xiàn)在提出本申請(qǐng)的方法的第一實(shí)施例。如圖1所示,所述方法包括以下步驟:
S100、獲取待寫入文件的數(shù)字指紋。
數(shù)字指紋是根據(jù)文件的內(nèi)容生成的唯一性的數(shù)字編碼,常見的數(shù)字指紋通常有MD5(Message Digest Algorithm信息摘要算法第5版)、sha1(安全哈希算法Secure Hash Algorithm)等。每個(gè)文件通過預(yù)設(shè)的函數(shù)或算法生成唯一的數(shù)字指紋,由于函數(shù)和算法的唯一性,即使兩個(gè)文件中僅有細(xì)微差異,得到的數(shù)字指紋也相距甚遠(yuǎn),因此校驗(yàn)文件的數(shù)字指紋是判斷文件是否相同的可靠依據(jù)。
本實(shí)施例中,當(dāng)接收到來自客戶端的文件寫入請(qǐng)求時(shí),先獲取該待寫入文件的數(shù)字指紋。
S200、判斷全局文件數(shù)字指紋列表中是否存在所述待寫入文件的數(shù)字指紋;若是,則執(zhí)行S210步驟,若否,則執(zhí)行S220步驟。
進(jìn)一步的,當(dāng)在獲取所述待寫入文件的數(shù)字指紋后,在判斷全局文件數(shù)字指紋列表中是否存在相應(yīng)的數(shù)字指紋。這里的全局文件數(shù)字指紋列表指的是存儲(chǔ)有所述分布式文件系統(tǒng)中所有完整文件數(shù)字指紋的列表。若該全局文件數(shù)字指紋列表中存在待寫入文件的數(shù)字指紋,則原文件系統(tǒng)中存在數(shù)字指紋與待寫入文件數(shù)字指紋相同的文件,由數(shù)字指紋的唯一性可以確定,原文件系統(tǒng)中已經(jīng)存在與待寫入文件相同的文件,此時(shí)繼續(xù)執(zhí)行S210步驟;反之,若全局文件數(shù)字指紋列表中不存在待寫入文件的數(shù)字指紋,則原文件系統(tǒng)中存在數(shù)字指紋與待寫入文件數(shù)字指紋相同的文件,則證明原文件系統(tǒng)中不存在與待寫入文件相同的文件,此時(shí)繼續(xù)執(zhí)行S220步驟。
S210、記錄所述待寫入文件的元數(shù)據(jù)信息。
本實(shí)施例中,待寫入文件的元數(shù)據(jù)信息記錄于元數(shù)據(jù)服務(wù)器中。當(dāng)原文件系統(tǒng)中存在數(shù)字指紋與待寫入文件數(shù)字指紋相同的文件時(shí),顯然如果再次將待寫入文件上傳,則會(huì)重復(fù)占用空間,所以本實(shí)施例中并不將原文件上傳,而是直接在元數(shù)據(jù)服務(wù)器中記錄待寫入文件的元數(shù)據(jù),實(shí)現(xiàn)了被重復(fù)上傳的文件的刪除。由公知的解釋可知,元數(shù)據(jù)(Metadata),又稱中介數(shù)據(jù)、中繼數(shù)據(jù),主要是描述數(shù)據(jù)屬性(property)的信息,用來支持如指示存儲(chǔ)位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能。元數(shù)據(jù)算是一種電子式目錄,為了達(dá)到編制目錄的目的,必須在描述并收藏?cái)?shù)據(jù)的內(nèi)容或特色,進(jìn)而達(dá)成協(xié)助數(shù)據(jù)檢索的目的。簡(jiǎn)而言之,元數(shù)據(jù)就是描述數(shù)據(jù)的數(shù)據(jù)(data about data)。本實(shí)施例中,元數(shù)據(jù)主要包括系統(tǒng)中原有的與待寫入文件相同的文件的路徑和資源信息,待寫入文件的元數(shù)據(jù)記錄于元數(shù)據(jù)服務(wù)器中之后,再次調(diào)用待寫入文件時(shí),直接通過記錄的待寫入文件信息調(diào)用系統(tǒng)中原有的與待寫入文件相同的文件就可以獲取與待寫入文件完全相同的文件。通過記錄待寫入文件的元數(shù)據(jù)信息代替了現(xiàn)有技術(shù)中直接上傳文件,可以有效節(jié)約存儲(chǔ)空間和數(shù)據(jù)交換時(shí)間。
S220、將待寫入文件按預(yù)設(shè)方式切片,獲取每個(gè)切片的數(shù)字指紋,并執(zhí)行S300步驟。
當(dāng)全局文件數(shù)字指紋列表中不存在待寫入文件的數(shù)字指紋,則原文件系統(tǒng)中存在數(shù)字指紋與待寫入文件數(shù)字指紋相同的文件,則證明原文件系統(tǒng)中不存在與待寫入文件相同的文件。此時(shí),本實(shí)施例中進(jìn)一步將待寫入文件按預(yù)設(shè)方式切片。應(yīng)對(duì)理解的是,隨著技術(shù)和信息的發(fā)展,文件呈多樣性趨勢(shì)變化,基于同一文件會(huì)衍生出多種不同的版本。以操作系統(tǒng)為例,為公知熟知的Windows10操作系統(tǒng)(視窗操作系統(tǒng)10)包括區(qū)分為32位系統(tǒng)和64位系統(tǒng),進(jìn)一步的又區(qū)分為家庭版、企業(yè)版、專業(yè)版等多個(gè)版本,這些不同操作版本的部分文件內(nèi)容是完全相同的,其中每個(gè)鏡像文件的大小約為4GB,如果僅校驗(yàn)數(shù)字指紋,則上述6種不同版本的操作系統(tǒng)屬于不同的文件,存儲(chǔ)上述鏡像文件合計(jì)約存儲(chǔ)空間24GB,而其中重復(fù)數(shù)據(jù)占用了絕大部分空間。
本實(shí)施例中,進(jìn)一步將每個(gè)文件按照預(yù)設(shè)模式切片,將一個(gè)完整的文件分為若干個(gè)小的切片文件。在對(duì)文件切片完成后,按照預(yù)設(shè)算法或函數(shù)獲取每個(gè)切片的數(shù)字指紋,并進(jìn)一步執(zhí)行S300步驟。
S300、判斷全局文件切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋;若是,則執(zhí)行S310步驟,若否則執(zhí)行S320步驟。
獲取每個(gè)切片的數(shù)字指紋后,判斷全局文件切片數(shù)字指紋列表中是否存在與所述切片的數(shù)字指紋相同的數(shù)字指紋,顯然,如果存在,則證明存在相同的切片,反之則證明不存在相同的切片。當(dāng)存在相同的切片時(shí),執(zhí)行S310步驟,當(dāng)不存在相同的切片時(shí),執(zhí)行S320步驟。
S310、將所述切片的元數(shù)據(jù)信息記錄到存儲(chǔ)節(jié)點(diǎn)中。
當(dāng)分布式文件系統(tǒng)中存在相同的切片時(shí),將元數(shù)據(jù)信息記錄到相應(yīng)的存儲(chǔ)節(jié)點(diǎn)中。顯然,當(dāng)需要再次調(diào)用待寫入文件時(shí),通過調(diào)用待寫入文件的元數(shù)據(jù),獲取其切片的相關(guān)信息,并進(jìn)一步通過調(diào)用切片的元數(shù)據(jù)信息,獲取切片的存儲(chǔ)信息將原待寫入文件還原實(shí)現(xiàn)對(duì)原待寫入文件的調(diào)用。
S320、將所述切片及該切片的數(shù)字指紋發(fā)送到對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
當(dāng)分布式文件系統(tǒng)中不存在相同的切片時(shí),則將所述切片及該切片的數(shù)字指紋發(fā)送到對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn),并進(jìn)行存儲(chǔ)。
顯然本實(shí)施例中,如果需要存儲(chǔ)上述6個(gè)版本的操作系統(tǒng)的鏡像文件,在切片后,文件中絕大部分相同內(nèi)容的文件構(gòu)成的切片只需要存儲(chǔ)一次,構(gòu)成差異的切片文件需要單獨(dú)存儲(chǔ),則僅需要不到5GB的存儲(chǔ)空間就可以實(shí)現(xiàn)對(duì)原需要占用24GB存儲(chǔ)空間的文件的存儲(chǔ)。
本實(shí)施例中通過對(duì)文件的數(shù)字指紋的校驗(yàn),并進(jìn)一步通過對(duì)具有不同數(shù)字指紋的文件進(jìn)行切片并再次對(duì)切片的數(shù)字指紋進(jìn)行校驗(yàn),有效的避免了對(duì)重復(fù)數(shù)據(jù)的多次存儲(chǔ),節(jié)約了存儲(chǔ)空間。也相應(yīng)的節(jié)約了數(shù)據(jù)傳輸時(shí)間和數(shù)據(jù)存儲(chǔ)成本。
進(jìn)一步的,請(qǐng)參閱圖2,基于上述實(shí)施例,提出本發(fā)明方法的第二實(shí)施例。所述S320步驟之后還包括步驟:
S400判斷當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋;若是,則執(zhí)行S410步驟,若否,則執(zhí)行S420步驟。
S410確認(rèn)該切片寫入成功。
S420寫入所述切片,并將所述切片的數(shù)字指紋記錄到本存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表。
應(yīng)當(dāng)理解的是,本實(shí)施例中,每個(gè)存儲(chǔ)節(jié)點(diǎn)中設(shè)有該存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的切片數(shù)字指紋列表,當(dāng)切片發(fā)送至對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)之后,判斷當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋。如果當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中存在所述切片的數(shù)字指紋,則證明當(dāng)前存儲(chǔ)節(jié)點(diǎn)中已經(jīng)存儲(chǔ)有相同的切片,則只需要返回元數(shù)據(jù)服務(wù)器該切片以寫入成功。如果當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中不存在所述切片的數(shù)字指紋,則將該切片寫入磁盤。
如圖3所示,在基于本發(fā)明的方法上述第二實(shí)施例的第三實(shí)施例中,所述步驟S420之后還包括步驟:
S500、定時(shí)獲取系統(tǒng)負(fù)載。
S600、當(dāng)系統(tǒng)負(fù)載低于預(yù)設(shè)值時(shí),將每個(gè)存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中的信息上傳至所述全局切片數(shù)字指紋列表。
顯然,系統(tǒng)在運(yùn)行過程中,如果占用過多系統(tǒng)負(fù)載,則會(huì)影響數(shù)據(jù)和文件的存儲(chǔ)和傳輸速度,所有本實(shí)施例中,進(jìn)一步獲取系統(tǒng)的負(fù)載,并只有在系統(tǒng)負(fù)載低于某預(yù)設(shè)值時(shí)才進(jìn)行進(jìn)一步操作。本實(shí)施例中,當(dāng)系統(tǒng)負(fù)載低于預(yù)設(shè)值時(shí),將每個(gè)存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中的信息上傳至所述全局切片數(shù)字指紋列表。
在本發(fā)明的方法基于上述實(shí)施例的第四實(shí)施例中,所述步驟S220具體包括:
S221判斷所述待寫入文件的大小是否大于預(yù)設(shè)值;若是,則執(zhí)行S222步驟,若否,則執(zhí)行S223步驟。
S222將所述待寫入文件按預(yù)設(shè)大小切片。
S223將所述待寫入文件整體確定為一個(gè)切片。
應(yīng)當(dāng)理解的是,對(duì)于文件來說,如果切片較小,相對(duì)來說更容易查找到到相同的切片,但是相應(yīng)的,文件會(huì)被分割成更小的文件,則切片和獲取切片的數(shù)字指紋所需時(shí)間會(huì)更長(zhǎng)。而切片的大小相對(duì)較大的時(shí)候,由于切片數(shù)量較少,則切片時(shí)間和獲取切片數(shù)字指紋的時(shí)間均會(huì)相應(yīng)縮短,但是切片與現(xiàn)有切片相同的可能性會(huì)相對(duì)降低。具體使用時(shí)應(yīng)對(duì)根據(jù)需求而設(shè)定,具體的設(shè)定值可以是4MB、8MB、16MB、32MB等,其中優(yōu)選設(shè)定為64MB,一般設(shè)定為不超過4TB。
基于上述實(shí)施例,提出本發(fā)明方法的第五實(shí)施例,所述步驟S100具體包括:
S110獲取所述待寫入文件的MD5校驗(yàn)值和sha值。
S120將所述MD5校驗(yàn)值和sha值的字符串疊加作為待寫入文件的數(shù)字指紋。
應(yīng)當(dāng)理解的是,具體使用中,數(shù)字指紋的種類是多種多樣的,本實(shí)施例中,提供一種優(yōu)選的數(shù)字指紋,具體為獲取待寫入文件的MD5校驗(yàn)值記為x,并獲取待寫入文件的sha值,更為優(yōu)選的為sha1值,記為y,將兩個(gè)值的字符串疊加為xy作為該文件的數(shù)字指紋。以Win10正式版64位簡(jiǎn)體中文版原版鏡像文件為例,該文件的MD5值為2F8691F7FE2F569A70418A8633AC63F6記為x,sha1值為C71D49A6144772F352806201EF564951BE55EDD5記為y,將x和y串聯(lián)獲得2F8691F7FE2F569A70418A8633AC63F6C71D49A6144772F352806201EF564951BE55EDD5作為校驗(yàn)文字的數(shù)字指紋。
此外,為實(shí)現(xiàn)上述目的,本發(fā)明還提供一種基于分布式文件系統(tǒng)的多層重復(fù)數(shù)據(jù)刪除裝置,請(qǐng)參閱圖4,該裝置包括:
第一獲取模塊10,用于獲取待寫入文件的數(shù)字指紋。
數(shù)字指紋是根據(jù)文件的內(nèi)容生成的唯一性的數(shù)字編碼,常見的數(shù)字指紋通常有MD5(Message Digest Algorithm信息摘要算法第5版)、sha1(安全哈希算法Secure Hash Algorithm)等。每個(gè)文件通過預(yù)設(shè)的函數(shù)或算法生成唯一的數(shù)字指紋,由于函數(shù)和算法的唯一性,即使兩個(gè)文件中僅有細(xì)微差異,得到的數(shù)字指紋也相距甚遠(yuǎn),因此校驗(yàn)文件的數(shù)字指紋是判斷文件是否相同的可靠依據(jù)。
本實(shí)施例中,當(dāng)接收到來自客戶端的文件寫入請(qǐng)求時(shí),先獲取該待寫入文件的數(shù)字指紋。
第一判斷模塊20,用于判斷全局文件數(shù)字指紋列表中是否存在所述待寫入文件的數(shù)字指紋。
進(jìn)一步的,當(dāng)在獲取所述待寫入文件的數(shù)字指紋后,在判斷全局文件數(shù)字指紋列表中是否存在相應(yīng)的數(shù)字指紋。這里的全局文件數(shù)字指紋列表指的是存儲(chǔ)有所述分布式文件系統(tǒng)中所有完整文件數(shù)字指紋的列表。若該全局文件數(shù)字指紋列表中存在待寫入文件的數(shù)字指紋,則原文件系統(tǒng)中存在數(shù)字指紋與待寫入文件數(shù)字指紋相同的文件,由數(shù)字指紋的唯一性可以確定,原文件系統(tǒng)中已經(jīng)存在與待寫入文件相同的文件,此時(shí)繼續(xù)執(zhí)行S210步驟;反之,若全局文件數(shù)字指紋列表中不存在待寫入文件的數(shù)字指紋,則原文件系統(tǒng)中存在數(shù)字指紋與待寫入文件數(shù)字指紋相同的文件,則證明原文件系統(tǒng)中不存在與待寫入文件相同的文件,此時(shí)繼續(xù)執(zhí)行S220步驟。
第一記錄模塊30,用于在所述第一判斷模塊20的判斷結(jié)果為“是”時(shí),記錄所述待寫入文件的元數(shù)據(jù)信息。
本實(shí)施例中,待寫入文件的元數(shù)據(jù)信息記錄于元數(shù)據(jù)服務(wù)器中。當(dāng)原文件系統(tǒng)中存在數(shù)字指紋與待寫入文件數(shù)字指紋相同的文件時(shí),顯然如果再次將待寫入文件上傳,則會(huì)重復(fù)占用空間,所以本實(shí)施例中并不將原文件上傳,而是直接在元數(shù)據(jù)服務(wù)器中記錄待寫入文件的元數(shù)據(jù),實(shí)現(xiàn)了被重復(fù)上傳的文件的刪除。由公知的解釋可知,元數(shù)據(jù)(Metadata),又稱中介數(shù)據(jù)、中繼數(shù)據(jù),主要是描述數(shù)據(jù)屬性(property)的信息,用來支持如指示存儲(chǔ)位置、歷史數(shù)據(jù)、資源查找、文件記錄等功能。元數(shù)據(jù)算是一種電子式目錄,為了達(dá)到編制目錄的目的,必須在描述并收藏?cái)?shù)據(jù)的內(nèi)容或特色,進(jìn)而達(dá)成協(xié)助數(shù)據(jù)檢索的目的。簡(jiǎn)而言之,元數(shù)據(jù)就是描述數(shù)據(jù)的數(shù)據(jù)(data about data)。本實(shí)施例中,元數(shù)據(jù)主要包括系統(tǒng)中原有的與待寫入文件相同的文件的路徑和資源信息,待寫入文件的元數(shù)據(jù)記錄于元數(shù)據(jù)服務(wù)器中之后,再次調(diào)用待寫入文件時(shí),直接通過記錄的待寫入文件信息調(diào)用系統(tǒng)中原有的與待寫入文件相同的文件就可以獲取與待寫入文件完全相同的文件。通過記錄待寫入文件的元數(shù)據(jù)信息代替了現(xiàn)有技術(shù)中直接上傳文件,可以有效節(jié)約存儲(chǔ)空間和數(shù)據(jù)交換時(shí)間。
切片模塊40,用于在所述第一判斷模塊20的判斷結(jié)果為“否”時(shí),將待寫入文件按預(yù)設(shè)方式切片,并獲取每個(gè)切片的數(shù)字指紋。
當(dāng)全局文件數(shù)字指紋列表中不存在待寫入文件的數(shù)字指紋,則原文件系統(tǒng)中存在數(shù)字指紋與待寫入文件數(shù)字指紋相同的文件,則證明原文件系統(tǒng)中不存在與待寫入文件相同的文件。此時(shí),本實(shí)施例中進(jìn)一步將待寫入文件按預(yù)設(shè)方式切片。應(yīng)對(duì)理解的是,隨著技術(shù)和信息的發(fā)展,文件呈多樣性趨勢(shì)變化,基于同一文件會(huì)衍生出多種不同的版本。以操作系統(tǒng)為例,為公知熟知的Windows10操作系統(tǒng)(視窗操作系統(tǒng)10)包括區(qū)分為32位系統(tǒng)和64位系統(tǒng),進(jìn)一步的又區(qū)分為家庭版、企業(yè)版、專業(yè)版等多個(gè)版本,這些不同操作版本的部分文件內(nèi)容是完全相同的,其中每個(gè)鏡像文件的大小約為4GB,如果僅校驗(yàn)數(shù)字指紋,則上述6種不同版本的操作系統(tǒng)屬于不同的文件,存儲(chǔ)上述鏡像文件合計(jì)約存儲(chǔ)空間24GB,而其中重復(fù)數(shù)據(jù)占用了絕大部分空間。
本實(shí)施例中,進(jìn)一步將每個(gè)文件按照預(yù)設(shè)模式切片,將一個(gè)完整的文件分為若干個(gè)小的切片文件。在對(duì)文件切片完成后,按照預(yù)設(shè)算法或函數(shù)獲取每個(gè)切片的數(shù)字指紋。
第二判斷模塊50,用于在將待寫入文件按預(yù)設(shè)方式切片,并獲取每個(gè)切片的數(shù)字指紋后判斷全局文件切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋。
獲取每個(gè)切片的數(shù)字指紋后,判斷全局文件切片數(shù)字指紋列表中是否存在與所述切片的數(shù)字指紋相同的數(shù)字指紋,顯然,如果存在,則證明存在相同的切片,反之則證明不存在相同的切片。
第二記錄模塊60,用于在所述第二判斷模塊50的判斷結(jié)果為“是”時(shí),將所述切片的元數(shù)據(jù)信息記錄到存儲(chǔ)節(jié)點(diǎn)中。
當(dāng)分布式文件系統(tǒng)中存在相同的切片時(shí),將元數(shù)據(jù)信息記錄到相應(yīng)的存儲(chǔ)節(jié)點(diǎn)中。顯然,當(dāng)需要再次調(diào)用待寫入文件時(shí),通過調(diào)用待寫入文件的元數(shù)據(jù),獲取其切片的相關(guān)信息,并進(jìn)一步通過調(diào)用切片的元數(shù)據(jù)信息,獲取切片的存儲(chǔ)信息將原待寫入文件還原實(shí)現(xiàn)對(duì)原待寫入文件的調(diào)用。
發(fā)送模塊70,用于在所述第二判斷模塊50的判斷結(jié)果為“否”時(shí),將所述切片及該切片的數(shù)字指紋發(fā)送到對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)。
當(dāng)分布式文件系統(tǒng)中不存在相同的切片時(shí),則將所述切片及該切片的數(shù)字指紋發(fā)送到對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn),并進(jìn)行存儲(chǔ)。
顯然本實(shí)施例中,如果需要存儲(chǔ)上述6個(gè)版本的操作系統(tǒng)的鏡像文件,在切片后,文件中絕大部分相同內(nèi)容的文件構(gòu)成的切片只需要存儲(chǔ)一次,構(gòu)成差異的切片文件需要單獨(dú)存儲(chǔ),則僅需要不到5GB的存儲(chǔ)空間就可以實(shí)現(xiàn)對(duì)原需要占用24GB存儲(chǔ)空間的文件的存儲(chǔ)。
本實(shí)施例中通過對(duì)文件的數(shù)字指紋的校驗(yàn),并進(jìn)一步通過對(duì)具有不同數(shù)字指紋的文件進(jìn)行切片并再次對(duì)切片的數(shù)字指紋進(jìn)行校驗(yàn),有效的避免了對(duì)重復(fù)數(shù)據(jù)的多次存儲(chǔ),節(jié)約了存儲(chǔ)空間。也相應(yīng)的節(jié)約了數(shù)據(jù)傳輸時(shí)間和數(shù)據(jù)存儲(chǔ)成本。
進(jìn)一步的,請(qǐng)參閱圖5,基于上述實(shí)施例,提出本發(fā)明裝置的第二實(shí)施例。還包括:
第三判斷模塊80,用于判斷當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋。
確認(rèn)模塊90,用于在所述第三判斷模塊90的判斷結(jié)果為“是”時(shí),確認(rèn)該切片寫入成功。
寫入模塊100,用于在所述第三判斷模塊90的判斷結(jié)果為“否”時(shí),寫入所述切片,并將所述切片的數(shù)字指紋記錄到本存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表。
應(yīng)當(dāng)理解的是,本實(shí)施例中,每個(gè)存儲(chǔ)節(jié)點(diǎn)中設(shè)有該存儲(chǔ)節(jié)點(diǎn)對(duì)應(yīng)的切片數(shù)字指紋列表,當(dāng)切片發(fā)送至對(duì)應(yīng)的存儲(chǔ)節(jié)點(diǎn)之后,判斷當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中是否存在所述切片的數(shù)字指紋。如果當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中存在所述切片的數(shù)字指紋,則證明當(dāng)前存儲(chǔ)節(jié)點(diǎn)中已經(jīng)存儲(chǔ)有相同的切片,則只需要返回元數(shù)據(jù)服務(wù)器該切片以寫入成功。如果當(dāng)前存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中不存在所述切片的數(shù)字指紋,則將該切片寫入磁盤。
在基于本發(fā)明的裝置上述第二實(shí)施例的第三實(shí)施例中,還包括:
第二獲取模塊,用于定時(shí)獲取系統(tǒng)負(fù)載;
上傳模塊,用于在系統(tǒng)負(fù)載低于預(yù)設(shè)值時(shí),將每個(gè)存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中的信息上傳至所述全局切片數(shù)字指紋列表。
顯然,系統(tǒng)在運(yùn)行過程中,如果占用過多系統(tǒng)負(fù)載,則會(huì)影響數(shù)據(jù)和文件的存儲(chǔ)和傳輸速度,所有本實(shí)施例中,進(jìn)一步獲取系統(tǒng)的負(fù)載,并只有在系統(tǒng)負(fù)載低于某預(yù)設(shè)值時(shí)才進(jìn)行進(jìn)一步操作。本實(shí)施例中,當(dāng)系統(tǒng)負(fù)載低于預(yù)設(shè)值時(shí),將每個(gè)存儲(chǔ)節(jié)點(diǎn)的切片數(shù)字指紋列表中的信息上傳至所述全局切片數(shù)字指紋列表。
請(qǐng)進(jìn)一步參閱圖6,在本發(fā)明的裝置基于上述實(shí)施例的第四實(shí)施例中,所述切片模塊40具體包括:
判斷單元41,用于判斷所述待寫入文件的大小是否大于預(yù)設(shè)值;
切片單元42,用于在所述判斷單元41的判斷結(jié)果為“是”時(shí),將所述待寫入文件按預(yù)設(shè)大小切片;
確定單元43,用于在所述判斷單元41的判斷結(jié)果為“否”時(shí),將所述待寫入文件整體確定為一個(gè)切片。
應(yīng)當(dāng)理解的是,對(duì)于文件來說,如果切片較小,相對(duì)來說更容易查找到到相同的切片,但是相應(yīng)的,文件會(huì)被分割成更小的文件,則切片和獲取切片的數(shù)字指紋所需時(shí)間會(huì)更長(zhǎng)。而切片的大小相對(duì)較大的時(shí)候,由于切片數(shù)量較少,則切片時(shí)間和獲取切片數(shù)字指紋的時(shí)間均會(huì)相應(yīng)縮短,但是切片與現(xiàn)有切片相同的可能性會(huì)相對(duì)降低。具體使用時(shí)應(yīng)對(duì)根據(jù)需求而設(shè)定,具體的設(shè)定值可以是4MB、8MB、16MB、32MB等,其中優(yōu)選設(shè)定為64MB,一般設(shè)定為不超過4TB。
基于上述實(shí)施例,提出本發(fā)明裝置的第五實(shí)施例,所述第一獲取模塊10具體包括:
獲取單元,用于獲取所述待寫入文件的MD5校驗(yàn)值和sha值;
疊加單元,用于將所述MD5校驗(yàn)值和sha值的字符串疊加作為待寫入文件的數(shù)字指紋。
應(yīng)當(dāng)理解的是,具體使用中,數(shù)字指紋的種類是多種多樣的,本實(shí)施例中,提供一種優(yōu)選的數(shù)字指紋,具體為獲取待寫入文件的MD5校驗(yàn)值記為x,并獲取待寫入文件的sha值,更為優(yōu)選的為sha1值,記為y,將兩個(gè)值的字符串疊加為xy作為該文件的數(shù)字指紋。以Win10正式版64位簡(jiǎn)體中文版原版鏡像文件為例,該文件的MD5值為2F8691F7FE2F569A70418A8633AC63F6記為x,sha1值為C71D49A6144772F352806201EF564951BE55EDD5記為y,將x和y串聯(lián)獲得2F8691F7FE2F569A70418A8633AC63F6C71D49A6144772F352806201EF564951BE55EDD5作為校驗(yàn)文字的數(shù)字指紋。
以上僅為本發(fā)明的優(yōu)選實(shí)施例,并非因此限制本發(fā)明的專利范圍,凡是利用本發(fā)明說明書及附圖內(nèi)容所作的等效結(jié)構(gòu)或等效流程變換,或直接或間接運(yùn)用在其他相關(guān)的技術(shù)領(lǐng)域,均同理包括在本發(fā)明的專利保護(hù)范圍內(nèi)。