一種全局重復(fù)數(shù)據(jù)刪除的方法和系統(tǒng)及存儲(chǔ)裝置制造方法
【專利摘要】一種全局重復(fù)數(shù)據(jù)刪除的方法和系統(tǒng)及存儲(chǔ)裝置,該方法包括如下步驟:1.1初始化;1.2接收層將數(shù)據(jù)流分成多個(gè)寫入數(shù)據(jù)段,為每個(gè)寫入數(shù)據(jù)段計(jì)算寫入數(shù)據(jù)段指紋值,并查找與之對(duì)應(yīng)的管理節(jié)點(diǎn),將其發(fā)送給管理節(jié)點(diǎn);1.3管理節(jié)點(diǎn)判斷收到的寫入數(shù)據(jù)段指紋值是否已經(jīng)在指紋值索引結(jié)構(gòu)中存在,存在則由接收層直接將該寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,并進(jìn)行指紋值索引結(jié)構(gòu)的更新;不存在則直接進(jìn)行更新。系統(tǒng)用來實(shí)現(xiàn)上述方法。存儲(chǔ)裝置包括存儲(chǔ)介質(zhì)和存儲(chǔ)控制器,存儲(chǔ)控制器包括上述全局重復(fù)數(shù)據(jù)刪除的系統(tǒng)。本發(fā)明只需要傳輸數(shù)據(jù)段的指紋值,不要求傳輸全部數(shù)據(jù)段,并通過建立指紋值索引結(jié)構(gòu)和劃分指紋值管理范圍,大大提升了指紋值交互操作性能。
【專利說明】一種全局重復(fù)數(shù)據(jù)刪除的方法和系統(tǒng)及存儲(chǔ)裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明主要涉及到數(shù)據(jù)存儲(chǔ)領(lǐng)域,特指一種適用于數(shù)據(jù)存儲(chǔ)設(shè)備的全局重復(fù)數(shù)據(jù)刪除的方法及系統(tǒng)。
【背景技術(shù)】
[0002]隨著數(shù)據(jù)量的爆發(fā)式增長,存儲(chǔ)系統(tǒng)中存儲(chǔ)的數(shù)據(jù)量越來越多,根據(jù)IDC的統(tǒng)計(jì),2012年全球數(shù)據(jù)總量達(dá)到上萬億GB,超過95%的數(shù)據(jù)為非結(jié)構(gòu)化數(shù)據(jù);在許多以數(shù)據(jù)為核心的計(jì)算中心里,每天新產(chǎn)生的數(shù)據(jù)量已經(jīng)達(dá)到100GB甚至1TB。與此同時(shí),新型存儲(chǔ)介質(zhì)及其技術(shù),如閃存(flash memory)、相變存儲(chǔ)(phase change memory)等,也在不斷發(fā)展。作為新型存儲(chǔ)介質(zhì)的典型,閃存存儲(chǔ)介質(zhì)具有密度高、重量輕、能耗低等特點(diǎn),是一種理想的替代主存儲(chǔ)系統(tǒng)中磁盤的存儲(chǔ)介質(zhì)。閃存的最小讀寫單元是閃存頁,當(dāng)需要從閃存中讀取或向閃存中寫入數(shù)據(jù)時(shí),訪問單元必須以閃存頁為單位。當(dāng)一個(gè)閃存頁的內(nèi)容被修改時(shí),需要將該閃存頁擦除后再重新寫入數(shù)據(jù)。閃存的擦除操作延遲較大,通常是閃存頁讀操作延遲的上十倍。在閃存設(shè)備中,寫操作總是異地更新,即,新數(shù)據(jù)總是寫入一個(gè)新的空白閃存頁,然后廢除之前的閃存頁中的舊數(shù)據(jù),以避免擦除操作帶來的性能開銷。基于閃存存儲(chǔ)系統(tǒng)通常具有壽命問題,每個(gè)閃存頁存在有限的擦除次數(shù),通常上限為I萬-100萬次,在一個(gè)閃存頁達(dá)到擦除次數(shù)上限時(shí),閃存頁無法再被訪問。
[0003]重復(fù)數(shù)據(jù)刪除技術(shù)能夠檢測并消除存儲(chǔ)數(shù)據(jù)的冗余副本,有效地減少寫入主存儲(chǔ)系統(tǒng)的數(shù)據(jù)量,不僅能有效地降低系統(tǒng)的存儲(chǔ)成本,而且能潛在減少對(duì)存儲(chǔ)介質(zhì)的寫操作,提高存儲(chǔ)介質(zhì)的壽命和系統(tǒng)的訪問性能。
[0004]在已有的重復(fù)數(shù)據(jù)刪除方法中,一個(gè)節(jié)點(diǎn)/控制器通常負(fù)責(zé)管理所有數(shù)據(jù)單元的指紋值,當(dāng)有數(shù)據(jù)寫操作時(shí),查找該數(shù)據(jù)單元的指紋值,以確定該數(shù)據(jù)單元是否存在,如果存在,則將新的數(shù)據(jù)塊指針指向已有的數(shù)據(jù)單元,而新的數(shù)據(jù)塊不必寫入系統(tǒng)。傳統(tǒng)重復(fù)數(shù)據(jù)刪除技術(shù)通常分為兩種:相似重刪技術(shù)和精確重刪技術(shù)。相似重刪技術(shù)將連續(xù)的數(shù)據(jù)流劃分為多個(gè)大數(shù)據(jù)段,并為每個(gè)數(shù)據(jù)段保存一個(gè)特征值;當(dāng)一個(gè)新的數(shù)據(jù)段需要寫入時(shí),系統(tǒng)比較新數(shù)據(jù)段的特征值是否已經(jīng)存在,如果存在,則讀取該特征值對(duì)應(yīng)的數(shù)據(jù)段,并檢測該數(shù)據(jù)段與新數(shù)據(jù)段之間的重復(fù)數(shù)據(jù)。相似重刪技術(shù)將所有特征值一次性全部讀入內(nèi)存,因此重復(fù)數(shù)據(jù)刪除的過程對(duì)系統(tǒng)性能影響十分小。然而,相似重刪技術(shù)只能檢測兩個(gè)數(shù)據(jù)段之間的重復(fù)數(shù)據(jù),因此其提高的空間效率有限。相比之下,在精確重刪技術(shù)中,系統(tǒng)為每個(gè)數(shù)據(jù)單元(如固定的128KB大小或者可變長大小單元)計(jì)算指紋值,然后存儲(chǔ)在指紋表中。當(dāng)寫入數(shù)據(jù)時(shí),系統(tǒng)遍歷所有的指紋值,以確定是否有重復(fù)數(shù)據(jù)存在,因此,精確重刪技術(shù)能極為準(zhǔn)確地檢測出系統(tǒng)中所有重復(fù)數(shù)據(jù)單元,最大化系統(tǒng)的空間利用率。然而,精確重刪技術(shù)要求每次在寫入數(shù)據(jù)時(shí),遍歷所有指紋值,才能檢測是否存在相同的指紋值;由于系統(tǒng)存儲(chǔ)的指紋值個(gè)數(shù)通常很多,遍歷操作將引入了巨大的時(shí)間開銷。
[0005]在存儲(chǔ)系統(tǒng)中,為了提高系統(tǒng)的可擴(kuò)展性和可用性,系統(tǒng)通常具備多個(gè)節(jié)點(diǎn)/控制器同時(shí)提供服務(wù),而且多個(gè)節(jié)點(diǎn)/控制器相互交互,提供更大的存儲(chǔ)空間和訪問性能。在這種主存儲(chǔ)系統(tǒng)中采用傳統(tǒng)的重復(fù)數(shù)據(jù)刪除方法,盡管每個(gè)節(jié)點(diǎn)/控制器中獨(dú)立完成數(shù)據(jù)消冗,但是不能在全局范圍內(nèi)進(jìn)行重復(fù)數(shù)據(jù)檢測,因此也降低了重復(fù)數(shù)據(jù)刪除的效率。
[0006]為了減少每次實(shí)際寫入和讀出存儲(chǔ)系統(tǒng)的數(shù)據(jù)量,現(xiàn)有技術(shù)中也存在一些帶有全局重復(fù)數(shù)據(jù)刪除的技術(shù)方法,這些方法需要存儲(chǔ)系統(tǒng)由數(shù)據(jù)重定向模塊和匹配節(jié)點(diǎn)組成。當(dāng)對(duì)存儲(chǔ)系統(tǒng)寫入一個(gè)數(shù)據(jù)段時(shí),數(shù)據(jù)重定向模塊搜索一個(gè)與該數(shù)據(jù)段最相似的已存儲(chǔ)的數(shù)據(jù)段,并確定該相似數(shù)據(jù)段所處的匹配節(jié)點(diǎn),最后將寫入的數(shù)據(jù)段發(fā)送到該匹配節(jié)點(diǎn)中,由該匹配節(jié)點(diǎn)對(duì)該數(shù)據(jù)段進(jìn)行重復(fù)數(shù)據(jù)刪除操作。該方法仍然存在以下問題:1.該方法要求數(shù)據(jù)重定向模塊和控制器之間傳輸所有要寫入的數(shù)據(jù),才能由控制器來完成重復(fù)數(shù)據(jù)的檢測和消冗操作。由于頻繁的大段的數(shù)據(jù)傳輸將占用大量的控制器帶寬,因此該方法將會(huì)極大的降低系統(tǒng)的讀寫訪問性能。2.該方法未對(duì)元數(shù)據(jù)中的指紋值索引進(jìn)行高效的組織和利用,而讀請(qǐng)求需要頻繁地訪問指紋值索引,因此,在讀請(qǐng)求頻繁的存儲(chǔ)系統(tǒng)中,該方法會(huì)降低系統(tǒng)訪問性能。
【發(fā)明內(nèi)容】
[0007]本發(fā)明要解決的技術(shù)問題就在于:針對(duì)現(xiàn)有技術(shù)存在的技術(shù)問題,本發(fā)明提供一種只需要傳輸數(shù)據(jù)段的指紋值,而不要求傳輸全部數(shù)據(jù)段,并通過建立指紋值索引結(jié)構(gòu)和劃分指紋值管理范圍大大提升指紋值交互操作性能的全局重復(fù)數(shù)據(jù)刪除的方法和系統(tǒng)及存儲(chǔ)裝置。
[0008]為解決上述技術(shù)問題,本發(fā)明采用以下技術(shù)方案:
一種全局重復(fù)數(shù)據(jù)刪除的方法,包括如下步驟:
1.1將管理層劃分成若干個(gè)管理節(jié)點(diǎn),為每一個(gè)管理節(jié)點(diǎn)劃分可接收指紋值的范圍,并將存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)上所有已存儲(chǔ)數(shù)據(jù)段的指紋值按照上述范圍與相應(yīng)的管理節(jié)點(diǎn)建立唯一的映射關(guān)系;每一個(gè)管理節(jié)點(diǎn)為與其有映射關(guān)系的指紋值建立指紋值索引結(jié)構(gòu),并將所述指紋值索引結(jié)構(gòu)寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中;
1.2接收層對(duì)接收到的數(shù)據(jù)流進(jìn)行分段,得到多個(gè)寫入數(shù)據(jù)段,為每個(gè)寫入數(shù)據(jù)段計(jì)算寫入數(shù)據(jù)段指紋值,并查找該寫入數(shù)據(jù)段指紋值所對(duì)應(yīng)的管理節(jié)點(diǎn),將該寫入數(shù)據(jù)段指紋值發(fā)送給所對(duì)應(yīng)的管理節(jié)點(diǎn);
1.3管理節(jié)點(diǎn)判斷收到的寫入數(shù)據(jù)段指紋值是否已經(jīng)在指紋值索引結(jié)構(gòu)中存在,如果不存在,則由接收層直接將該寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,并進(jìn)行指紋值索引結(jié)構(gòu)的更新;如果已存在,則直接進(jìn)行指紋值索引結(jié)構(gòu)的更新。
[0009]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟1.3中,管理節(jié)點(diǎn)進(jìn)行指紋值索引結(jié)構(gòu)更新的流程為:如果所述寫入數(shù)據(jù)段指紋值已經(jīng)存在于指紋值索引結(jié)構(gòu)中,則將該指紋值索引結(jié)構(gòu)中對(duì)應(yīng)的指紋值的引用次數(shù)遞增;如果所述寫入數(shù)據(jù)段指紋值不存在于指紋值索引結(jié)構(gòu)中,則向該指紋值索引結(jié)構(gòu)中插入所述寫入數(shù)據(jù)段指紋值;最后將該指紋值索引結(jié)構(gòu)的更新部分寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中。
[0010]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟1.1中,采用范圍劃分法來劃分管理節(jié)點(diǎn)可接收指紋值的范圍,即將可接收的指紋值按大小編號(hào),并由管理節(jié)點(diǎn)按順序管理相應(yīng)的可接收的指紋值;所述步驟1.2中,查找所述寫入數(shù)據(jù)段的指紋值對(duì)應(yīng)的管理節(jié)點(diǎn)的方法為范圍查找法,確定一個(gè)寫入數(shù)據(jù)段的指紋值所處的所述范圍,并確定所述范圍對(duì)應(yīng)的管理節(jié)點(diǎn)。
[0011]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟1.1中,采用哈希劃分法來劃分管理節(jié)點(diǎn)可接收指紋值的范圍,即先為可接收的指紋值計(jì)算哈希值,然后對(duì)該哈希值取模,再根據(jù)取模的結(jié)果與管理節(jié)點(diǎn)的編號(hào)進(jìn)行比較,將可接收的指紋值劃分到管理節(jié)點(diǎn)的編號(hào)與該取模結(jié)果相等的管理節(jié)點(diǎn)管理;其中,取模計(jì)算的公式為:指紋值的哈希值%管理控制器的個(gè)數(shù);所述步驟1.2中,為每個(gè)寫入數(shù)據(jù)段的指紋值計(jì)算哈希值,并對(duì)該哈希值的結(jié)果取模計(jì)算,找到管理控制器編號(hào)與該取模計(jì)算結(jié)果相等的管理控制器,所述取模計(jì)算的公式為:管理控制器編號(hào)=指紋值的哈希值%管理控制器的個(gè)數(shù)。
[0012]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟1.1中的指紋值索引結(jié)構(gòu)以已存儲(chǔ)數(shù)據(jù)段的指紋值或該指紋值的一部分為索引關(guān)鍵字,索引關(guān)鍵字對(duì)應(yīng)的值為該已存儲(chǔ)數(shù)據(jù)段的指紋值對(duì)應(yīng)的索引段,所述索引段中包含與該已存儲(chǔ)數(shù)據(jù)段的指紋值對(duì)應(yīng)的數(shù)據(jù)段的物理地址和數(shù)據(jù)段的引用次數(shù);所述指紋值索引結(jié)構(gòu)采用平衡樹索引結(jié)構(gòu)或者哈希表索引結(jié)構(gòu)。
[0013]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟1.2中,對(duì)所述數(shù)據(jù)流進(jìn)行分段的方法為固定劃分方法,即從所述數(shù)據(jù)流的開始位置,以固定大小將該數(shù)據(jù)流分割為具有固定大小的寫入數(shù)據(jù)段。
[0014]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟1.2中,對(duì)所述數(shù)據(jù)流進(jìn)行分段的方法為可變長劃分方法,具體步驟為:
4.1設(shè)置用來選取分段數(shù)據(jù)的滑動(dòng)窗口,所述滑動(dòng)窗口大小的初始值為1,從寫入的數(shù)據(jù)流中未分段部分的起始位置開始選擇一個(gè)固定大小的數(shù)據(jù)單元,將該數(shù)據(jù)單元放入滑動(dòng)窗口內(nèi);
4.2計(jì)算所述滑動(dòng)窗口內(nèi)數(shù)據(jù)內(nèi)容的哈希值,并計(jì)算該哈希值的邊界判斷值,所述邊界判斷值的計(jì)算公式為:邊界判斷值=數(shù)據(jù)內(nèi)容哈希值% M,其中M為一個(gè)預(yù)設(shè)值;
4.3如果所述邊界判斷值不等于預(yù)設(shè)邊界判斷值,那么將所述滑動(dòng)窗口的大小遞增,即在該滑動(dòng)窗口中增加一個(gè)固定大小的數(shù)據(jù)單元,并重復(fù)步驟4.2 ;如果所述邊界判斷值等于預(yù)設(shè)的邊界判斷值,則滑動(dòng)窗口內(nèi)的數(shù)據(jù)內(nèi)容即為一個(gè)寫入數(shù)據(jù)段。
[0015]作為本發(fā)明的進(jìn)一步改進(jìn),所述步驟1.3中,管理節(jié)點(diǎn)會(huì)查找每一個(gè)寫入數(shù)據(jù)段的指紋值是否已經(jīng)在其指紋值索引結(jié)構(gòu)中存在;或者,管理節(jié)點(diǎn)將若干個(gè)寫入數(shù)據(jù)段的指紋值組織成一個(gè)集合,然后選取該集合中最大值或者最小值,作為該集合的指紋值,如果該集合的指紋值在所述管理節(jié)點(diǎn)的指紋值索引結(jié)構(gòu)中存在,該管理節(jié)點(diǎn)再在其指紋索引結(jié)構(gòu)中,依次查找所述集合中的每個(gè)值,并根據(jù)該集合中的每個(gè)值是否都存在決定該值對(duì)應(yīng)的寫入數(shù)據(jù)段是否寫入存儲(chǔ)設(shè)備或存儲(chǔ)介質(zhì)中;如果所述集合的指紋值在所述管理節(jié)點(diǎn)的指紋值索引結(jié)構(gòu)中不存在,則所述集合中所有值對(duì)應(yīng)的寫入數(shù)據(jù)段均被寫入所述存儲(chǔ)設(shè)備或存儲(chǔ)介質(zhì)中。
[0016]作為本發(fā)明的進(jìn)一步改進(jìn),所有所述步驟中,對(duì)存儲(chǔ)設(shè)備或者存儲(chǔ)設(shè)備的寫操作都采用順序?qū)懛绞健?br>
[0017]作為本發(fā)明的進(jìn)一步改進(jìn),所述管理節(jié)點(diǎn)和接收層采用同一個(gè)控制器,或者采用兩個(gè)不同的控制器。
[0018]本發(fā)明進(jìn)一步提供了一種全局重復(fù)數(shù)據(jù)刪除系統(tǒng),包括:
第一模塊(初始化模塊),用于將管理層劃分成若干個(gè)管理節(jié)點(diǎn),為每一個(gè)管理節(jié)點(diǎn)劃分可接收指紋值的范圍,并將存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)上所有已存儲(chǔ)數(shù)據(jù)段的指紋值按照上述范圍與相應(yīng)的管理節(jié)點(diǎn)建立唯一的映射關(guān)系;每一個(gè)管理節(jié)點(diǎn)為與其有映射關(guān)系的指紋值建立指紋值索引結(jié)構(gòu),并將所述指紋值索引結(jié)構(gòu)寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中;
第二模塊(接收模塊),用于使接收層對(duì)接收到的數(shù)據(jù)流進(jìn)行分段,得到多個(gè)寫入數(shù)據(jù)段,為每個(gè)寫入數(shù)據(jù)段計(jì)算寫入數(shù)據(jù)段指紋值,并查找該寫入數(shù)據(jù)段指紋值所對(duì)應(yīng)的管理節(jié)點(diǎn),將該寫入數(shù)據(jù)段指紋值發(fā)送給所對(duì)應(yīng)的管理節(jié)點(diǎn);
第三模塊(執(zhí)行處理模塊),用于使管理節(jié)點(diǎn)判斷收到的寫入數(shù)據(jù)段指紋值是否已經(jīng)在指紋值索引結(jié)構(gòu)中存在,如果不存在,則由接收層直接將該寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,并進(jìn)行指紋值索引結(jié)構(gòu)的更新;如果已存在,則直接進(jìn)行指紋值索引結(jié)構(gòu)的更新。
[0019]作為本發(fā)明系統(tǒng)的進(jìn)一步改進(jìn),本發(fā)明還包括第四模塊(更新模塊),用于使管理節(jié)點(diǎn)進(jìn)行指紋值索引結(jié)構(gòu)更新;如果所述寫入數(shù)據(jù)段指紋值已經(jīng)存在于指紋值索引結(jié)構(gòu)中,則將該指紋值索引結(jié)構(gòu)中對(duì)應(yīng)的指紋值的引用次數(shù)遞增;如果所述寫入數(shù)據(jù)段指紋值不存在于指紋值索引結(jié)構(gòu)中,則向該指紋值索引結(jié)構(gòu)中插入所述寫入數(shù)據(jù)段指紋值;最后將該指紋值索引結(jié)構(gòu)的更新部分寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中。
[0020]本發(fā)明進(jìn)一步還提供了一種存儲(chǔ)裝置,包括存儲(chǔ)介質(zhì)和存儲(chǔ)控制器,所述存儲(chǔ)控制器包括上述的全局重復(fù)數(shù)據(jù)刪除系統(tǒng)。
[0021]與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)在于:
1.采用本發(fā)明后,對(duì)于任意一個(gè)數(shù)據(jù)流的寫操作,接收層和管理節(jié)點(diǎn)之間只需要傳輸相應(yīng)的指紋值,而不要求傳輸全部數(shù)據(jù)段,即可完成全局重復(fù)數(shù)據(jù)刪除,避免了大量數(shù)據(jù)傳輸對(duì)存儲(chǔ)系統(tǒng)讀寫性能的影響。
[0022]2.采用本發(fā)明后,每個(gè)管理節(jié)點(diǎn)使用高效的索引結(jié)構(gòu)為指紋值創(chuàng)建指紋值索引結(jié)構(gòu),管理節(jié)點(diǎn)只需要進(jìn)行有限個(gè)索引節(jié)點(diǎn)的查找,即可完成指紋值查找操作,在讀請(qǐng)求頻繁的存儲(chǔ)系統(tǒng)中,能夠大大提高存儲(chǔ)系統(tǒng)的讀性能。
[0023]3.采用本發(fā)明后,采用范圍劃分法或哈希劃分法劃分管理節(jié)點(diǎn)管理的可接收指紋值范圍,只需采用范圍查找法或哈希查找法對(duì)指紋值計(jì)算,便可直接找出一個(gè)與寫入數(shù)據(jù)段指紋值對(duì)應(yīng)的管理節(jié)點(diǎn),無需使用額外的映射表保存指紋值與管理節(jié)點(diǎn)之間的對(duì)應(yīng)關(guān)系,提聞存儲(chǔ)系統(tǒng)的訪問性能。
[0024]4.采用本發(fā)明后,在向存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)寫入數(shù)據(jù)時(shí),包括管理節(jié)點(diǎn)寫入指紋值索引結(jié)構(gòu)和接收層寫入數(shù)據(jù)段,都是采用性能較高的順序?qū)懖僮?,減少了對(duì)存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)的隨機(jī)寫操作,提高了存儲(chǔ)系統(tǒng)的讀寫訪問性能及使用壽命。
【專利附圖】
【附圖說明】
[0025]圖1是本發(fā)明方法的流程示意圖。
[0026]圖2是本發(fā)明在一個(gè)具體應(yīng)用實(shí)例中實(shí)施后的存儲(chǔ)系統(tǒng)結(jié)構(gòu)原理示意圖。
[0027]圖3是本發(fā)明在一個(gè)具體應(yīng)用實(shí)例中實(shí)施時(shí)的原理示意圖。
[0028]圖4是本發(fā)明在具體應(yīng)用實(shí)施例中采用一種指紋值索引結(jié)構(gòu)的原理示意圖。
[0029]圖5是本發(fā)明在另一個(gè)具體應(yīng)用實(shí)例中實(shí)施后的存儲(chǔ)系統(tǒng)結(jié)構(gòu)原理示意圖。【具體實(shí)施方式】
[0030]以下將結(jié)合說明書附圖和具體實(shí)施例對(duì)本發(fā)明做進(jìn)一步詳細(xì)說明。
[0031]如圖1所示,本發(fā)明的全局重復(fù)數(shù)據(jù)刪除的方法,包括如下步驟:
1.1將管理層劃分成若干個(gè)管理節(jié)點(diǎn),為每一個(gè)管理節(jié)點(diǎn)劃分可接收指紋值的范圍,并將存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)上所有已存儲(chǔ)數(shù)據(jù)段的指紋值按照上述范圍與相應(yīng)的管理節(jié)點(diǎn)建立唯一的映射關(guān)系;每一個(gè)管理節(jié)點(diǎn)為與其有映射關(guān)系的指紋值建立指紋值索引結(jié)構(gòu),并將指紋值索引結(jié)構(gòu)寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中;
1.2接收層對(duì)接收到的數(shù)據(jù)流進(jìn)行分段,得到多個(gè)寫入數(shù)據(jù)段,為每個(gè)寫入數(shù)據(jù)段計(jì)算寫入數(shù)據(jù)段指紋值,并查找該寫入數(shù)據(jù)段指紋值所對(duì)應(yīng)的管理節(jié)點(diǎn),將該寫入數(shù)據(jù)段指紋值發(fā)送給所對(duì)應(yīng)的管理節(jié)點(diǎn);
1.3管理節(jié)點(diǎn)判斷收到的寫入數(shù)據(jù)段指紋值是否已經(jīng)在指紋值索引結(jié)構(gòu)中存在,如果不存在,則由接收層直接將該寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,并進(jìn)行指紋值索引結(jié)構(gòu)的更新;如果已存在,則直接進(jìn)行指紋值索引結(jié)構(gòu)的更新。
[0032]在上述步驟1.3中,管理節(jié)點(diǎn)進(jìn)行指紋值索引結(jié)構(gòu)更新的流程為:如果寫入數(shù)據(jù)段指紋值已經(jīng)存在于指紋值索引結(jié)構(gòu)中,則將該指紋值索引結(jié)構(gòu)中對(duì)應(yīng)的指紋值的引用次數(shù)遞增;如果寫入數(shù)據(jù)段指紋值不存在于指紋值索引結(jié)構(gòu)中,則向該指紋值索引結(jié)構(gòu)中插入寫入數(shù)據(jù)段指紋值;最后將該指紋值索引結(jié)構(gòu)的更新部分寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中。
[0033]如圖2所示,為本發(fā)明在一個(gè)具體應(yīng)用實(shí)例中實(shí)施后的存儲(chǔ)系統(tǒng)結(jié)構(gòu)原理示意圖,以下將以該實(shí)例描述本發(fā)明的具體實(shí)現(xiàn)原理。其中,主機(jī)端101是發(fā)送讀寫操作的源主機(jī)。存儲(chǔ)系統(tǒng)102使用了本發(fā)明全局重復(fù)數(shù)據(jù)刪除方法,該存儲(chǔ)系統(tǒng)包括接收層群104、管理節(jié)點(diǎn)群105和存儲(chǔ)設(shè)備或存儲(chǔ)介質(zhì)群106,其中,接收層群104中可以包括I個(gè)或多個(gè)接收層,管理節(jié)點(diǎn)群105中可以包括I個(gè)或多個(gè)管理節(jié)點(diǎn),存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)群106可以包括例如硬盤、磁帶驅(qū)動(dòng)器、半導(dǎo)體存儲(chǔ)器等單個(gè)存儲(chǔ)設(shè)備或存儲(chǔ)介質(zhì),也可以包括冗余陣列系統(tǒng)(例如獨(dú)立磁盤冗余陣列RAID)等多個(gè)存儲(chǔ)設(shè)備組成的裝置或者網(wǎng)絡(luò)附屬連接存儲(chǔ)系統(tǒng)等網(wǎng)絡(luò)存儲(chǔ)裝置。主機(jī)端101與存儲(chǔ)系統(tǒng)102之間通過網(wǎng)絡(luò)連接103連接,網(wǎng)絡(luò)連接包括局域網(wǎng)、廣域網(wǎng)、無線網(wǎng)絡(luò)、IB網(wǎng)絡(luò)、光纖網(wǎng)絡(luò)和以太網(wǎng)絡(luò)或者實(shí)現(xiàn)網(wǎng)絡(luò)通信的其他任何網(wǎng)絡(luò)。通過網(wǎng)絡(luò)連接103相互連接之后,主機(jī)端101與存儲(chǔ)系統(tǒng)102之間互發(fā)消息,完成數(shù)據(jù)讀寫的操作。
[0034]結(jié)合圖3,在上述實(shí)例中,以包含3個(gè)接收層和3個(gè)管理節(jié)點(diǎn)為例,該存儲(chǔ)系統(tǒng)包括第一接收層201、第二接收層202、第三接收層203和第一管理節(jié)點(diǎn)210、第二管理節(jié)點(diǎn)211、第三管理節(jié)點(diǎn)212以及存儲(chǔ)設(shè)備216。
[0035]在本實(shí)施例中,全局重復(fù)數(shù)據(jù)刪除的方法包括以下步驟:
1.1)存儲(chǔ)系統(tǒng)初始化步驟,具體的包括:
首先,劃分管理節(jié)點(diǎn)可接收的指紋值的范圍,本實(shí)例中,設(shè)定可接收的指紋值范圍為A?H,劃分范圍后,第一管理節(jié)點(diǎn)210管理指紋值范圍為(A,B,C),第二管理節(jié)點(diǎn)211管理指紋值范圍為(D,E, F),第三管理節(jié)點(diǎn)212管理指紋值范圍為(G,H),在本示意圖中,字母用于區(qū)分一個(gè)寫入數(shù)據(jù)段的內(nèi)容,如果兩個(gè)數(shù)據(jù)段的字母相同,則兩個(gè)數(shù)據(jù)段的內(nèi)容也相同。
[0036]在進(jìn)行劃分管理節(jié)點(diǎn)可接收的指紋值的范圍時(shí),可以采用范圍劃分法或者哈希劃分法。
[0037]當(dāng)采用范圍劃分法時(shí),將可接收的指紋值按大小編號(hào),并由管理節(jié)點(diǎn)按順序管理相應(yīng)的可接收的指紋值,如編號(hào)為I的管理節(jié)點(diǎn)管理大小為[0,N]的可接收的指紋值,編號(hào)為2的管理節(jié)點(diǎn)管理大小為[N+1,2N]的可接收的指紋值,依次類推。
[0038]當(dāng)采用哈希劃分法時(shí),先為可接收的指紋值計(jì)算哈希值,然后對(duì)該哈希值取模,再根據(jù)取模的結(jié)果與管理節(jié)點(diǎn)編號(hào)進(jìn)行比較,將可接收的指紋值劃分到管理節(jié)點(diǎn)編號(hào)與該取模結(jié)果相等的管理節(jié)點(diǎn)管理,其中,取模計(jì)算的公式為:指紋值的哈希值%管理節(jié)點(diǎn)的個(gè)數(shù)。然后,將存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)上所有已存儲(chǔ)數(shù)據(jù)段的指紋值按照范圍與相應(yīng)的管理節(jié)點(diǎn)建立唯一的映射關(guān)系,管理節(jié)點(diǎn)為所有與其有映射關(guān)系的指紋值建立指紋值索引結(jié)構(gòu)。如圖3所示,以第一管理節(jié)點(diǎn)210為例,其中,指紋值索引結(jié)構(gòu)208為第一管理節(jié)點(diǎn)210上對(duì)存儲(chǔ)設(shè)備上已存在的數(shù)據(jù)段A和數(shù)據(jù)段B對(duì)應(yīng)的指紋值A(chǔ)和指紋值B的建立的指紋值索引結(jié)構(gòu),以此類推。
[0039]本實(shí)例中,指紋值索引結(jié)構(gòu)以已存儲(chǔ)數(shù)據(jù)段的指紋值(或該指紋值的一部分)為索引關(guān)鍵字,索引關(guān)鍵字對(duì)應(yīng)的值為該已存儲(chǔ)數(shù)據(jù)段的指紋值對(duì)應(yīng)的索引段,索引段中包含與該已存儲(chǔ)數(shù)據(jù)段的指紋值對(duì)應(yīng)的數(shù)據(jù)段的物理地址和數(shù)據(jù)段的引用次數(shù)。
[0040]指紋值索引結(jié)構(gòu)可以采用平衡樹索引結(jié)構(gòu)或者哈希表索引結(jié)構(gòu)等高效映射的索引結(jié)構(gòu)。
[0041]當(dāng)采用平衡樹索引結(jié)構(gòu)時(shí),將以已存儲(chǔ)數(shù)據(jù)段的指紋值為鍵值,葉子節(jié)點(diǎn)中包含多個(gè)索引段。
[0042]當(dāng)采用哈希表索引結(jié)構(gòu)時(shí),每個(gè)索引對(duì)中鍵值為已存儲(chǔ)數(shù)據(jù)段的指紋值,值為索引段。
[0043]參見圖4,為本實(shí)施例的指紋值索引結(jié)構(gòu)的示意圖。在本實(shí)施例中,指紋值索引結(jié)構(gòu)采用的是平衡樹索引結(jié)構(gòu),每一個(gè)管理節(jié)點(diǎn)都有一個(gè)平衡樹指紋值索引結(jié)構(gòu),用于查詢?cè)摴芾砉?jié)點(diǎn)管理的指紋值。本實(shí)例的平衡樹為B+樹結(jié)構(gòu)。
[0044]參見圖4,關(guān)鍵字301為已存儲(chǔ)數(shù)據(jù)段的指紋值或者該指紋值的一部分(如該指紋值的前64位)。地址指針302與關(guān)鍵字301對(duì)應(yīng),保存了一個(gè)關(guān)鍵字對(duì)應(yīng)的子節(jié)點(diǎn)的物理位置。根節(jié)點(diǎn)303、中間節(jié)點(diǎn)304存儲(chǔ)了多個(gè)關(guān)鍵字和地址指針。
[0045]該B+樹的葉節(jié)點(diǎn)中保存著多個(gè)關(guān)鍵字和索引段,如葉節(jié)點(diǎn)305包括關(guān)鍵字306和索引段307,在本實(shí)施例中,每個(gè)索引段表示為〈引用次數(shù)、物理地址〉,對(duì)應(yīng)于一個(gè)已存儲(chǔ)數(shù)據(jù)段的數(shù)據(jù)段,其中,引用次數(shù)的值表示該數(shù)據(jù)段被多少個(gè)卷或文件的邏輯地址引用,而物理地址則表示該數(shù)據(jù)段在存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)上的存儲(chǔ)物理地址。當(dāng)引用次數(shù)為O時(shí),該數(shù)據(jù)段已經(jīng)不再被使用,對(duì)應(yīng)的物理地址可以被回收。
[0046]最后,將該指紋值索引結(jié)構(gòu)寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中。以第一管理節(jié)點(diǎn)210為例,存儲(chǔ)空間219的內(nèi)容為第一管理節(jié)點(diǎn)210在存儲(chǔ)設(shè)備或介質(zhì)上寫入的指紋值索引結(jié)構(gòu) 208。
[0047]在本實(shí)例中,將指紋值索引結(jié)構(gòu)寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì),采用順序?qū)懙姆绞?,以充分開發(fā)存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)的順序?qū)懺L問性能。
[0048]在本發(fā)明提供的全局重復(fù)數(shù)據(jù)刪除方法中,步驟1.1)就是為存儲(chǔ)系統(tǒng)進(jìn)行初始化的步驟,因此在使用本發(fā)明提供的全局重復(fù)數(shù)據(jù)刪除方法的存儲(chǔ)系統(tǒng)中,只需要執(zhí)行一遍步驟1.1)即可使該存儲(chǔ)系統(tǒng)具備使用本發(fā)明提供的全局重復(fù)數(shù)據(jù)刪除方法的前提條件。當(dāng)該存儲(chǔ)系統(tǒng)的存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)更換時(shí),步驟1.1)需要重新執(zhí)行一次。
[0049]1.2)找到相應(yīng)的管理節(jié)點(diǎn)步驟,具體包括:
首先,接收層接收主機(jī)端寫入的數(shù)據(jù)流,對(duì)該數(shù)據(jù)流進(jìn)行分段,得到多個(gè)寫入數(shù)據(jù)段,并為每個(gè)寫入數(shù)據(jù)段計(jì)算寫入數(shù)據(jù)段指紋值。如圖3所示,以第一接收層201為例,當(dāng)?shù)谝唤邮諏?01接收到來自主機(jī)端101寫入的數(shù)據(jù)流204時(shí),該接收層將該數(shù)據(jù)流分成包括5個(gè)數(shù)據(jù)段的數(shù)據(jù)段集合207,然后第一接收層201為數(shù)據(jù)段集合207中的每個(gè)數(shù)據(jù)段計(jì)算指紋值。
[0050]寫入數(shù)據(jù)流分段的方法可以采用固定劃分方法或者可變長劃分方法。
[0051]當(dāng)采用固定劃分方法時(shí),從寫入的數(shù)據(jù)流的開始位置,以固定大小(如64KB)將該數(shù)據(jù)流分割為具有固定大小的寫入數(shù)據(jù)段;
當(dāng)采用可變長劃分方法時(shí),包含以下步驟:
4.1)設(shè)置用來選取分段數(shù)據(jù)的滑動(dòng)窗口,滑動(dòng)窗口大小的初始值為1,從寫入的數(shù)據(jù)流中未分段部分的起始位置開始選擇一個(gè)固定大小(如4KB)的數(shù)據(jù)單元,將該數(shù)據(jù)單元放入滑動(dòng)窗口內(nèi);
4.2)計(jì)算滑動(dòng)窗口內(nèi)數(shù)據(jù)內(nèi)容的哈希值,并計(jì)算該哈希值的邊界判斷值,邊界判斷值的計(jì)算公式為:邊界判斷值=數(shù)據(jù)內(nèi)容哈希值% M,其中M為一個(gè)預(yù)設(shè)值;
4.3)如果邊界判斷值不等于預(yù)設(shè)邊界判斷值,那么將滑動(dòng)窗口的大小遞增,即在該滑動(dòng)窗口中增加一個(gè)固定大小的數(shù)據(jù)單元,并重復(fù)步驟4.2);如果邊界判斷值等于預(yù)設(shè)的邊界判斷值,則滑動(dòng)窗口內(nèi)的數(shù)據(jù)內(nèi)容即為一個(gè)寫入數(shù)據(jù)段。
[0052]在步驟1.2)中,計(jì)算寫入數(shù)據(jù)段指紋值的方法采用散列方法,包括MD5、SHA-USHA-256 等。
[0053]然后,接收層查找寫入數(shù)據(jù)段指紋值對(duì)應(yīng)的管理節(jié)點(diǎn),并將該寫入數(shù)據(jù)段指紋值發(fā)送給管理節(jié)點(diǎn)。如圖3所示,第一接收層201為寫入數(shù)據(jù)段集合207中的數(shù)據(jù)段A和B的指紋值找到第一管理節(jié)點(diǎn)210,并發(fā)給該管理節(jié)點(diǎn);為寫入數(shù)據(jù)段集合207中的數(shù)據(jù)段D和E的指紋值找到第二管理節(jié)點(diǎn)211,并發(fā)給該管理節(jié)點(diǎn);為寫入數(shù)據(jù)段集合207中的數(shù)據(jù)段H的指紋值找到第三管理節(jié)點(diǎn)212,并發(fā)給該管理節(jié)點(diǎn)。
[0054]寫入數(shù)據(jù)段的指紋值找到對(duì)應(yīng)的管理節(jié)點(diǎn)的方法可以采用范圍查找法或者哈希查找法。
[0055]當(dāng)采用范圍查找法時(shí),該查找方法只需要確定一個(gè)寫入數(shù)據(jù)段的指紋值所處的范圍,并確定范圍對(duì)應(yīng)的管理節(jié)點(diǎn),即可找到該寫入數(shù)據(jù)段指紋值對(duì)應(yīng)的管理節(jié)點(diǎn);
當(dāng)采用哈希查找法時(shí),該查找方法為每個(gè)寫入數(shù)據(jù)段的指紋值計(jì)算哈希值,并對(duì)該哈希值的結(jié)果取模計(jì)算,找到管理節(jié)點(diǎn)編號(hào)與該取模計(jì)算結(jié)果相等的管理節(jié)點(diǎn),取模計(jì)算的公式為:管理節(jié)點(diǎn)編號(hào)=指紋值的哈希值%管理節(jié)點(diǎn)的個(gè)數(shù)。
[0056]1.3)刪除重復(fù)數(shù)據(jù),寫入不重復(fù)數(shù)據(jù)步驟:
管理節(jié)點(diǎn)判斷收到的寫入數(shù)據(jù)段指紋值是否已經(jīng)在指紋值索引結(jié)構(gòu)中存在,如果不存在,則由接收層直接將該寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,并進(jìn)行指紋值索引結(jié)構(gòu)的更新;如果已存在,則直接進(jìn)行指紋值索引結(jié)構(gòu)的更新。
[0057]步驟1.3)可以采用全局精確重復(fù)數(shù)據(jù)刪除或者全局相似重復(fù)數(shù)據(jù)刪除方法。[0058]當(dāng)采用全局精確重復(fù)數(shù)據(jù)刪除方法時(shí),管理節(jié)點(diǎn)查找每寫入數(shù)據(jù)段的指紋值是否已經(jīng)在其指紋值索引結(jié)構(gòu)中存在,如果存在,則不要求接收層將寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或存儲(chǔ)介質(zhì)中,否則,要求接收層將寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或介質(zhì)中;
當(dāng)采用全局相似重復(fù)數(shù)據(jù)刪除方法時(shí),管理節(jié)點(diǎn)將若干個(gè)寫入數(shù)據(jù)段的指紋值組織成一個(gè)集合,然后選取該集合中最大值或者最小值,作為該集合的指紋值,如果該集合的指紋值在管理節(jié)點(diǎn)的指紋值索引結(jié)構(gòu)中存在,該管理節(jié)點(diǎn)再在其指紋索引結(jié)構(gòu)中,依次查找集合中的每個(gè)值,并根據(jù)該集合中的每個(gè)值是否都存在決定該值對(duì)應(yīng)的寫入數(shù)據(jù)段是否寫入存儲(chǔ)設(shè)備或存儲(chǔ)介質(zhì)中;如果集合的指紋值在管理節(jié)點(diǎn)的指紋值索引結(jié)構(gòu)中不存在,則集合中所有值對(duì)應(yīng)的寫入數(shù)據(jù)段均被寫入存儲(chǔ)設(shè)備或存儲(chǔ)介質(zhì)中。
[0059]在本實(shí)例中,采用的是全局精確重復(fù)數(shù)據(jù)刪除方法。如圖3所示,第一管理節(jié)點(diǎn)210、第二管理節(jié)點(diǎn)211、第三管理節(jié)點(diǎn)212在分別接收到第一接收層201發(fā)送的指紋值后,對(duì)比每個(gè)指紋值是否在其指紋值索引結(jié)構(gòu)存在,其中指紋值A(chǔ)和指紋值B在第一管理節(jié)點(diǎn)210指紋值索引結(jié)構(gòu)中存在,指紋值D和指紋值E在第二管理節(jié)點(diǎn)211指紋值索引結(jié)構(gòu)中存在,而指紋值H不存在于第三管理節(jié)點(diǎn)212的指紋值索引結(jié)構(gòu)中。則第三管理節(jié)點(diǎn)212要求第一接收層201將數(shù)據(jù)段H的內(nèi)容寫入存儲(chǔ)設(shè)備和存儲(chǔ)介質(zhì)中。
[0060]在本實(shí)例中,管理節(jié)點(diǎn)查找指紋值是否存在于指紋值索引結(jié)構(gòu)中使用以下步驟:當(dāng)需要查詢一個(gè)指紋值關(guān)鍵字對(duì)應(yīng)的索引段時(shí),該管理節(jié)點(diǎn)從B+樹的根節(jié)點(diǎn)開始查詢,經(jīng)過中間節(jié)點(diǎn),最終到達(dá)葉子節(jié)點(diǎn);在葉子節(jié)點(diǎn)中,采用二分法查找該關(guān)鍵字對(duì)應(yīng)的索引段是否存在;如果存在,則該指紋值對(duì)應(yīng)的數(shù)據(jù)段內(nèi)容已經(jīng)在存在于存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,并且可以從該索引段中獲取數(shù)據(jù)段的物理地址。
[0061 ] 在本實(shí)例中,接收層直接將該數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)均以順序?qū)懙姆绞綄懭氪鎯?chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,以充分開發(fā)存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)的順序?qū)懺L問性能。
[0062]本實(shí)例中更新管理節(jié)點(diǎn)中的指紋值索引結(jié)構(gòu)步驟,具體包括:
管理節(jié)點(diǎn)更新其指紋值索引結(jié)構(gòu),如果寫入數(shù)據(jù)段指紋值已經(jīng)存在于該指紋值索引結(jié)構(gòu)中,則將該指紋值索引結(jié)構(gòu)中對(duì)應(yīng)的指紋值的引用次數(shù)遞增;如果寫入數(shù)據(jù)段的指紋值不存在于該指紋值索引結(jié)構(gòu)中,則向該指紋值索引結(jié)構(gòu)中插入寫入數(shù)據(jù)段的指紋值;將該指紋值索引結(jié)構(gòu)的更新部分寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中。在本實(shí)例中,步驟1.3)結(jié)束后,第一管理節(jié)點(diǎn)210、第二管理節(jié)點(diǎn)211、第三管理節(jié)點(diǎn)212均需要更新其指紋值索引結(jié)構(gòu),由于指紋值A(chǔ)和指紋值B已存在于第一管理節(jié)點(diǎn)210的指紋值索引結(jié)構(gòu)中,則將該結(jié)構(gòu)中指紋值A(chǔ)和指紋值B對(duì)應(yīng)的索引段中的引用次數(shù)遞增,同樣將第二管理節(jié)點(diǎn)211的指紋值索引結(jié)構(gòu)中指紋值D和指紋值E對(duì)應(yīng)的索引段中的引用次數(shù)遞增;由于指紋值H不存在于第三管理節(jié)點(diǎn)212的指紋值索引結(jié)構(gòu)中,需要將指紋值H插入到該指紋值索引結(jié)構(gòu)中。各管理節(jié)點(diǎn)更新完其指紋值索引結(jié)構(gòu)后,將該結(jié)構(gòu)更新部分寫入存儲(chǔ)設(shè)備中。
[0063]本實(shí)例在更新指紋值索引結(jié)構(gòu)時(shí),所有被更新的索引結(jié)構(gòu)的一部分均以順序?qū)懙姆绞綄懭氪鎯?chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,以充分開發(fā)存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)的順序?qū)懺L問性倉泛。
[0064]根據(jù)采用控制器的職能可以分為帶內(nèi)交互方式或帶外交互方式兩種:帶內(nèi)交互方式中,一個(gè)控制器要么只作為接收控制器,要么只作為管理控制器;帶外交互方式中,一個(gè)控制器既可以作為接收控制器,也可以作為管理控制器。[0065]本實(shí)施例中,為帶內(nèi)交互方式,一個(gè)控制器要么只作為接收控制器,要么只作為管理控制器。即,管理節(jié)點(diǎn)采用一個(gè)管理控制器,接收層采用接收控制器。
[0066]如圖5所示,為另外一種采用本發(fā)明后的應(yīng)用實(shí)例,其采用帶外交互方式,管理節(jié)點(diǎn)和接收層共用為一個(gè)控制器。
[0067]本發(fā)明進(jìn)一步提供一種用來實(shí)施上述方法的全局重復(fù)數(shù)據(jù)刪除系統(tǒng),包括:
第一模塊,用于將管理層劃分成若干個(gè)管理節(jié)點(diǎn),為每一個(gè)管理節(jié)點(diǎn)劃分可接收指紋值的范圍,并將存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)上所有已存儲(chǔ)數(shù)據(jù)段的指紋值按照上述范圍與相應(yīng)的管理節(jié)點(diǎn)建立唯一的映射關(guān)系;每一個(gè)管理節(jié)點(diǎn)為與其有映射關(guān)系的指紋值建立指紋值索引結(jié)構(gòu),并將指紋值索引結(jié)構(gòu)寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中;
第二模塊,用于使接收層對(duì)接收到的數(shù)據(jù)流進(jìn)行分段,得到多個(gè)寫入數(shù)據(jù)段,為每個(gè)寫入數(shù)據(jù)段計(jì)算寫入數(shù)據(jù)段指紋值,并查找該寫入數(shù)據(jù)段指紋值所對(duì)應(yīng)的管理節(jié)點(diǎn),將該寫入數(shù)據(jù)段指紋值發(fā)送給所對(duì)應(yīng)的管理節(jié)點(diǎn);
第三模塊,用于使管理節(jié)點(diǎn)判斷收到的寫入數(shù)據(jù)段指紋值是否已經(jīng)在指紋值索引結(jié)構(gòu)中存在,如果不存在,則由接收層直接將該寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,并進(jìn)行指紋值索引結(jié)構(gòu)的更新;如果已存在,則直接進(jìn)行指紋值索引結(jié)構(gòu)的更新。
[0068]本實(shí)施中,還進(jìn)一步包括第四模塊,用于使管理節(jié)點(diǎn)進(jìn)行指紋值索引結(jié)構(gòu)更新;如果寫入數(shù)據(jù)段指紋值已經(jīng)存在于指紋值索引結(jié)構(gòu)中,則將該指紋值索引結(jié)構(gòu)中對(duì)應(yīng)的指紋值的引用次數(shù)遞增;如果寫入數(shù)據(jù)段指紋值不存在于指紋值索引結(jié)構(gòu)中,則向該指紋值索弓I結(jié)構(gòu)中插入寫入數(shù)據(jù)段指紋值;最后將該指紋值索引結(jié)構(gòu)的更新部分寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中。
[0069]本發(fā)明進(jìn)一步還提供了一種存儲(chǔ)裝置,包括存儲(chǔ)介質(zhì)和存儲(chǔ)控制器,存儲(chǔ)控制器包括上述的全局重復(fù)數(shù)據(jù)刪除系統(tǒng)。
[0070]以上僅是本發(fā)明的優(yōu)選實(shí)施方式,本發(fā)明的保護(hù)范圍并不僅局限于上述實(shí)施例,凡屬于本發(fā)明思路下的技術(shù)方案均屬于本發(fā)明的保護(hù)范圍。應(yīng)當(dāng)指出,對(duì)于本【技術(shù)領(lǐng)域】的普通技術(shù)人員來說,在不脫離本發(fā)明原理前提下的若干改進(jìn)和潤飾,應(yīng)視為本發(fā)明的保護(hù)范圍。
【權(quán)利要求】
1.一種全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于,包括如下步驟: 1.1將管理層劃分成若干個(gè)管理節(jié)點(diǎn),為每一個(gè)管理節(jié)點(diǎn)劃分可接收指紋值的范圍,并將存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)上所有已存儲(chǔ)數(shù)據(jù)段的指紋值按照上述范圍與相應(yīng)的管理節(jié)點(diǎn)建立唯一的映射關(guān)系;每一個(gè)管理節(jié)點(diǎn)為與其有映射關(guān)系的指紋值建立指紋值索引結(jié)構(gòu),并將所述指紋值索引結(jié)構(gòu)寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中; 1.2接收層對(duì)接收到的數(shù)據(jù)流進(jìn)行分段,得到多個(gè)寫入數(shù)據(jù)段,為每個(gè)寫入數(shù)據(jù)段計(jì)算寫入數(shù)據(jù)段指紋值,并查找該寫入數(shù)據(jù)段指紋值所對(duì)應(yīng)的管理節(jié)點(diǎn),將該寫入數(shù)據(jù)段指紋值發(fā)送給所對(duì)應(yīng)的管理節(jié)點(diǎn); 1.3管理節(jié)點(diǎn)判斷收到的寫入數(shù)據(jù)段指紋值是否已經(jīng)在指紋值索引結(jié)構(gòu)中存在,如果不存在,則由接收層直接將該寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,并進(jìn)行指紋值索引結(jié)構(gòu)的更新;如果已存在,則直接進(jìn)行指紋值索引結(jié)構(gòu)的更新。
2.根據(jù)權(quán)利要求1所述的全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于,所述步驟1.3中,管理節(jié)點(diǎn)進(jìn)行指紋值索引結(jié)構(gòu)更新的流程為:如果所述寫入數(shù)據(jù)段指紋值已經(jīng)存在于指紋值索引結(jié)構(gòu)中,則將該指紋值索引結(jié)構(gòu)中對(duì)應(yīng)的指紋值的引用次數(shù)遞增;如果所述寫入數(shù)據(jù)段指紋值不存在于指紋值索引結(jié)構(gòu)中,則向該指紋值索引結(jié)構(gòu)中插入所述寫入數(shù)據(jù)段指紋值;最后將該指紋值索引結(jié)構(gòu)的更新部分寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中。
3.根據(jù)權(quán)利要求1或2所述的全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于: 所述步驟1.1中,采用范圍劃分法來劃分管理節(jié)點(diǎn)可接收指紋值的范圍,即將可接收的指紋值按大小編號(hào),并由管理節(jié)點(diǎn)按順序管理相應(yīng)的可接收的指紋值; 所述步驟1.2中,查找所述寫入數(shù)據(jù)段的指紋值對(duì)應(yīng)的管理節(jié)點(diǎn)的方法為范圍查找法,確定一個(gè)寫入數(shù)據(jù)段的指紋值所處的所述范圍,并確定所述范圍對(duì)應(yīng)的管理節(jié)點(diǎn)。`
4.根據(jù)權(quán)利要求1或2所述的全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于, 所述步驟1.1中,采用哈希劃分法來劃分管理節(jié)點(diǎn)可接收指紋值的范圍,即先為可接收的指紋值計(jì)算哈希值,然后對(duì)該哈希值取模,再根據(jù)取模的結(jié)果與管理節(jié)點(diǎn)的編號(hào)進(jìn)行比較,將可接收的指紋值劃分到管理節(jié)點(diǎn)的編號(hào)與該取模結(jié)果相等的管理節(jié)點(diǎn)管理;其中,取模計(jì)算的公式為:指紋值的哈希值%管理控制器的個(gè)數(shù); 所述步驟1.2中,為每個(gè)寫入數(shù)據(jù)段的指紋值計(jì)算哈希值,并對(duì)該哈希值的結(jié)果取模計(jì)算,找到管理控制器編號(hào)與該取模計(jì)算結(jié)果相等的管理控制器,所述取模計(jì)算的公式為:管理控制器編號(hào)=指紋值的哈希值%管理控制器的個(gè)數(shù)。
5.根據(jù)權(quán)利要求1或2所述的全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于,所述步驟1.1中的指紋值索引結(jié)構(gòu)以已存儲(chǔ)數(shù)據(jù)段的指紋值或該指紋值的一部分為索引關(guān)鍵字,索引關(guān)鍵字對(duì)應(yīng)的值為該已存儲(chǔ)數(shù)據(jù)段的指紋值對(duì)應(yīng)的索引段,所述索引段中包含與該已存儲(chǔ)數(shù)據(jù)段的指紋值對(duì)應(yīng)的數(shù)據(jù)段的物理地址和數(shù)據(jù)段的引用次數(shù);所述指紋值索引結(jié)構(gòu)采用平衡樹索引結(jié)構(gòu)或者哈希表索引結(jié)構(gòu)。
6.根據(jù)權(quán)利要求1或2所述的全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于,所述步驟1.2中,對(duì)所述數(shù)據(jù)流進(jìn)行分段的方法為固定劃分方法,即從所述數(shù)據(jù)流的開始位置,以固定大小將該數(shù)據(jù)流分割為具有固定大小的寫入數(shù)據(jù)段。
7.根據(jù)權(quán)利要求1或2所述的全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于,所述步驟1.2中,對(duì)所述數(shù)據(jù)流進(jìn)行分段的方法為可變長劃分方法,具體步驟為:`4.1設(shè)置用來選取分段數(shù)據(jù)的滑動(dòng)窗口,所述滑動(dòng)窗口大小的初始值為1,從寫入的數(shù)據(jù)流中未分段部分的起始位置開始選擇一個(gè)固定大小的數(shù)據(jù)單元,將該數(shù)據(jù)單元放入滑動(dòng)窗口內(nèi); `4.2計(jì)算所述滑動(dòng)窗口內(nèi)數(shù)據(jù)內(nèi)容的哈希值,并計(jì)算該哈希值的邊界判斷值,所述邊界判斷值的計(jì)算公式為:邊界判斷值=數(shù)據(jù)內(nèi)容哈希值% M,其中M為一個(gè)預(yù)設(shè)值; `4.3如果所述邊界判斷值不等于預(yù)設(shè)邊界判斷值,那么將所述滑動(dòng)窗口的大小遞增,即在該滑動(dòng)窗口中增加一個(gè)固定大小的數(shù)據(jù)單元,并重復(fù)步驟4.2 ;如果所述邊界判斷值等于預(yù)設(shè)的邊界判斷值,則滑動(dòng)窗口內(nèi)的數(shù)據(jù)內(nèi)容即為一個(gè)寫入數(shù)據(jù)段。
8.根據(jù)權(quán)利要求1或2所述的全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于,所述步驟1.3中,管理節(jié)點(diǎn)會(huì)查找每一個(gè)寫入數(shù)據(jù)段的指紋值是否已經(jīng)在其指紋值索引結(jié)構(gòu)中存在;或者,管理節(jié)點(diǎn)將若干個(gè)寫入數(shù)據(jù)段的指紋值組織成一個(gè)集合,然后選取該集合中最大值或者最小值,作為該集合的指紋值,如果該集合的指紋值在所述管理節(jié)點(diǎn)的指紋值索引結(jié)構(gòu)中存在,該管理節(jié)點(diǎn)再在其指紋索引結(jié)構(gòu)中,依次查找所述集合中的每個(gè)值,并根據(jù)該集合中的每個(gè)值是否都存在決定該值對(duì)應(yīng)的寫入數(shù)據(jù)段是否寫入存儲(chǔ)設(shè)備或存儲(chǔ)介質(zhì)中;如果所述集合的指紋值在所述管理節(jié)點(diǎn)的指紋值索引結(jié)構(gòu)中不存在,則所述集合中所有值對(duì)應(yīng)的寫入數(shù)據(jù)段均被寫入所述存儲(chǔ)設(shè)備或存儲(chǔ)介質(zhì)中。
9.根據(jù)權(quán)利要求1或2所述的全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于,所有所述步驟中,對(duì)存儲(chǔ)設(shè)備或者存儲(chǔ)設(shè)備的寫操作都采用順序?qū)懛绞健?br>
10.根據(jù)權(quán)利要求1或2所述的全局重復(fù)數(shù)據(jù)刪除的方法,其特征在于,所述管理節(jié)點(diǎn)和接收層采用同一個(gè)控制器,或者采用兩個(gè)不同的控制器。
11.一種全局重復(fù)數(shù)據(jù)刪除系統(tǒng),其特征在于,包括: 第一模塊,用于將管理層劃分成若干個(gè)管理節(jié)點(diǎn),為每一個(gè)管理節(jié)點(diǎn)劃分可接收指紋值的范圍,并將存儲(chǔ)設(shè)備或者存`儲(chǔ)介質(zhì)上所有已存儲(chǔ)數(shù)據(jù)段的指紋值按照上述范圍與相應(yīng)的管理節(jié)點(diǎn)建立唯一的映射關(guān)系;每一個(gè)管理節(jié)點(diǎn)為與其有映射關(guān)系的指紋值建立指紋值索引結(jié)構(gòu),并將所述指紋值索引結(jié)構(gòu)寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中; 第二模塊,用于使接收層對(duì)接收到的數(shù)據(jù)流進(jìn)行分段,得到多個(gè)寫入數(shù)據(jù)段,為每個(gè)寫入數(shù)據(jù)段計(jì)算寫入數(shù)據(jù)段指紋值,并查找該寫入數(shù)據(jù)段指紋值所對(duì)應(yīng)的管理節(jié)點(diǎn),將該寫入數(shù)據(jù)段指紋值發(fā)送給所對(duì)應(yīng)的管理節(jié)點(diǎn); 第三模塊,用于使管理節(jié)點(diǎn)判斷收到的寫入數(shù)據(jù)段指紋值是否已經(jīng)在指紋值索引結(jié)構(gòu)中存在,如果不存在,則由接收層直接將該寫入數(shù)據(jù)段寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中,并進(jìn)行指紋值索引結(jié)構(gòu)的更新;如果已存在,則直接進(jìn)行指紋值索引結(jié)構(gòu)的更新。
12.根據(jù)權(quán)利要求11所述的全局重復(fù)數(shù)據(jù)刪除的系統(tǒng),其特征在于,還包括第四模塊,用于使管理節(jié)點(diǎn)進(jìn)行指紋值索引結(jié)構(gòu)更新;如果所述寫入數(shù)據(jù)段指紋值已經(jīng)存在于指紋值索引結(jié)構(gòu)中,則將該指紋值索引結(jié)構(gòu)中對(duì)應(yīng)的指紋值的引用次數(shù)遞增;如果所述寫入數(shù)據(jù)段指紋值不存在于指紋值索引結(jié)構(gòu)中,則向該指紋值索引結(jié)構(gòu)中插入所述寫入數(shù)據(jù)段指紋值;最后將該指紋值索引結(jié)構(gòu)的更新部分寫入存儲(chǔ)設(shè)備或者存儲(chǔ)介質(zhì)中。
13.一種存儲(chǔ)裝置,包括存儲(chǔ)介質(zhì)和存儲(chǔ)控制器,其特征在于,所述存儲(chǔ)控制器包括權(quán)利要求11或12所述的全局重復(fù)數(shù)據(jù)刪除系統(tǒng)。
【文檔編號(hào)】G06F3/06GK103514250SQ201310246145
【公開日】2014年1月15日 申請(qǐng)日期:2013年6月20日 優(yōu)先權(quán)日:2013年6月20日
【發(fā)明者】易樂天, 錢凱, 趙朕毅 申請(qǐng)人:易樂天, 錢凱, 趙朕毅