專利名稱:消除文件存儲系統中冗余文件的系統及方法
技術領域:
本發明涉及數據處理領域,更具體地說,涉及一種快速消除文件存儲系統中冗余文件的系統及方法。
背景技術:
在任何一個大規模的存儲系統中都存在大量的冗余文件,例如在個人計算機的本地硬盤中就經常存有一個文件的多個拷貝,這些拷貝很多是由于操作失誤或使用者遺忘而多次拷貝造成的。而在多人共同使用的系統中,由于使用者之間的共享性差,文件的冗余度非常的高。隨著網絡硬盤的興起,不少互聯網公司為用戶提供的網絡硬盤中冗余文件也很多。此外,在web搜索引擎中也存在大量的重復網頁和文件。對于一個文件存儲系統來說,主要的成本就是設備成本,而消除系統中的冗余文件,可以極大節約設備成本,另外消除冗余也可以提高系統的性能。所以無論從節省成本、提高系統處理性能,還是提高用戶使用體驗來說,消除冗余都是很有必要的。
目前的存儲系統消除冗余文件一般是采用文件兩兩之間進行所有字節比較來判斷是否有重復文件。這種文件相互比較的方式,在小系統中也許是可行的。但是在一個大的存儲系統中,時間耗費是相當大的,對于T一級的數據量幾乎是不可行的,而且通常基于文件名稱比較、文件大小比較、或者文件頭的比較不完全準確。
發明內容
本發明要解決的技術問題在于,針對現有文件存儲系統中冗余文件占用空間以及冗余處理效率較低的缺陷,提供一種新的消除文件存儲系統中冗余文件的系統及方法。
本發明解決技術問題所采用的技術方案是提供一種消除文件存儲系統中冗余文件的系統,該系統包括由存儲服務器模塊和索引服務器模塊組成的海量存儲系統,還包括獲取文件MD5值和文件大小的預處理模塊、根據文件MD5值和文件大小進行文件引用數統計的快速存取模塊以及在文件引用數達到指定閾值時刪除冗余文件的去重服務器模塊,其中所述索引服務器模塊、存儲服務器模塊、預處理模塊依次連接,快速存取模塊、索引服務器模塊、存儲服務器模塊、預處理模塊分別與去重服務模塊連接。
本發明所述的消除文件存儲系統中冗余文件的系統中,所述預處理模塊進一步包括將文件存儲系統中容量小但數量較多的文件過濾的過濾子模塊。
本發明所述的消除文件存儲系統中冗余文件的系統中,所述快速存取模塊包括內存哈希映射表及哈希表,所述去重服務器模塊通過哈希算法將文件MD5值進行哈希變換后,經由上述內存哈希映射表映射到對應哈希表,通過比較文件MD5值和文件大小確定相同文件統計文件引用數。
本發明所述的消除文件存儲系統中冗余文件的系統中,在文件引用數達到第一閾值時,所述去重服務器模塊直接根據文件生成節點并將節點加入哈希表。
本發明所述的消除文件存儲系統中冗余文件的系統中,在哈希表中的節點引用數達到第二閾值時,所述去重服務器模塊對節點文件進行去重操作。
本發明所述的消除文件存儲系統中冗余文件的系統中,所述去重服務器模塊在去重操作時對所述引用數達到第二閾值的節點對應文件進行硬鏈接并刪除所述節點對應的文件。
本發明所述的消除文件存儲系統中冗余文件的系統中,還包括一派發服務器,所述所述預處理模塊和去重服務器模塊通過該派發服務器相連接,所述去重服務器模塊包括多個去重服務器,所述派發服務器用于將文件派發給不同的去重服務器進行處理。
本發明還提供一種消除文件存儲系統中冗余文件的方法,所述文件分布存儲于海量存儲系統的存儲服務器模塊中,并通過索引服務器模塊進行文件的定位,包括以下步驟(a)通過掃描存儲服務器模塊獲取文件相關信息并計算文件內容的MD5值,其中文件相關信息包括文件ID、文件大小及文件引用數;(b)根據文件MD5值及文件大小統計文件的引用數,并在文件的引用數達到指定閾值時進行去重操作。
本發明所述的消除文件存儲系統中冗余文件的方法中,所述步驟(a)進一步包括過濾掉非重點文件而保留容量相對較大但數量相對較少的文件的步驟。
本發明所述的消除文件存儲系統中冗余文件的方法中,所述步驟(a)中還包括將過濾后的文件根據去重策略分配到不同去重服務器的步驟。
本發明所述的消除文件存儲系統中冗余文件的方法,所述步驟(b)進一步包括(b1)通過文件MD5值進行哈希運算,并通過內存哈希映射表并找到相應的哈希表;(b2)判斷所述文件引用數是否超過第一閾值,并在所述文件的引用數超過所述第一閾值時將所述文件插入到哈希表頭,并返回步驟(b1);(b3)在所述文件的引用數小于第一閾值時搜尋哈希表找到與所述文件都相等的節點,并將所述節點的引用數加上所述文件的引用數;(b4)判斷所述節點的引用數是否小于一個第二閾值,并在所述節點的引用數小于所述第二閾值時返回步驟(b1);而在所述節點的引用數超過所述第二閾值時對所述節點進行去重操作,并在操作完成后返回步驟(b1)。
本發明所述的消除文件存儲系統中冗余文件的方法,所述步驟(b4)進一步包括步驟(b41)將所述節點的信息返回給存儲服務器模塊,并在哈希表中刪除所述節點;步驟(b42)存儲服務器模塊對所述節點對應的文件ID建立硬鏈接,并返回新的文件ID,索引服務器模塊將所述文件的文件ID更新為上述新的文件ID。
本發明所述的消除文件存儲系統中冗余文件的系統及方法,通過文件的MD5值及文件大小快速找出海量存儲系統中的冗余文件并進行去重操作,降低存儲成本。此外,本發明還可根據可配置的過濾策略,副本策略來進行去重處理,能夠大幅度的降低存儲成本,并在此基礎上保證了系統的安全性,可靠性,以及負荷各個服務器的負荷均擔。
下面將結合附圖及實施例對本發明作進一步說明,附圖中圖1是本發明消除文件存儲系統中冗余文件的系統的結構框圖;圖2是圖1中快速存取模塊的結構框圖;圖3是本發明消除文件存儲系統中冗余文件的方法流程圖。
具體實施例方式
如圖1所示,本發明的消除文件存儲系統中冗余文件的系統包括索引服務器模塊11、存儲服務器模塊12、預處理模塊13、快速存取模塊16以及去重服務模塊15,其中索引服務器模塊11、存儲服務器模塊12、預處理模塊13依次連接,快速存取模塊16、索引服務器模塊11、存儲服務器模塊12、預處理模塊13分別與去重服務模塊15連接。
存儲服務器模塊12和索引服務器模塊11是海量存儲系統中的一部分,其中存儲服務器模塊12主要完成具體文件數據的保存,一般由數十臺乃至幾百臺服務器組成,實現文件的分布式存儲;索引服務器模塊11主要保存每個用戶的邏輯目錄以及文件的邏輯名稱和存儲服務器模塊12上文件名稱的映射,通常也由多臺服務器組成。
預處理模塊13用于去除冗余(重復文件)前的預處理,該預處理包括獲取存儲服務器模塊12中存儲的所有文件的大小、MD5值及文件的引用數等信息,其中引用數是指正在使用文件(副本,底層的物理設備)的邏輯層用戶數量,主要反映文件(副本)的活躍程度。在本實施例中,預處理模塊13也可以由多臺服務器并行工作實現。
預處理模塊13還包括過濾子模塊(圖中未示出),用于過濾以及排序工作,從而為后續的并行集群處理做準備。由于在海量存儲系統中文件數量往往達到幾億個、甚至幾十億個,如果每個文件都進行處理,則效率較低,實時性達不到要求,往往在準備處理某一文件時,該文件已經不存在了。在海量存儲系統中,文件的個數及容量分布是不平衡的,例如在現有的網絡硬盤中,經抽樣分析,1K-50K的文件個數占文件總數的50%左右,約占用的總存儲空間占2%;50K-800K的文件個數占26.4%,占存儲空間的15%;800K-10M的文件個數占8.3%,占存儲空間的51%;10M-64M的文件個數占0.4%,占存儲空間的23%。可見雖然1-50K的文件個數占文件總個數的50%,但是占總存儲空間卻較小,而在去除冗余的過程中,文件的個數是影響效率的關鍵因素,所以這部分不是去除的重點。而800K-10M、及10M-64M的文件容量較大但是數量較少。因此,預處理模塊13過濾掉文件容量不大而數量較多的文件,使系統集中資源重點去除容量較大而數量較少的文件(主要為800K-10M及10M-64M的文件),這樣可以使系統效率提高2-3倍。
快速存取模塊16用于實現高效的處理,其通過提高內存命中率來減少對硬盤的訪問,該快速存取模塊16也可由多臺服務器實現。如圖2所示,快速存取模塊16包括有內存哈希映射表161及哈希表162,從而緩存一些熱點數據,減少對磁盤數據庫的慢速訪問。
在預處理模塊13過濾掉非重點處理文件后,快速存取模塊16在內存中生成一個大容量的內存哈希映射表,該內存哈希映射表通過文件的MD5值來哈希。在本實施例中,設置哈希槽的數量為100萬個,每個哈希槽中存放哈希表的指針。哈希表中的每個哈希節點為64個字節,其中包括文件ID(30字節)、MD5值(16字節)、文件引用數(2字節)、文件大小(4字節)以及文件的對應物理ID(12字節)。在文件尋址時通過MD5值的后6位取模對應到某一哈希槽,并通過存放的指針找到對應的哈希表。在哈希表中,通過比較文件的MD5值和文件大小確認文件是否一致(若MD5值和文件大小都相同,則一致)。如果不一致,則將當前文件新加入到哈希表中;如果一致,則根據去重服務器模塊15的去重副本控制策略進行操作。
去重服務器模塊15相當于一個總控模塊,用于進行去重流程的控制,其從預處理模塊13讀取過濾后的文件列表,并根據去重副本控制策略查詢和更改快速存取模塊16中的內存哈希映射表和哈希表,并去除冗余文件。為了保證海量存儲系統的穩定性,也為了保證集群系統的負荷均擔,去重服務器模塊15的去重副本控制策略必須對副本個數進行控制。例如一個文件,在海量存儲系統中發現1萬個與其內容完全相同的文件,最節約的去重策略是只保留一份副本,所有的用戶都去訪問這個副本。但是這存在風險,若存放該副本的服務器硬盤損壞或其他的一些原因導致該臺服務器暫時停止服務,則一萬個用戶的文件將丟失。即使系統運行正常,大量用戶都涌向同一臺服務器上的同一個存儲位置,對服務器的壓力也是非常大的。因此,必須根據系統需要指定一定的副本控制策略。本實施例中采用以下策略(1)如果引用數在去重前已經達到5個,則不和其他命中的副本合并;(2)如果引用數已經達到120,則不接收新的副本;(3)每次命中的副本必定是引用數最大的那個。
去重服務器模塊15在進行去重操作的時候,具體方式為通過文件(假設該文件為A)MD5值進行哈希運算,并通過內存哈希映射表中的指針找到相應的哈希表。然后判斷文件A的引用數,如果引用數大于或者等于5,則根據該文件A生成相應節點并插入到哈希表頭;如果引用數小于5,則從前到后搜尋哈希表,將文件A的MD5值、文件大小分別和目標節點的相應數據進行比較,如果找到都相等的節點(假設為B),則將節點B引用數加上該文件A的引用數。如果引用數超過120,則刪除該節點B,返回節點B的信息給去重服務器模塊15。去重服務器模塊15將節點B對應的文件ID信息傳給存儲服務器模塊12,由存儲服務器模塊12對該文件ID建立硬鏈接并返回新的文件ID以及文件A的新硬件ID,并將新的文件ID以及A的老文件ID通知索引服務器模塊11,使索引服務器模塊11將A的文件ID更新為新的文件ID。去重服務器模塊15立即或延遲預定時間后刪除文件A。
即使在預處理模塊13過濾掉一部分去重的非重要文件,文件數目仍然在億數量級別,為了提高處理的實時性,可使用多臺機器并行處理。為此,可在前端增加一個派發服務器(圖中未示出),由派發服務器根據相應的策略將文件派發給不同的去重服務器進行處理。為了保證每臺去重服務器的負荷均勻,也為了減少去重服務器的資源競爭狀態,可采用派發策略是根據文件的大小的最后一位,或者后兩位取模進行分流,具體取決于海量存儲系統的規模。
為了保證去重數據的持久性,還可提供一個連接到去重服務器模塊15的磁盤存儲模塊14,以保存去重過程中的一些數據信息以及處理后的結果信息。通過在磁盤存儲模塊14中設置數據庫,還可在快速存取模塊16存儲空間不足時提供空間。為了降低數據庫的規模,同樣可以采用文件大小進行數據的分流。根據具體的條件,可以將數據分布在多臺主機的多個庫表中來集群處理。由于文件大小不同,因此文件內容也不同,所以跨機和跨庫表的幾率相對較小。而且如果分流的策略和去重服務器的分流策略一致,對硬盤數據的訪問就不會出現競爭狀態,也就是不用加入互斥處理。
由于不同的文件在去重前的文件ID各不相同,去重后則有可能指向同一個副本,如果將所有的文件ID都改成同一個ID,雖然能實現減少冗余的目標,但是文件ID中包含的一些特殊的文件信息(例如文件的邏輯屬主、文件的類型等)都會丟失。為避免上述問題,可使用文件存儲系統提供的硬鏈接來保證每個文件的文件ID獨立,同時又能減少存儲空間。其具體操作為在去重時通過對命中的文件硬鏈接到一個不需刪除的副本,然后刪除需要去重的文件。對用戶來說,這個操作是透明的。在某些大型系統中,為了提高安全性,文件的刪除操作不是立即執行,而是通過記錄待刪除的文件,并在預定時間后刪除。
在本實施例中,哈希算法通過將關鍵字(文件MD5值)進行運算而得到索引,實現了一次或多次查詢來定位目標,從而避免了依次遍歷查詢。但是由于哈希槽的規模小于處理集合(待處理文件集合)的規模,因此必然存在多個不同的文件落在一個槽里的情況,即出現沖突。相互沖突的文件,鏈成一個鏈表,需要依次遍歷查詢,因此沖突影響查詢的效率。為了減少沖突,可采取以下措施(1)由于副本的合并(也就是將一個副本上文件遷移到另一個副本上)很耗時),因此可設置最小引用數(例如5),以減少副本的合并(即如果文件的引用數超過最小引用數(例如5),則不用去重,直接加入到哈希表的首部);還可設置最大引用數(例如120)以減少鏈表的長度并控制副本的活躍度(即如果哈希表中的某個節點的引用數達到120,則直接將該節點的數據同步到硬盤,并從哈希表中刪除該節點);(2)通過排序將大小接近的文件放在一起,使重復文件的可能性變大,提高哈希表的命中,并且有利于并行處理;(3)提高哈希槽的個數,使落在一個槽里的元素個數減少,減少沖突。通過這幾個措施可以保證哈希表中沖突次數大幅度減少,從而提高處理效率。
如圖3所示,是本發明的消除文件存儲系統中冗余文件的方法的流程圖。在本實施例中,文件分布存儲于海量存儲系統的存儲服務器模塊12中,并通過索引服務器模塊11進行文件的定位。該方法包括以下步驟步驟S31獲取文件相關信息并計算文件內容的MD5值。在該步驟中,文件相關信息可通過掃描存儲服務器模塊12得到,其中文件相關信息包括文件ID以及文件大小、文件引用數等。除MD5值外,還可計算文件的硬件ID,并可根據文件的大小進行排序。
為提高系統效率,在本步驟中可通過過濾掉一些不符合的文件(非重點文件),從而使系統集中資源處理重點文件(容量相對較大而數量相對較少的文件)。此外,還可通過文件分流來進一步提高文件處理,其中文件分流可根據文件大小進行。
然后,系統根據文件MD5值及文件大小統計文件的引用數,并在文件的引用數達到指定閾值時進行去重操作,其具體包括步驟S32在快速存取模塊16中創建內存哈希映射表161,并通過文件(假如該文件為A)MD5值進行哈希運算,找到相應的哈希表162,從而進行文件A的引用數統計。在本實施例中,哈希表161中的每一節點可包括文件ID(30字節)、MD5值(16字節)、文件引用數(2字節)、文件大小(4字節)以及文件的對應物理ID(12字節)。
步驟S33判斷文件A引用數是否小于第一閾值(可根據具體系統進行設定,在本實施例中為5)。
步驟S34如果文件A的引用數大于或者等于5,則將該節點插入到哈希表頭,并返回步驟S32,進行下一文件的統計。
步驟S35如果文件A的引用數小于5,則從前到后搜尋哈希表,將文件A的MD5值、文件大小分別和目標節點的相應數據進行比較,如果找到都相等的節點(假如為B),則將B引用數加上文件A的引用數。
步驟S36然后判斷節點B的引用數是否小于一個第二閾值(可根據具體系統進行設定,在本實施例中為120)。如果節點B的引用數小于120,則返回步驟S32,處理下一文件。
步驟S37如果節點B的引用數超過120,則對節點B進行去重操作,并在操作完成后返回步驟S32,進行下一文件的去重操作。該步驟具體包括將節點B的信息返回給去重服務器模塊15,并在哈希表162中刪除該節點B,去重服務器模塊15將節點B的文件ID信息傳給存儲服務器模塊12,存儲服務器模塊12對該文件ID建立硬鏈接,并返回新的文件ID,索引服務器模塊11將文件A的文件ID更新為上述新的文件ID。
在上述的去重步驟重,可通過使用數據庫來記錄去重操作,從而保證系統的安全性及可靠性。其具體為去重服務器模塊15將新的文件ID、硬件ID、引用數等信息寫入到數據庫中保存,并將文件A的老文件ID記錄到日志中,延遲一段時間刪除。
以上所述,僅為本發明較佳的具體實施方式
,但本發明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發明揭露的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發明的保護范圍之內。因此,本發明的保護范圍應該以權利要求的保護范圍為準。
權利要求
1.一種消除文件存儲系統中冗余文件的系統,包括由存儲服務器模塊和索引服務器模塊組成的海量存儲系統,其特征在于,還包括獲取文件MD5值和文件大小的預處理模塊、根據文件MD5值和文件大小進行文件引用數統計的快速存取模塊以及在文件引用數達到指定閾值時刪除冗余文件的去重服務器模塊,其中所述索引服務器模塊、存儲服務器模塊、預處理模塊依次連接,快速存取模塊、索引服務器模塊、存儲服務器模塊、預處理模塊分別與去重服務模塊連接。
2.根據權利要求1所述的消除文件存儲系統中冗余文件的系統,其特征在于,所述預處理模塊進一步包括將文件存儲系統中容量小但數量較多的文件過濾的過濾子模塊。
3.根據權利要求1所述的消除文件存儲系統中冗余文件的系統,其特征在于,所述快速存取模塊包括內存哈希映射表及哈希表,所述去重服務器模塊通過哈希算法將文件MD5值進行哈希變換后,經由上述內存哈希映射表映射到對應哈希表,通過比較文件MD5值和文件大小確定相同文件統計文件引用數。
4.根據權利要求3所述的消除文件存儲系統中冗余文件的系統,其特征在于,在文件引用數達到第一閾值時,所述去重服務器模塊直接根據文件生成節點并將節點加入哈希表。
5.根據權利要求4所述的消除文件存儲系統中冗余文件的系統,其特征在于,在哈希表中的節點引用數達到第二閾值時,所述去重服務器模塊對節點文件進行去重操作。
6.根據權利要求5所述的消除文件存儲系統中冗余文件的系統,其特征在于,所述去重服務器模塊在去重操作時對所述引用數達到第二閾值的節點對應文件進行硬鏈接并刪除所述節點對應的文件。
7.根據權利要求1所述的消除文件存儲系統中冗余文件的系統,其特征在于,還包括一派發服務器,所述預處理模塊和去重服務器模塊通過該派發服務器相連接,所述去重服務器模塊包括多個去重服務器,所述派發服務器用于將文件派發給不同的去重服務器進行處理。
8.一種消除文件存儲系統中冗余文件的方法,所述文件分布存儲于海量存儲系統的存儲服務器模塊中,并通過索引服務器模塊進行文件的定位,其特征在于,包括以下步驟(a)通過掃描存儲服務器模塊獲取文件相關信息并計算文件內容的MD5值,其中文件相關信息包括文件ID、文件大小及文件引用數;(b)根據文件MD5值及文件大小統計文件的引用數,并在文件的引用數達到指定閾值時進行去重操作。
9.根據權利要求8所述的消除文件存儲系統中冗余文件的方法,其特征在于,所述步驟(a)中進一步包括過濾掉非重點文件而保留容量相對較大但數量相對較少的文件的步驟。
10.根據權利要求9所述的消除文件存儲系統中冗余文件的方法,其特征在于,所述步驟(a)中還包括將過濾后的文件根據去重策略分配到不同去重服務器的步驟。
11.根據權利要求8所述的消除文件存儲系統中冗余文件的方法,其特征在于,所述步驟(b)進一步包括(b1)通過文件MD5值進行哈希運算,并通過內存哈希映射表并找到相應的哈希表;(b2)判斷所述文件引用數是否超過第一閾值,并在所述文件的引用數超過所述第一閾值時將所述文件插入到哈希表頭,并返回步驟(b1);(b3)在所述文件的引用數小于第一閾值時搜尋哈希表找到與所述文件都相等的節點,并將所述節點的引用數加上所述文件的引用數;(b4)判斷所述節點的引用數是否小于一個第二閾值,并在所述節點的引用數小于所述第二閾值時返回步驟(b1);而在所述節點的引用數超過所述第二閾值時對所述節點進行去重操作,并在操作完成后返回步驟(b1)。
12.根據權利要求11所述的消除文件存儲系統中冗余文件的方法,其特征在于,所述步驟(b4)進一步包括步驟(b41)將所述節點的信息返回給存儲服務器模塊,并在哈希表中刪除所述節點;步驟(b42)存儲服務器模塊對所述節點對應的文件ID建立硬鏈接,并返回新的文件ID,索引服務器模塊將所述文件的文件ID更新為上述新的文件ID。
全文摘要
本發明公開了一種消除文件存儲系統中冗余文件的系統,包括由存儲服務器模塊和索引服務器模塊組成的海量存儲系統,還包括有獲取文件MD5值和文件大小的預處理模塊、根據文件MD5值和文件大小進行文件引用數統計的快速存取模塊以及在文件引用數達到指定閾值時刪除重復文件的去重服務器模塊,其中所述索引服務器模塊、存儲服務器模塊、預處理模塊依次連接,快速存取模塊、索引服務器模塊、存儲服務器模塊、預處理模塊分別與去重服務模塊連接。本發明還提供一種對應的消除文件存儲系統中冗余文件的方法。本發明通過文件的MD5值及文件大小快速找出海量存儲系統中的冗余文件并進行去重操作,可較好的控制存儲成本。
文檔編號G06F17/30GK101079034SQ20061003653
公開日2007年11月28日 申請日期2006年7月10日 優先權日2006年7月10日
發明者熊展志, 張立明 申請人:騰訊科技(深圳)有限公司