專利名稱::一種基于位置敏感哈希的刪冗塊設(shè)備存儲方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及數(shù)據(jù)存儲
技術(shù)領(lǐng)域:
,特別涉及一種基于位置敏感哈希的刪冗塊設(shè)備存儲方法。
背景技術(shù):
:隨著數(shù)字信息量的爆炸式增長,數(shù)據(jù)占用空間越來越大;在過去的10年里,很多行業(yè)提供的存儲系統(tǒng)容量從數(shù)十GB發(fā)展到數(shù)百TB,甚至數(shù)PB,足足翻了10,000多倍。隨著數(shù)據(jù)的指數(shù)級增長,企業(yè)面臨的快速備份和恢復(fù)的時間點越來越多,管理保存數(shù)據(jù)的成本越來越高,數(shù)據(jù)中心的空間和電能耗費也變得越來越多。研究發(fā)現(xiàn),應(yīng)用系統(tǒng)所保存的數(shù)據(jù),高達60%是冗余的,而且隨著時間的推移越來越嚴重。為了緩解存儲系統(tǒng)的空間增長問題,縮減數(shù)據(jù)占用空間,降低成本、最大程度的利用已有資源,冗余數(shù)據(jù)刪除技術(shù)(簡稱刪冗技術(shù))就應(yīng)運而生了。一方面,利用刪冗技術(shù),可以對存儲空間的利用率進行優(yōu)化。傳統(tǒng)的數(shù)據(jù)壓縮技術(shù)主要根據(jù)一些固定的模式利用傳統(tǒng)的數(shù)據(jù)分析工具和技術(shù)來消除重復(fù)數(shù)據(jù),不能有效地改善基于磁盤數(shù)據(jù)的成本效益,所以需要通過探究重復(fù)數(shù)據(jù)的特性,利用相應(yīng)的刪冗技術(shù),以消除分布在存儲系統(tǒng)中的相同文件或者數(shù)據(jù)塊。另一方面,利用刪冗技術(shù),可以減少在網(wǎng)絡(luò)中傳輸?shù)臄?shù)據(jù)量,進而降低能量消耗和網(wǎng)絡(luò)成本。刪冗技術(shù)的目標是消除分布在存儲系統(tǒng)中的相同及相似文件或者數(shù)據(jù)塊,因此能夠減少大量的磁盤消耗,并且為數(shù)據(jù)復(fù)制大大節(jié)省網(wǎng)絡(luò)帶寬。刪冗技術(shù)可以廣泛用于虛擬機存儲、文件服務(wù)器、郵件服務(wù)器、磁盤備份、社區(qū)網(wǎng)絡(luò)等諸多應(yīng)用領(lǐng)域。傳統(tǒng)上刪冗技術(shù)不作為主存儲系統(tǒng)使用,但近年來,隨著云存儲等技術(shù)的發(fā)展,以刪冗技術(shù)構(gòu)建主存儲系統(tǒng)成為了一個重要的技術(shù)課題,以刪冗技術(shù)構(gòu)建的主存儲系統(tǒng)簡稱為刪冗存儲系統(tǒng)。塊設(shè)備是最基本的存儲設(shè)備,廣泛應(yīng)用與SAN(StorageAreaNetwork,存儲區(qū)域網(wǎng)絡(luò))、NAS(NetworkAttachedStorage,網(wǎng)絡(luò)附屬存儲)等各種存儲系統(tǒng)中,但是構(gòu)建支持內(nèi)嵌刪冗的塊設(shè)備存儲系統(tǒng)時,面臨兩個重大的技術(shù)挑戰(zhàn)(I)作為底層塊設(shè)備刪冗結(jié)果如何通知上層系統(tǒng),并且如何兼容已有不支持刪冗的上層存儲系統(tǒng)。(2)存儲系統(tǒng)對塊設(shè)備性能要求很高,而刪冗會產(chǎn)生大量計算開銷,以及增加大量刪冗元數(shù)據(jù),并且在寫數(shù)據(jù)時需要查找寫的數(shù)據(jù)是否在系統(tǒng)中,這會明顯增大寫數(shù)據(jù)的時間開銷。
發(fā)明內(nèi)容(一)要解決的技術(shù)問題本發(fā)明要解決的技術(shù)問題是如何提供一種基于位置敏感哈希的刪冗塊設(shè)備存儲方法,以減少刪冗寫操作過程訪問元數(shù)據(jù)的時間開銷,保證塊設(shè)備的性能要求。(二)技術(shù)方案為解決上述技術(shù)問題,本發(fā)明提供一種基于位置敏感哈希的刪冗塊設(shè)備存儲方法,其包括步驟B:獲取發(fā)起刪冗寫操作的進程ID,根據(jù)所述進程ID判斷是否存在對應(yīng)所述刪冗寫操作的刪冗隊列,如果是,將所述刪冗隊列作為當前工作隊列,執(zhí)行步驟C;否則,創(chuàng)建新的刪冗隊列作為當前工作隊列,執(zhí)行步驟C;C:將所述刪冗寫操作的數(shù)據(jù)分成多個數(shù)據(jù)塊,計算每個所述數(shù)據(jù)塊的數(shù)字指紋,將所述數(shù)據(jù)塊和相應(yīng)的數(shù)字指紋放入所述當前工作隊列;D:判斷所述當前工作隊列中所述數(shù)據(jù)塊的數(shù)量是否超過閾值,如果是,將所述閾值個所述數(shù)據(jù)塊出隊列后作為一個數(shù)據(jù)段,執(zhí)行步驟F;否則,執(zhí)行步驟E;E:判斷隊首的所述數(shù)據(jù)塊的等待時間是否超過預(yù)定時間,如果是,將所述當前工作隊列中所有所述數(shù)據(jù)塊出隊列后作為一個數(shù)據(jù)段,執(zhí)行步驟F;否則,執(zhí)行步驟D;F:計算所述數(shù)據(jù)段的位置敏感哈希函數(shù)值,根據(jù)所述位置敏感哈希函數(shù)值判斷是否存在所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,如果存在,執(zhí)行步驟G;否則,創(chuàng)建一個空集合作為所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,執(zhí)行步驟G;G:依次判斷所述數(shù)據(jù)段中的各所述數(shù)據(jù)塊的數(shù)字指紋是否存在于所述相似數(shù)據(jù)段元數(shù)據(jù)集合中,如果是,修改所述數(shù)據(jù)塊的存儲地址為所述數(shù)據(jù)指紋在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中對應(yīng)的元數(shù)據(jù)的存儲地址;否則,在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中生成所述數(shù)據(jù)塊的元數(shù)據(jù),所述元數(shù)據(jù)包括所述數(shù)據(jù)塊的數(shù)字指紋和存儲地址。優(yōu)選地,在所述步驟B之前還包括步驟A:在塊設(shè)備層增加刪冗寫操作,判斷當前寫操作的類型是否是刪冗寫操作,如果是,執(zhí)行步驟B;否則,直接將所述當前寫操作的數(shù)據(jù)寫入二級存儲。優(yōu)選地,所述步驟B具體包括步驟BI:獲取發(fā)起刪冗寫操作的進程ID,將所述刪冗寫操作的數(shù)據(jù)加入緩存,將通用設(shè)備層的I/O完成函數(shù)的狀態(tài)設(shè)置為待處理;B2:根據(jù)所述進程ID判斷是否存在對應(yīng)所述刪冗寫操作的刪冗隊列,如果是,將所述刪冗隊列作為當前工作隊列,執(zhí)行步驟C;否則,創(chuàng)建新的刪冗隊列作為當前工作隊列,執(zhí)行步驟C。優(yōu)選地,所述步驟C具體包括步驟將所述刪冗寫操作的數(shù)據(jù)按照預(yù)定大小分成多個數(shù)據(jù)塊,計算所述數(shù)據(jù)塊的安全哈希函數(shù)值作為所述數(shù)據(jù)塊的數(shù)字指紋,將所述數(shù)據(jù)塊和相應(yīng)的數(shù)字指紋放入所述當前工作隊列。優(yōu)選地,所述步驟D中,所述閾值為100。優(yōu)選地,所述步驟E中,所述預(yù)定時間為5秒。優(yōu)選地,所述步驟F具體包括步驟Fl:使用bloomfilter對所述數(shù)據(jù)段進行歸一化處理,生成定長度數(shù)據(jù)塊特征向量;F2:根據(jù)所述定長度數(shù)據(jù)塊特征向量,通過基于p-stable的位置敏感哈希函數(shù)計算得到所述數(shù)據(jù)段的位置敏感哈希函數(shù)值;F3:根據(jù)所述位置敏感哈希函數(shù)值判斷二級存儲中是否存在所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,如果存在,執(zhí)行步驟G;否則,創(chuàng)建一個空集合作為所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,執(zhí)行步驟G。優(yōu)選地,所述步驟G具體包括步驟Gl:依次判斷所述數(shù)據(jù)段中的各所述數(shù)據(jù)塊的數(shù)字指紋是否存在于所述相似數(shù)據(jù)段元數(shù)據(jù)集合中,如果是,執(zhí)行步驟G2;否則,執(zhí)行步驟G3;G2:修改所述數(shù)據(jù)塊的存儲地址為所述數(shù)據(jù)指紋在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中對應(yīng)的元數(shù)據(jù)的存儲地址,將所述元數(shù)據(jù)的引用值加1,將所述I/O完成函數(shù)的狀態(tài)設(shè)置為修改后的,返回所述數(shù)據(jù)塊的原存儲地址和修改后的存儲地址,將所述相似數(shù)據(jù)段元數(shù)據(jù)集合寫回所述二級存儲;G3:在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中生成所述數(shù)據(jù)塊的元數(shù)據(jù),將所述I/O完成函數(shù)的狀態(tài)設(shè)置為完成,將所述相似數(shù)據(jù)段元數(shù)據(jù)集合寫回所述二級存儲;所述元數(shù)據(jù)包括所述數(shù)據(jù)塊的數(shù)字指紋、存儲地址和引用值,所述引用值的初值為I。(三)有益效果本發(fā)明的所述基于位置敏感哈希的刪冗塊設(shè)備存儲方法,具有以下優(yōu)勢所述方法通過將刪冗寫操作根據(jù)進程ID分組,有效利用同一進程特定時間對同一文件操作帶來的數(shù)據(jù)局部性,為實現(xiàn)相似數(shù)據(jù)段刪冗提供基礎(chǔ),進而利用位置敏感哈希函數(shù)將相似元數(shù)據(jù)集合映射到相同的哈??臻g位置,快速并準確地識別出相似數(shù)據(jù)段,既有效降低了刪冗寫操作使用內(nèi)存的次數(shù),又實現(xiàn)了對元數(shù)據(jù)集合的快速訪問,減少了刪冗寫操作過程訪問元數(shù)據(jù)的時間開銷,有效保證了刪冗塊設(shè)備寫操作性能;所述方法既可以使支持刪冗塊設(shè)備的上層存儲系統(tǒng)方便使用塊設(shè)備內(nèi)嵌刪冗功能,也使已有不支持刪冗塊設(shè)備的上層存儲系統(tǒng)可以將本設(shè)備作為通用塊設(shè)備使用,并且上層存儲系統(tǒng)靈活使用刪冗寫操作,即可減少存儲空間使用,也可以保證重要數(shù)據(jù)的多個副本不被刪冗;所述方法通過增加兩個I/O完成函數(shù)的狀態(tài),在不修改現(xiàn)有寫流程的基礎(chǔ)上,支持刪冗結(jié)果返回上層存儲系統(tǒng),最小化上層存儲系統(tǒng)使用刪冗塊設(shè)備帶來的改動。圖I是本發(fā)明的基于位置敏感哈希的刪冗塊設(shè)備存儲方法流程圖;圖2是相似數(shù)據(jù)段元數(shù)據(jù)集合索引表示意圖。具體實施例方式下面結(jié)合附圖和實施例,對本發(fā)明的具體實施方式作進一步詳細描述。以下實施例用于說明本發(fā)明,但不用來限制本發(fā)明的范圍。圖I是本發(fā)明的基于位置敏感哈希的刪冗塊設(shè)備存儲方法流程圖。如圖I所示,所述方法包括步驟A:在塊設(shè)備層增加刪冗寫操作,判斷當前寫操作的類型是否是刪冗寫操作,如果是,執(zhí)行步驟B;否則,直接將所述當前寫操作的數(shù)據(jù)寫入二級存儲,即執(zhí)行現(xiàn)有的寫操作。所述步驟A中,未改變原有的讀、寫操作,可以保證已有的不支持刪冗塊設(shè)備的存儲系統(tǒng)仍然可以按照普通塊設(shè)備方式使用刪冗塊設(shè)備;而支持刪冗塊設(shè)備的存儲系統(tǒng),則可以根據(jù)需要選擇使用刪冗寫操作,讓刪冗塊設(shè)備對寫入的數(shù)據(jù)進行內(nèi)嵌刪冗。這樣,上層存儲系統(tǒng)對于重要的需要保存多個副本的數(shù)據(jù),可以仍然使用現(xiàn)有的非刪冗的寫操作,避免刪冗塊設(shè)備將多個相同副本數(shù)據(jù)刪掉只保留一份,以保證上層系統(tǒng)對數(shù)據(jù)可靠性的要求。B:獲取發(fā)起刪冗寫操作的進程ID(identity,標識號碼),根據(jù)所述進程ID判斷是否存在對應(yīng)所述刪冗寫操作的刪冗隊列,如果是,將所述刪冗隊列作為當前工作隊列,執(zhí)行步驟C;否則,創(chuàng)建新的刪冗隊列作為當前工作隊列,執(zhí)行步驟C,這里新創(chuàng)建的刪冗隊列通過所述進程ID與所述刪冗寫操作相對應(yīng)。上層存儲系統(tǒng)為了有效提高訪問存儲設(shè)備的性能,一般盡可能采用順序讀、寫操作,上層存儲系統(tǒng)通過建立文件緩存等方法提高對塊設(shè)備層順序訪問比例。因此,塊設(shè)備層如果能利用經(jīng)常出現(xiàn)的數(shù)據(jù)段順序訪問模式,將連續(xù)訪問的數(shù)據(jù)塊元數(shù)據(jù)組織在一起,則可以實現(xiàn)多個元數(shù)據(jù)的連續(xù)訪問,這樣將大大減少對元數(shù)據(jù)進行訪問時帶來的磁盤隨機訪問次數(shù),有效提高元數(shù)據(jù)處理性能。通常上層存儲系統(tǒng)的一個進程在某個時間點上對一個文件進行操作,因此根據(jù)發(fā)起刪冗寫操作的進程ID進行分組,可以得到對一個文件連續(xù)訪問的數(shù)據(jù)段,這種對一個文件連續(xù)訪問的模式以后也會以很高概率重復(fù)出現(xiàn)。所述步驟B具體包括步驟BI:獲取發(fā)起刪冗寫操作的進程ID,將所述刪冗寫操作的數(shù)據(jù)加入緩存,將通用設(shè)備層的1/0(輸入/輸出)完成函數(shù)的狀態(tài)設(shè)置為待處理。本發(fā)明為I/O完成函數(shù)增加待處理狀態(tài)和修改后的狀態(tài)(下述步驟G2中),即保證了不對通用塊設(shè)備寫流程做太大改可以根據(jù)刪冗結(jié)果做相應(yīng)處理。這個流程也與通用塊設(shè)備寫操作(即現(xiàn)有寫操作)流程相符,最小化了上層存儲系統(tǒng)支持刪冗塊設(shè)備所需要的修改。所述刪冗寫操作由獨立的刪冗線程完成。B2:所述刪冗線程根據(jù)所述進程ID判斷是否存在對應(yīng)所述刪冗寫操作的刪冗隊列,如果是,將所述刪冗隊列作為當前工作隊列,執(zhí)行步驟C;否則,創(chuàng)建新的刪冗隊列作為當前工作隊列,執(zhí)行步驟C。C:將所述刪冗寫操作的數(shù)據(jù)按照預(yù)定大小分成多個數(shù)據(jù)塊,計算所述數(shù)據(jù)塊的安全哈希函數(shù)值作為所述數(shù)據(jù)塊的數(shù)字指紋,將所述數(shù)據(jù)塊、相應(yīng)的數(shù)字指紋以及當前時間戳放入所述當前工作隊列。所述安全哈希函數(shù)值采用SHA(SecureHashAlgorithm,安全散列算法)-1或者SHA-256。D:判斷所述當前工作隊列中所述數(shù)據(jù)塊的數(shù)量是否超過閾值,如果是,將所述閾值個所述數(shù)據(jù)塊出隊列后作為一個數(shù)據(jù)段,執(zhí)行步驟F;否則,執(zhí)行步驟E。所述閾值一般為100個左右。E:判斷隊首的所述數(shù)據(jù)塊的等待時間是否超過預(yù)定時間,如果是,將所述當前工作隊列中所有所述數(shù)據(jù)塊出隊列后作為一個數(shù)據(jù)段,執(zhí)行步驟F;否則,執(zhí)行步驟D。所述預(yù)定時間為5秒。這里采用了一個超時監(jiān)控線程,定期計算隊首的所述數(shù)據(jù)塊的時間戳與當前時間之差,以判斷隊首的所述數(shù)據(jù)塊是否超時。F:計算所述數(shù)據(jù)段的位置敏感哈希函數(shù)值,根據(jù)所述位置敏感哈希函數(shù)值判斷是否存在所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,如果存在,執(zhí)行步驟G;否則,創(chuàng)建一個空集合作為所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,執(zhí)行步驟G。位置敏感哈希函數(shù)值(即LocationSensitiveHash,LSH)與一般的哈希函數(shù)值不同的是位置敏感性,也就是散列前的相似點經(jīng)過哈希之后,也能夠在一定程度上相似,并且具有一定的概率保證。因此,使用合適的位置敏感哈希函數(shù)值可以將相似的數(shù)據(jù)段映射到哈希值空間的相近位置,從而保證了相似數(shù)據(jù)段組織和識別的要求。所述步驟F具體包括步驟Fl:使用bloomfilter(一種二進制向量數(shù)據(jù)結(jié)構(gòu))對所述數(shù)據(jù)段進行歸一化處理,生成定長度數(shù)據(jù)塊特征向量;F2:根據(jù)所述定長度數(shù)據(jù)塊特征向量,通過基于p-stable的位置敏感哈希函數(shù)計算得到所述數(shù)據(jù)段的位置敏感哈希函數(shù)值;F3:根據(jù)所述位置敏感哈希函數(shù)值判斷二級存儲中是否存在所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,如果存在,執(zhí)行步驟G;否則,創(chuàng)建一個空集合作為所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,執(zhí)行步驟G。圖2是相似數(shù)據(jù)段元數(shù)據(jù)集合索引表示意圖,如圖2所示,在內(nèi)存中維護一個相似數(shù)據(jù)段元數(shù)據(jù)集合索引表,表中存有所述數(shù)據(jù)段的位置敏感哈希函數(shù)值和相應(yīng)的相似數(shù)據(jù)段元數(shù)據(jù)集合的地址,根據(jù)相似數(shù)據(jù)段元數(shù)據(jù)集合的地址可以在外部存儲(即二級存儲)上查找到相似數(shù)據(jù)段元數(shù)據(jù)集合,進而執(zhí)行步驟G。G:依次判斷所述數(shù)據(jù)段中的各所述數(shù)據(jù)塊的數(shù)字指紋是否存在于所述相似數(shù)據(jù)段元數(shù)據(jù)集合中,如果是,修改所述數(shù)據(jù)塊的存儲地址為所述數(shù)據(jù)指紋在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中對應(yīng)的元數(shù)據(jù)的存儲地址;否則,在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中生成所述數(shù)據(jù)塊的元數(shù)據(jù),所述元數(shù)據(jù)包括所述數(shù)據(jù)塊的數(shù)字指紋和存儲地址。在進行所述數(shù)據(jù)段中各數(shù)據(jù)塊的查詢時,如果能夠找到一個小的集合,僅僅對該集合中元素進行數(shù)據(jù)查詢的結(jié)果就能夠與在整個數(shù)據(jù)集合中進行數(shù)據(jù)查詢的結(jié)果在概率上相同,則可以提高數(shù)據(jù)查詢的效率。本發(fā)明正是利用了這一點,將相似數(shù)據(jù)段(也就是包含有一定數(shù)量相似數(shù)據(jù)塊的數(shù)據(jù)段)放在一起構(gòu)成相似數(shù)據(jù)段元數(shù)據(jù)集合,從而查找該相似數(shù)據(jù)段元數(shù)據(jù)集合就可與查找所有數(shù)據(jù)段達到類似的刪冗效果。所述步驟G具體包括步驟Gl:依次判斷所述數(shù)據(jù)段中的各所述數(shù)據(jù)塊的數(shù)字指紋是否存在于所述相似數(shù)據(jù)段元數(shù)據(jù)集合中,如果是,說明二級存儲中已經(jīng)有了相同內(nèi)容的數(shù)據(jù)塊,不需要再次寫入,從而執(zhí)行步驟G2;否則,說明所述數(shù)據(jù)塊是新的,執(zhí)行步驟G3;G2:修改所述數(shù)據(jù)塊的存儲地址為所述數(shù)據(jù)指紋在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中對應(yīng)的元數(shù)據(jù)的存儲地址,將所述元數(shù)據(jù)的引用值加1,將所述I/O完成函數(shù)的狀態(tài)設(shè)置為修改后的,返回所述數(shù)據(jù)塊的原存儲地址和修改后的存儲地址,將所述相似數(shù)據(jù)段元數(shù)據(jù)集合寫回所述二級存儲。如果所述相似數(shù)據(jù)段元數(shù)據(jù)集合的存儲地址改變,相應(yīng)修改所述相似數(shù)據(jù)段元數(shù)據(jù)集合索引表。G3:在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中生成所述數(shù)據(jù)塊的元數(shù)據(jù),將所述I/O完成函數(shù)的狀態(tài)設(shè)置為完成;所述元數(shù)據(jù)包括所述數(shù)據(jù)塊的數(shù)字指紋、存儲地址和引用值,所述引用值的初值為I。然后,將所述相似數(shù)據(jù)段元數(shù)據(jù)集合寫回所述二級存儲。如果所述相似數(shù)據(jù)段元數(shù)據(jù)集合的存儲地址改變,相應(yīng)修改所述相似數(shù)據(jù)段元數(shù)據(jù)集合索引表。本發(fā)明實施例所述基于位置敏感哈希的刪冗塊設(shè)備存儲方法,具有一下優(yōu)勢所述方法通過將刪冗寫操作根據(jù)進程ID分組,有效利用同一進程特定時間對同一文件操作帶來的數(shù)據(jù)局部性,為實現(xiàn)相似數(shù)據(jù)段刪冗提供基礎(chǔ),進而利用位置敏感哈希函數(shù)將相似元數(shù)據(jù)集合映射到相同的哈希空間位置,快速并準確地識別出相似數(shù)據(jù)段,既有效降低了刪冗寫操作使用內(nèi)存的次數(shù),又實現(xiàn)了對元數(shù)據(jù)集合的快速訪問,減少了刪冗寫操作過程訪問元數(shù)據(jù)的時間開銷,有效保證了刪冗塊設(shè)備寫操作性能;所述方法既可以使支持刪冗塊設(shè)備的上層存儲系統(tǒng)方便使用塊設(shè)備內(nèi)嵌刪冗功能,也使已有不支持刪冗塊設(shè)備的上層存儲系統(tǒng)可以將本設(shè)備作為通用塊設(shè)備使用,并且上層存儲系統(tǒng)靈活使用刪冗寫操作,即可減少存儲空間使用,也可以保證重要數(shù)據(jù)的多個副本不被刪冗;所述方法通過增加兩個I/o完成函數(shù)的狀態(tài),在不修改現(xiàn)有寫流程的基礎(chǔ)上,支持刪冗結(jié)果返回上層存儲系統(tǒng),最小化上層存儲系統(tǒng)使用刪冗塊設(shè)備帶來的改動。以上實施方式僅用于說明本發(fā)明,而并非對本發(fā)明的限制,有關(guān)
技術(shù)領(lǐng)域:
的普通技術(shù)人員,在不脫離本發(fā)明的精神和范圍的情況下,還可以做出各種變化和變型,因此所有等同的技術(shù)方案也屬于本發(fā)明的范疇,本發(fā)明的專利保護范圍應(yīng)由權(quán)利要求限定。權(quán)利要求1.一種基于位置敏感哈希的刪冗塊設(shè)備存儲方法,其特征在于,包括步驟B:獲取發(fā)起刪冗寫操作的進程ID,根據(jù)所述進程ID判斷是否存在對應(yīng)所述刪冗寫操作的刪冗隊列,如果是,將所述刪冗隊列作為當前工作隊列,執(zhí)行步驟C;否則,創(chuàng)建新的刪冗隊列作為當前工作隊列,執(zhí)行步驟C;C:將所述刪冗寫操作的數(shù)據(jù)分成多個數(shù)據(jù)塊,計算每個所述數(shù)據(jù)塊的數(shù)字指紋,將所述數(shù)據(jù)塊和相應(yīng)的數(shù)字指紋放入所述當前工作隊列;D:判斷所述當前工作隊列中所述數(shù)據(jù)塊的數(shù)量是否超過閾值,如果是,將所述閾值個所述數(shù)據(jù)塊出隊列后作為一個數(shù)據(jù)段,執(zhí)行步驟F;否則,執(zhí)行步驟E;E:判斷隊首的所述數(shù)據(jù)塊的等待時間是否超過預(yù)定時間,如果是,將所述當前工作隊列中所有所述數(shù)據(jù)塊出隊列后作為一個數(shù)據(jù)段,執(zhí)行步驟F;否則,執(zhí)行步驟D;F:計算所述數(shù)據(jù)段的位置敏感哈希函數(shù)值,根據(jù)所述位置敏感哈希函數(shù)值判斷是否存在所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,如果存在,執(zhí)行步驟G;否則,創(chuàng)建一個空集合作為所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,執(zhí)行步驟G;G:依次判斷所述數(shù)據(jù)段中的各所述數(shù)據(jù)塊的數(shù)字指紋是否存在于所述相似數(shù)據(jù)段元數(shù)據(jù)集合中,如果是,修改所述數(shù)據(jù)塊的存儲地址為所述數(shù)據(jù)指紋在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中對應(yīng)的元數(shù)據(jù)的存儲地址;否則,在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中生成所述數(shù)據(jù)塊的元數(shù)據(jù),所述元數(shù)據(jù)包括所述數(shù)據(jù)塊的數(shù)字指紋和存儲地址。2.如權(quán)利要求I所述的方法,其特征在于,在所述步驟B之前還包括步驟A:在塊設(shè)備層增加刪冗寫操作,判斷當前寫操作的類型是否是刪冗寫操作,如果是,執(zhí)行步驟B;否則,直接將所述當前寫操作的數(shù)據(jù)寫入二級存儲。3.如權(quán)利要求I所述的方法,其特征在于,所述步驟B具體包括步驟BI:獲取發(fā)起刪冗寫操作的進程ID,將所述刪冗寫操作的數(shù)據(jù)加入緩存,將通用設(shè)備層的I/O完成函數(shù)的狀態(tài)設(shè)置為待處理;B2:根據(jù)所述進程ID判斷是否存在對應(yīng)所述刪冗寫操作的刪冗隊列,如果是,將所述刪冗隊列作為當前工作隊列,執(zhí)行步驟C;否則,創(chuàng)建新的刪冗隊列作為當前工作隊列,執(zhí)行步驟C。4.如權(quán)利要求3所述的方法,其特征在于,所述步驟C具體包括步驟將所述刪冗寫操作的數(shù)據(jù)按照預(yù)定大小分成多個數(shù)據(jù)塊,計算所述數(shù)據(jù)塊的安全哈希函數(shù)值作為所述數(shù)據(jù)塊的數(shù)字指紋,將所述數(shù)據(jù)塊和相應(yīng)的數(shù)字指紋放入所述當前工作隊列。5.如權(quán)利要求4述的方法,其特征在于,所述步驟D中,所述閾值為100。6.如權(quán)利要求4所述的方法,其特征在于,所述步驟E中,所述預(yù)定時間為5秒。7.如權(quán)利要求4所述的方法,其特征在于,所述步驟F具體包括步驟Fl:使用bloomfilter對所述數(shù)據(jù)段進行歸一化處理,生成定長度數(shù)據(jù)塊特征向量;F2:根據(jù)所述定長度數(shù)據(jù)塊特征向量,通過基于p-stable的位置敏感哈希函數(shù)計算得到所述數(shù)據(jù)段的位置敏感哈希函數(shù)值;F3:根據(jù)所述位置敏感哈希函數(shù)值判斷二級存儲中是否存在所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,如果存在,執(zhí)行步驟G;否則,創(chuàng)建一個空集合作為所述數(shù)據(jù)段的相似數(shù)據(jù)段元數(shù)據(jù)集合,執(zhí)行步驟G。8.如權(quán)利要求7所述的方法,其特征在于,所述步驟G具體包括步驟Gl:依次判斷所述數(shù)據(jù)段中的各所述數(shù)據(jù)塊的數(shù)字指紋是否存在于所述相似數(shù)據(jù)段元數(shù)據(jù)集合中,如果是,執(zhí)行步驟G2;否則,執(zhí)行步驟G3;G2:修改所述數(shù)據(jù)塊的存儲地址為所述數(shù)據(jù)指紋在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中對應(yīng)的元數(shù)據(jù)的存儲地址,將所述元數(shù)據(jù)的引用值加1,將所述I/O完成函數(shù)的狀態(tài)設(shè)置為修改后的,返回所述數(shù)據(jù)塊的原存儲地址和修改后的存儲地址,將所述相似數(shù)據(jù)段元數(shù)據(jù)集合寫回所述二級存儲;G3:在所述相似數(shù)據(jù)段元數(shù)據(jù)集合中生成所述數(shù)據(jù)塊的元數(shù)據(jù),將所述I/O完成函數(shù)的狀態(tài)設(shè)置為完成,將所述相似數(shù)據(jù)段元數(shù)據(jù)集合寫回所述二級存儲;所述元數(shù)據(jù)包括所述數(shù)據(jù)塊的數(shù)字指紋、存儲地址和引用值,所述引用值的初值為I。全文摘要本發(fā)明公開了一種基于位置敏感哈希的刪冗塊設(shè)備存儲方法,涉及數(shù)據(jù)存儲領(lǐng)域。該方法包括將刪冗寫操作的數(shù)據(jù)塊和相應(yīng)的數(shù)字指紋放入當前工作隊列;D判斷隊列中數(shù)據(jù)塊的數(shù)量是否超過閾值,如果是,將閾值個數(shù)據(jù)塊作為一個數(shù)據(jù)段,執(zhí)行步驟F;否則,執(zhí)行步驟E;E判斷隊首數(shù)據(jù)塊是否超時,如果是,將所有數(shù)據(jù)塊作為一個數(shù)據(jù)段,執(zhí)行步驟F;否則,執(zhí)行步驟D;F判斷是否存在相似數(shù)據(jù)段元數(shù)據(jù)集合,如果是,執(zhí)行步驟G;否則,創(chuàng)建一個空集合,執(zhí)行步驟G;G依次判斷各數(shù)據(jù)塊的數(shù)字指紋是否存在于相似數(shù)據(jù)段元數(shù)據(jù)集合中,如果是,修改數(shù)據(jù)塊的存儲地址;否則,生成數(shù)據(jù)塊的元數(shù)據(jù)。該方法減少了刪冗寫操作過程訪問元數(shù)據(jù)的時間開銷。文檔編號G06F17/30GK102722450SQ20121016824公開日2012年10月10日申請日期2012年5月25日優(yōu)先權(quán)日2012年5月25日發(fā)明者余宏亮,孫競申請人:清華大學(xué)