專利名稱:存儲系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種存儲系統(tǒng),并且具體地涉及一種具有數(shù)據(jù)去重(deduplication)的存儲系統(tǒng)。
背景技術(shù):
針對企業(yè)市場的輔助存儲需要同時提供若干特征以獲得成功。大容量、高性能和高可靠性形成備份和存檔裝置所需要的核心功能。由于備份涉及到存儲多個版本的相似數(shù)據(jù),所以去重是這種系統(tǒng)的新關(guān)鍵邏輯特征。利用去重,邏輯存儲容量遠大于可用物理空間,從而獲得大量節(jié)省。如果動態(tài)(on-the-fly)對備份流執(zhí)行去重,則可以避免向存儲設備中寫入去重的塊,這對高性能有貢獻。另外,由于分布式處理而使得去重所需要的計算得以擴展,所以可以實現(xiàn)更高性能,經(jīng)過形成對企業(yè)客戶至關(guān)重要的縮短備份窗。在NPL I中公開的存儲系統(tǒng)是提供了所有上文提到的特征的商用分布式存儲系統(tǒng)。簡言之,這一系統(tǒng)可以視為保持如下塊的集合的分布式存儲系統(tǒng),這些塊具有可變長度并且能夠引用其它塊。該系統(tǒng)使用內(nèi)容推導的塊地址并且提供全局內(nèi)嵌塊去重。在NPL I中公開的存儲系統(tǒng)構(gòu)建于DHT (分布式哈希表)上,支持從故障的自恢復,使用擦除碼來生成數(shù)據(jù)的冗余碼(奇偶位),并且提供多個用戶可選數(shù)據(jù)彈性級別。引用列表專利文獻
PTL I:PATTERS0N, R.H.1ncremental garbage collection of data in asecondary storage.專利,2008 年 11 月。US 7451168。PTL 2:PATTERS0N,R.H.Probabilistic summary data structure basedencoding for garbage collection。專利,2010 年 4 月。US 7707166。PTL 3:T0DD,S.J.,KILIAN,M.,TEUGELS,T.,MARIV0ET,K.,AND MATTHYS,F(xiàn).Methods and apparatus for managing deletion of data.專利,2010 年 4 月。US7698516ο非專利文獻NPL1:DUBNICKI,C.,GRYZ, L.,HELDT, L.,KACZMARCZYK,Μ.,KILIAN, W.,STRZELCZAK,P.,SZCZEPKOWSKI,J.,UNGUREANU,C.,AND WELNICKI, M.,Hydrastor:a scalable secondary storage.1n FAST! 09:Proceedings of the 7th conferenceon File and storage technologies (B erkeley,CA,USA,2009),USENIX Association,pp.197-210。NPL 2:WILS0N, P.R.Uniprocessor garbage collection techniques.1n IWMM f 92 !Proceedings of the International Workshop on MemoryManagement(London, UK,1992),Springer-Verlag, pp.1-42。NPL 3:ABDULLAHI,S.E.,AND RINGW00D,G.A.Garbage collecting the internet:a survey of distributed garbage collection.ACM Comput.Surv.30,3 (1998),330-373。
NPL 4:DIJKSTRA,E.W.,LAMPORT,L.,MARTIN,A.J.,SCHOLTEN,C.S.,ANDSTEFFENS, E.F.M.0n-the-fly garbage collection:An exercise in cooperation.Commun.ACM 21,11 (1978),966-975。NPL 5:EFSTATH0P0UL0S, P., AND GUO,F(xiàn).Rethinking DeduplicationScalability.1n 2nd USENIX Workshop on Hot Topics in Storage and FileSystems (Boston,MA, USA,2010 年 6 月)。NPL 6:HAEBERLEN, A.,MISLOVE, A.,AND DRUSCHEL,P.Glacier:highly durable,decentralized storage despite massive correlated failures.1n NSDI ! 05:Proceedings of the 2nd conference on Symposium on Networked Systems Design &Implementation (Berkeley, CA,USA,2005),USENIX Association,pp.143-158。NPL 7:ABD-EL-MALEK, M.,II,W.V.C.,CRAN0R,C.,GANGER,G.R.,HENDRICKS,J.,KL0STERMAN,A.J.,MESNIER,M.P.,PRASAD,M.,SALMON,B.,SAMBAS I VAN, R.R.,SINNAMOHIDEEN,S.,STRUNK,J.D.,THERESKA,E.,WACHS, M.,AND WYLIE, J.J.Ursa minor:Versatile cluster-based sto rage.1n FAST(2005)。NPL 8:QUINLAN, S.,AND D0RWARD, S.Venti:a new approach to archivalstorage.1n First USENIX conference on File and Storage Technologies(Monterey,CA,2002),USENIX Association,pp.89-101。NPL 9:Y0U,L L.,POLLACK, K.T.,AND LONG,D.D.E.Deep store:An archivalstorage system architecture.1n ICDEr 05:Proceedings of the 21st InternationalConference on Data Engineering(Washington,DC,USA,2005),IEEE Computer Society,pp.804-8015。NPL 10:LILLIBRIDGE, M.,ESHGHI,K.,BHAGWAT, D.,EOLALIKAR,V.,TREZIS, G.,AND CAMBLE, P.Sparse indexing:Large scale,inline deduplication using samplingand locality.1n FAST(2009),pp.111-123。NPL 11:WEI, J.,JIANG, H.,ZHOU, K.,AND FENG, D.Mad2:A scalablehigh-throughput exact deduplication approach for network backup services.1n Proceedings of the 26th IEEE Symposium on Massive Storage Systems andTechnologies (MSST)(2010 年 5 月) NPL 12:H0NG,B.,AND LONG,D.D.E.Duplicate data elimination in a san filesystem.1n Proceedings of the 21st IEEE/12th NASA Goddard Conference on MassStorage Systems and Technologies(MSST(2004),pp.301-314。NPL 13:MEISTER,D.,AND BRINKMANN, A.dedupvl:1mproving DeduplicationThroughput using Solid State Drives (SSD).1n Proceedings of the 26th IEEESymposium on Massive Storage Systems and Technologies (MSST) (2010 年 5 月)。NPL 14:MEISTER,D.,AND BRINKMANN, A.dedupvl:Improving deduplicationthroughput using solid state drives (technical report).Tech.rep.,2010 年 4 月。NPL 15:B0L0SKY,W.J.,⑶RBIN,S.,G0EBEL,D.,AND DOUCEUR,J.R.Singleinstance storage in windows 2000.1n Proceedings of the 4th USENIX WindowsSystems Symposium(2000),pp.13-240
NPL 16:ADYA, A.,B0L0SKY, ff.,CASTRO, M.,CHAIKEN, R.,CERMAK, G.,DOUCEUR, J.,HOWELL, J.,LORCH, J.,THEIMER, M.,AND WATTENHOFER, R.Farsite:Federated, available,and reliable storage for an incompletely trusted environment,2002。NPL 17:CLEMENTS, A.,AHMAD,1.,VILAYANNUR, M.,AND LI, J.Decentralizeddeduplication in san cluster file systems.1n Proceedings of the USENIX AnnualTechnical Conference(2009 年 6 月)。NPL 18:ZHU, B.,LI, Κ.,AND PATTERSON, H.Avoiding the disk bottleneck inthe data domain deduplication file system.1n FAST' 08:Proceedings of the 6thUSENIX Conference on File and Storage Technologies(Berkeley, CA, USA,2008),USENIX Association, pp.1-14。NPL 19:EMC Corp.EMC Centera:content addressed storage system,2008 年 I月。http://www.emc.com/products/family/emccentera-family.htm -openfolder =platform。NPL 20 =GUNAffI, H.S.,AGRAffAL, N.,ARPACI—DUS SEAU, A.C.,ARPACI—DUS SEAU,R.H., AND SCHINDLER, J.Deconstructing Commodity Storage Clusters.1n Proceedingsof the 32nd International Symposium on Computer Architecture(Madison,WI,2005年6月)。NPL 21:BHAGffAT, D.,ESHGHI,Κ.,LONG, D.D.Ε.,AND LILLIBRIDGE, Μ.Extremebinning:Scalable,parallel deduplication for chunk-based file backup。
發(fā)明內(nèi)容
技術(shù)問題在NPLl中公開的存儲系統(tǒng)中的刪除過程是以與如下傳統(tǒng)垃圾收集相似的方式,在該傳統(tǒng)垃圾收集中,刪除不在被任何人所需要的塊并且回收它們的空間。然而去重、分布式存儲配置和對故障容許的要求使刪除顯著復雜化。例如一種在刪除運行時停用去重的簡單解決方案可能增加空間消耗,這可能不可接受。好得多的方式是允許在所有時間、甚至與刪除并行地去重。這樣,本發(fā)明的示例目的在于提供一種能夠在實現(xiàn)數(shù)據(jù)去重的同時有效利用存儲空間的存儲系統(tǒng),這是如上文所述的待解決的問題。問題的解決方案根據(jù)本發(fā)明的一個方面,一種存儲系統(tǒng)被配置為包括:數(shù)據(jù)存儲控制單元,其將存儲目標數(shù)據(jù)和地址數(shù)據(jù)存儲于存儲設備中,所述地址數(shù)據(jù)是基于在被指向?qū)ο笾写鎯Φ臄?shù)據(jù)內(nèi)容和存儲位置的數(shù)據(jù)并且指向存儲目標數(shù)據(jù)或者其它地址數(shù)據(jù),以及當嘗試在存儲設備中存儲具有的數(shù)據(jù)內(nèi)容與已經(jīng)在存儲設備中存儲的一條存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的另一條存儲目標數(shù)據(jù)時,在存儲設備中存儲指向已經(jīng)在存儲設備中存儲的一條存儲目標數(shù)據(jù)的地址數(shù)據(jù)以作為另一條存儲目標數(shù)據(jù);以及數(shù)據(jù)釋放控制單元,其釋放存儲設備中的存儲區(qū)域,該存儲區(qū)域 存儲在存儲設備中存儲的存儲目標數(shù)據(jù)或者地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向,其中該數(shù)據(jù)存儲控制單元將存儲目標數(shù)據(jù)或者地址數(shù)據(jù)關(guān)于以時間序列方式劃分的每個時區(qū)在而存儲在存儲設備中,并且該數(shù)據(jù)釋放控制單元釋放存儲設備中的存儲區(qū)域,該存儲區(qū)域存儲在當前時區(qū)之前的以往時區(qū)中在存儲設備中存儲的存儲目標數(shù)據(jù)或者地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向。根據(jù)本發(fā)明的另一方面,一種計算機可讀介質(zhì)存儲程序,該程序包括用于使信息處理器設備實現(xiàn)以下單元的指令數(shù)據(jù)存儲控制單元,其將存儲目標數(shù)據(jù)和地址數(shù)據(jù)存儲于存儲設備中,該地址數(shù)據(jù)是基于在被指向?qū)ο笾写鎯Φ臄?shù)據(jù)內(nèi)容和存儲位置的數(shù)據(jù)并且指向存儲目標數(shù)據(jù)或者其它地址數(shù)據(jù),以及當嘗試在存儲設備中存儲具有的數(shù)據(jù)內(nèi)容與已經(jīng)在存儲設備中存儲的一條存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的另一條存儲目標數(shù)據(jù)時,在存儲設備中存儲指向已經(jīng)在存儲設備中存儲的一條存儲目標數(shù)據(jù)的地址數(shù)據(jù)以作為另一條存儲目標數(shù)據(jù);以及數(shù)據(jù)釋放控制單元,其釋放存儲設備中的存儲區(qū)域,該存儲區(qū)域存儲在存儲設備中存儲的存儲目標數(shù)據(jù)或者地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向,其中所述數(shù)據(jù)存儲控制單元將存儲目標數(shù)據(jù)或者地址數(shù)據(jù)關(guān)于以時間序列方式劃分的每個時區(qū)而存儲在存儲設備中,并且該數(shù)據(jù)釋放控制單元釋放存儲設備中的存儲區(qū)域,該存儲區(qū)域存儲在當前時區(qū)之前的以往時區(qū)中在存儲設備中存儲的存儲目標數(shù)據(jù)或者地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向。根據(jù)本發(fā)明的另一方面,一種信息處理方法被配置為包括將存儲目標數(shù)據(jù)和地址數(shù)據(jù)存儲于存儲設備中,該地址數(shù)據(jù)是基于在被指向?qū)ο笾写鎯Φ臄?shù)據(jù)內(nèi)容和存儲位置的數(shù)據(jù)并且指向存儲目標數(shù)據(jù)或者其它地址數(shù)據(jù),以及當嘗試在存儲設備中存儲具有的數(shù)據(jù)內(nèi)容與已經(jīng)在存儲設備中存儲的一條存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的另一條存儲目標數(shù)據(jù)時,在存儲設備中存儲指向已經(jīng)在存儲設備中存儲的一條存儲目標數(shù)據(jù)的地址數(shù)據(jù)以作為另一條存儲目標數(shù)據(jù);釋放存儲設備中的存儲區(qū)域,該存儲區(qū)域存儲在存儲設備中存儲的存儲目標數(shù)據(jù)或者地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向;執(zhí)行關(guān)于以時間序列方式劃分的每個時區(qū)在存儲設備中對存儲目標數(shù)據(jù)或者地址數(shù)據(jù)的存儲;以及釋放存儲設備中的存儲區(qū)域,該存儲區(qū)域存儲在當前時區(qū)之前的以往時區(qū)中在存儲設備中存儲的存儲目標數(shù)據(jù)或者地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向。本發(fā)明的有利效果由于如上文描述的那樣配置了本發(fā)明,所以有可能提供一種能夠在實現(xiàn)數(shù)據(jù)去重的同時有效利用存儲空間的存儲系統(tǒng)。
圖1示出根據(jù)第一示例實施例的時期(epoch)分配規(guī)則;圖2示出根據(jù)第一示例實施例的塊分類;圖3(a)和3(b)示出根據(jù)第一示例實施例的在刪除塊時引起的問題;圖4示出根據(jù)第一示例實施例的進展時期的狀態(tài);圖5是示出根據(jù)第一示例實施例的用戶操作帶寬的圖形;圖6是示出根據(jù)第一示例實施例的在用戶操作在進行中之時的垃圾識別持續(xù)時間的測量值的圖形;圖7 (a)和7 (b)是指示根據(jù)第一示例實施例的垃圾回收持續(xù)時間和垃圾識別持續(xù)時間的測量值的圖形;
圖8是示出根據(jù)第一示例實施例的當在存儲節(jié)點中引起問題時的垃圾識別持續(xù)時間的測量值的圖形;圖9是示出包括第二示例實施例的存儲系統(tǒng)的整個系統(tǒng)的配置的框圖;圖10是示意地示出第二示例實施例的存儲系統(tǒng)的配置的框圖;圖11是示出第二示例實施例的存儲系統(tǒng)的配置的功能框圖;圖12是用于說明圖11中公開的存儲系統(tǒng)中的數(shù)據(jù)存儲過程的方面的說明圖;圖13是用于說明圖11中公開的存儲系統(tǒng)中的數(shù)據(jù)存儲過程的方面的說明圖;圖14是用于說明圖11中公開的存儲系統(tǒng)中的數(shù)據(jù)取回過程的方面的說明圖;圖15示出根據(jù)第二示例實施例的時期改變;圖16示出根據(jù)第二示例實施例的寫入數(shù)據(jù)的狀態(tài)圖17示出根據(jù)第二示例實施例的待引用的寫入數(shù)據(jù)的數(shù)目的示例計算;圖18示出根據(jù)第二示例實施例的待引用的寫入數(shù)據(jù)的數(shù)目的示例計算;圖19示出根據(jù)第二示例實施例的刪除過程的細節(jié);圖20圖示根據(jù)第二示例實施例的在數(shù)據(jù)刪除時的問題及其解決方案;以及圖21是示出根據(jù)補充注釋I的存儲系統(tǒng)的配置的框圖。
具體實施例方式<第一示例實施例>本實施例做出以下貢獻。第一,它識別了在分布式去重塊存儲庫中的刪除要求。第二,它給出了滿足這些要求并且已經(jīng)在商業(yè)系統(tǒng)中實施的算法。第三,它討論了對刪除過程評估的結(jié)果、示范它的效率并且說明刪除對關(guān)鍵用戶操作的影響。本實施例按照如下進行組織。首先,將概述了刪除要求。然后將會定義刪除的用戶可見語義和關(guān)聯(lián)數(shù)據(jù)模型。然后將描述NPL I中公開的系統(tǒng)中刪除實現(xiàn)方式所面臨的挑戰(zhàn)。然后將具體討論刪除算法。另外,將給出對實施的刪除過程如何解決早先所識別的要求的描述。最后,將討論有關(guān)工作并將提出結(jié)論和將來工作。(對刪除的要求)在所有系統(tǒng)中的刪除必須首先讓用戶有選擇地刪除數(shù)據(jù)并且保留用戶決定保持的數(shù)據(jù)。通常,一旦數(shù)據(jù)被標記用于刪除,就立即執(zhí)行空間回收以保證在存儲利用率方面的效率。但是不同于主要存儲,輔助存儲可以延遲收回不用的空間。立即數(shù)據(jù)刪除并不那么重要,這是因為去重存儲更為空間高效得多,并且空間回收對于CAS(內(nèi)容可尋址存儲)系統(tǒng)更復雜。在企業(yè)備份系統(tǒng)中,需要最小化刪除對比如備份、恢復和復制的用戶操作的影響。這一功能有望全天候(24X7)可用,并且它的性能即使并非完全不受損也不應當由于刪除運行而受損太多。較早版本的存儲系統(tǒng)表明使運行刪除局限于只讀時段難以接受,因為它可能造成重排備份窗。另外,在連續(xù)備份策略的情況下,這樣的約束在實踐中是不可能的。由于運行刪除消耗系統(tǒng)資源,所以它影響總系統(tǒng)性能。減少這一影響是刪除實施目標之一。此外,刪除必須隨整個系統(tǒng)擴展。可以預計的是,成比例地改變計算能力和盤容量將使刪除對總性能的影響保持于相同水平。隨著系統(tǒng)中的機器和盤數(shù)目增加,硬件故障概率增加。為了保證系統(tǒng)可用性,刪除過程必須能夠在存在多個盤、節(jié)點和網(wǎng)絡故障時繼續(xù)它的操作。另外,由于刪除數(shù)據(jù)的能力對于系統(tǒng)的操作是關(guān)鍵的,所以刪除過程必須即使在持久數(shù)據(jù)故障的情況下仍然能夠重啟和完成;因此,刪除的彈性事實上應當高于用戶數(shù)據(jù)的彈性。另外,最后但相當重要的是,刪除不應需要完成大量附加存儲。(用戶可見語義)(數(shù)據(jù)模型)在NPL I中公開的存儲系統(tǒng)的用戶可見的基本數(shù)據(jù)單位是塊。除了二進制數(shù)據(jù)之夕卜,塊可以包含指向其它塊的指針。根據(jù)塊內(nèi)容給推導塊地址,如果有指向其它塊的指針,則包括這些指針。內(nèi)容尋址意味著塊是不可變的,因為否則它們的地址將改變。在本發(fā)明中有兩種不同的塊類型常規(guī)(regular)塊和可搜索塊??伤阉鲏K可以利用其關(guān)聯(lián)搜索關(guān)鍵字來讀取,而不是利用讀取常規(guī)塊所需要的隱含內(nèi)容推導地址。搜索關(guān)鍵字可以是任意字符串并且在可搜索塊寫入時與二進制數(shù)據(jù)和指針一起由用戶提供。由于僅利用可搜索塊的關(guān)鍵字來讀取可搜索塊,所以系統(tǒng)防止利用相同關(guān)鍵字和不同內(nèi)容寫入兩個可搜索塊??伤阉鲏K并不具有常規(guī)地址,并且不能被其它塊所指向。由于在NPL I中公開的存儲系統(tǒng)支持去重,所以常規(guī)塊寫入所返回的地址可以引用已經(jīng)存在的塊,其被稱為用于這一重復寫入的基礎(chǔ)塊。去重針對可搜索塊也起作用。利用這些類型的塊和有關(guān)操作,用戶可以創(chuàng)建塊圖。由于塊不可變,所以這樣的圖形是非循環(huán)性的。為了避免空懸的指針,在并未先寫入這樣的塊的情況下,用戶不能根據(jù)塊內(nèi)容推導出塊地址;因此,僅能以自下至上方式構(gòu)建塊圖。(刪除粒度)該系統(tǒng)未提供一種用于去除個別塊的方式。取而代之,它允許將自給定可搜索塊可到達的所有塊標記為不再需要。更具體而言,有兩個子類型的可搜索塊留存根和刪除根。如果留存根和刪除根的可搜索關(guān)鍵字相等,則稱它們匹配。留存根將自它可到達的塊標記為將要保留的塊,而刪除根“消除”用于匹配留存根的這一性質(zhì)。注意使用額外標記來區(qū)分可搜索塊子類型,因而事實上對關(guān)鍵字唯一性的要求僅適用于留存根。如果在系統(tǒng)中無匹配刪除根,則稱留存根存活。從任何存活留存根可到達的常規(guī)塊是存活的。如果塊未存活,則稱它為死掉。在理論上,有可能給出用于刪除單個塊的操作,而不是將整個塊圖標記用于刪除。然而,這將使保持對個別塊刪除的跟蹤復雜化,并且最重要的是,這可能由于刪除系統(tǒng)中的另一現(xiàn)有塊所指向的塊而引起創(chuàng)建空懸引用。注意,如果惡意用戶知道適當搜索關(guān)鍵字則他能夠刪除其他用戶的塊。這一問題通過利用用戶專屬id對可搜索塊的關(guān)鍵字加密而容易地得到解決。(使用時期在刪除與用戶之間同步)在刪除運行之時寫入具有指針的塊產(chǎn)生了目前為止所描述的刪除問題。假設用戶想要寫入常規(guī)的新塊A。并且通過寫入指向A的留存根R來保持這一個塊。由于必須向R的內(nèi)容中插入A的系統(tǒng)返回地址,所以成功完成寫入A必須先于提交R的寫入請求。如果刪除在這兩個塊的寫入之間運行,則可以刪除A,因為根據(jù)上文給出的定義是它死掉的。通過擴充存活塊的集合以包括用戶可以保持的塊和從它們可到達的所有塊,這一問題可以得到解決。由于用戶可以潛在地保持所有塊,所以還附加地約束用戶可以記住哪些塊。這通過引入用所謂的時期(epoch)構(gòu)建的虛擬時間來實現(xiàn)。時期是代表發(fā)展階段(generation)的進展(advance)操作的全局計數(shù)器。在任何給定的時間點,系統(tǒng)出于被稱為當前時期的僅一個時期中。用戶獲得的每個塊地址具有與這一地址關(guān)聯(lián)的時期。系統(tǒng)在寫入時驗證具有關(guān)聯(lián)時期T的地址僅能在時期T和T+1中使用。對于讀取,用戶仍然可以使用具有更舊時期關(guān)聯(lián)的地址,但是如果塊被刪除則讀取可能失敗。對于給定的塊的地址,它的時期可以根據(jù)如何獲得這一地址而改變。在圖1中給出時期分配規(guī)則。此處,為了完整性而呈現(xiàn)這一水平的細節(jié),但是在后文也將對此進行描述。在寫入無指針的常規(guī)塊時,系統(tǒng)返回關(guān)聯(lián)有當前時期的塊地址。當被寫入塊包含指針時,隨這一寫入返回的時期是向這一個塊中插入的塊地址的時期中的最小值(所謂的最小值規(guī)則)??伤阉鲏K沒有常規(guī)地址,因此未分配時期。在寫入時返回的時期并不依賴于寫入的塊的重復狀態(tài)。也可以通過讀取具有指針的塊來獲得塊地址。通過讀取塊而獲得的指針的時期是相同的。對于具有指針的常規(guī)塊,此時期等于與讀取塊的地址關(guān)聯(lián)的時期。對于具有指針的可搜索塊,此時期等于當前時期。回顧樹構(gòu)建過程要求用戶保持已寫入塊的地址以向父塊中插入它們。然而在時期引入之后,在相繼塊創(chuàng)建中僅允許被打有當前時期和先前時期時間戳的地址。在時期從T向T+1進展(進展操作的應用)之后,向所有用戶通知它以便丟棄與時期T關(guān)聯(lián)的所有塊地址。這里,丟棄指針意味著將他們交付給存活的留存根所指向的樹。這需要在時期能夠進展至T+2之前完成。在時期T+2中,系統(tǒng)在即使單個指針具有關(guān)聯(lián)時期小于T+1的地址時仍然拒絕寫入具有指針的塊。系統(tǒng)也拒絕嘗試讀取不存活的留存根,以約束用戶可以保持的塊地址的集合。這樣的約束對于正確行為的用戶而言是無關(guān)的,但是對于遞送正確刪除過程的系統(tǒng)而目為必需。通過引入和實行上文描述的時期約束,刪除能夠在用戶可以繼續(xù)向系統(tǒng)寫入新數(shù)據(jù)并且讀取所有可訪問塊的同時,識別待去除的不可訪問較舊塊。(刪除挑戰(zhàn))(根集合確定)在典型垃圾收集中,關(guān)于通常由運行程序的全局和活躍局部變量組成的根集合來確定對象可訪問性?!按婊顚ο蟆敝苯訉儆诟希⑶彝ㄟ^圖遍歷從根集合可到達。由于在程序運行期內(nèi)的垃圾收集具有關(guān)于程序變量的完全知識,所以根集合的計算很好理解。在比如NPL I中公開的存儲系統(tǒng)的系統(tǒng)中,這則困難得多,因為其根集合不僅包含與全局變量對應的存活留存根,而且包含其地址(這些地址如同編程語言中的局部變量)仍然可以被用戶記住的塊。如上文指出的那樣,如果沒有關(guān)于記住塊地址的權(quán)限對用戶施加約束,則在NPL I中公開的存儲系統(tǒng)中所有塊將構(gòu)成根集合。引入時期約束限制了根集合,并且支持在本發(fā)明中的刪除。因而根集合僅包括(I)存活留存根和(2)適合于寫入的用戶保持地址,按照時期約束,這些地址僅能具有關(guān)聯(lián)的當前或者先前時期。(去重影響)
為了避免因刪除所引起的增加存儲消耗,拒絕在刪除期間停用去重的解決方案。因而作為去重的附帶結(jié)果,為預定刪除的塊可能復活。保留這樣的塊是本刪除算法中的根本挑戰(zhàn)。(分布)分布式存儲系統(tǒng)經(jīng)常由于節(jié)點添加、去重和故障而改變節(jié)點配置;并且因而在系統(tǒng)內(nèi)的數(shù)據(jù)分布也改變。刪除算法必須盡管必需數(shù)據(jù)和元數(shù)據(jù)的位置變化仍能夠?qū)λ鼈兌ㄎ弧V敝连F(xiàn)在,已經(jīng)討論NPL I中公開的存儲系統(tǒng)中的塊的用戶觀點。然而刪除過程所操作的內(nèi)部數(shù)據(jù)組織與用戶可見的那些組織迥然不同。在NPL I中公開的存儲系統(tǒng)在內(nèi)部是由超節(jié)點組成。每個超節(jié)點由它所負責的哈??臻g的前綴來標識。超節(jié)點的哈??臻g不相交并且覆蓋整個哈??臻g。每個超節(jié)點負責如下塊的用戶寫入和讀取,這些塊具有屬于這一超節(jié)點的哈希空間的基于內(nèi)容的哈希。將超節(jié)點本身劃分成固定數(shù)目的對等體。在寫入時,對塊擦除編碼,然后將所得到片段分布到對等體,這些對等體向針對每個對等體而分開的片段容器追加接收的片段。對等體本身通常分布于物理機器之上以提供節(jié)點故障彈性。刪除算法必須做出保留或者刪除一個塊的所有片段的一致決定。(故障容許)刪除過程必須在盡管有適度數(shù)目的節(jié)點和盤故障時仍然能夠進行。另外,刪除應當應對由于在將來某一時時間將重新出現(xiàn)的間歇性網(wǎng)絡故障而臨時不可用的節(jié)點。具體而言,刪除算法必須能夠區(qū)分在先前死掉機器上發(fā)現(xiàn)的在邏輯上已刪除的塊的片段與仍然存活的那些片段。(物理資源使用)在NPL I中公開的存儲系統(tǒng)是持久存儲,因此顯然在盤上保持片段。具體而言,從父塊取回所指向塊地址可能需要至少一個盤訪問。刪除算法必須考慮盤、存儲器和網(wǎng)絡訪問模式,以高效使用這些資源。(刪除算法)(概述)在NPL I中公開的存儲系統(tǒng)使用一種很好理解的引用計數(shù)的技術(shù)。每個塊具有引用計數(shù)器,該引用計數(shù)器跟蹤指向計數(shù)器所有者的其它塊的數(shù)目。然而當寫入新塊時,未動態(tài)變更所指向塊的計數(shù)器。這樣的立即更新將會由于針對可能位于系統(tǒng)中任何位置處的每個子塊的可能隨機I/o而很昂貴。取而代之,在定期運行的后臺刪除過程中更新引用計數(shù)器。塊計數(shù)器是持續(xù)的并且在存儲塊片段的所有對等體上被復制。對于每個片斷,在刪除期間有兩個版本的計數(shù)器持續(xù)的有效計數(shù)器和用來存儲刪除算法的部分結(jié)果的臨時計數(shù)器。在對等體故障時,可以丟棄臨時計數(shù)器而無損于持續(xù)計數(shù)器。整個刪除由定期運行的兩個階段構(gòu)成在其中計算新計數(shù)器值的垃圾識別。在這一階段之后是空間回收,在該空間回收期間,可以通過刪除在第一部分中識別的垃圾來回收存儲空間。這樣的劃分是可能的,因為如上文指出的那樣,在輔助存儲系統(tǒng)中無需立即回收。另外,允許垃圾識別和空間回收并行進行將由于重復寫入所需要的特殊處理而延長了前者的持續(xù)時間。在這樣的情況下為了將寫入識別為重復,系統(tǒng)將必須檢查塊的回收是否尚未在任何對等體上開始,并且這樣做將需要在重復寫入與物理回收之間的同步。在以下描述中,刪除僅表示垃圾識別階段。這一階段的每次運行計算僅僅直至某一時間瞬間寫入的塊的計數(shù)器。每個開始的運行將塊劃分成三個不相交的類,如圖2中所示。第一類包含在上次成功刪除開始之前寫入的塊。將它們稱為已完成塊。第二類包含更遲、但是在當前刪除開始之前寫入的塊——將它們稱為待完成塊。最后,在當前刪除開始之后寫入的塊屬于第三類,稱為新塊。將通過當前刪除來處理待完成塊,以反映與待完成和已完成塊二者的未處理指向關(guān)系。這能夠造成某一完成或者待完成塊的計數(shù)器的遞增和遞減二者。新塊在這一刪除運行中并未處理,并且它們暫時未影響其它塊計數(shù)器的值。將在下一刪除運行中計算這一影響。具體而言,所有新刪除根在這一刪除運行中無影響。在下一刪除完成之前,簡單地保留所有新塊,并且將它們的計數(shù)器設置成特殊初始值。下一刪除運行將僅處理如下新塊,這些新塊將變成用于這一運行的待完成塊,SP計數(shù)器更新過程為遞增式。每個刪除運行在由每個超節(jié)點中的對等體子集同步地執(zhí)行的子階段中進行。首先,在每個超節(jié)點中選擇刪除算法的初始參與者。如果對等體的數(shù)據(jù)狀態(tài)足夠好,他們才可以參加計算。例如具有指針的所有塊必須存在于對等體的當前位置,以便此對等體能夠執(zhí)行刪除算法的步驟。所選對等體然后稱為良好對等體,并且它們中的每個對等體執(zhí)行相同任務以識別垃圾塊,即在刪除計算中具有高冗余性。剩余對等體在刪除算法期間是空閑的,并且最終在刪除結(jié)束之后從后臺中的其它對等體接收最終計數(shù)器。接著,讀入指向其它塊的所有待完成塊,分布它們的指針,并且使它們的目標塊計數(shù)器遞增。在遞增期間,初始值視為O。在完成遞增之后,需要識別起始塊以用于遞減。這些包括具有匹配刪除根的留存根以及未讓它們的計數(shù)器遞增的常規(guī)待完成塊(暫時假設無新塊指向它們)。將這樣的塊的計數(shù)器改變成O。來自這樣識別的垃圾的所有指針在垃圾指向的塊中弓I起計數(shù)器遞減。然而遞減也可能引起一些其它塊計數(shù)器降至O。因此,可能再次識別新垃圾,并且重復遞減直至未發(fā)現(xiàn)新垃圾。在后文描述的兩階段交付中進行向新計數(shù)器的切換。在交付之后,垃圾塊不再可讀,并且在后臺中回收它們占用的空間。任何對等體故障減少良好對等體的集合。如果在任何超節(jié)點內(nèi)的良好對等體數(shù)目降至某一可配置最小值以下,則中止整個刪除過程,并且放棄它的部分結(jié)果。如上文概括的刪除過程順利地工作,但是僅如果無新寫入則才如此。在有新寫入時,存在在下文中處理的主要復雜因素。(復雜因素)考慮圖3(a)中的情況,在該情況下,恰在刪除開始之前已經(jīng)寫入塊A,并且恰在這一時間點之后已經(jīng)寫入指向A的留存根R。這里,A肯定未被除了 R之外的其它新塊所指向;因此被識別過程跳過。因而A被不正確地刪除。應當注意,盡管圖3(a)示出其中在刪除開始之后已經(jīng)寫入指向塊A的留存根的情況,但是塊A不應刪除。
對這一問題的解決方案是利用上文描述的時期約束。回顧不允許用戶保持比先前時期更舊的地址。因此,使此時期進展兩次并且保證在第一次進展與第二次進展之間寫入的塊將如圖4中所示那樣來發(fā)送它們的增量就足夠了。注意并未從這樣的塊發(fā)送減量,因為將引起去除一些新塊和違反無條件地保留新塊的基本假設。因此,此時期總是如圖4中所示被遞增一以由此向下一發(fā)展階段(generation)移位。第二次進展保證用戶丟棄在開始的刪除之前所獲得的塊A的地址,因此不能創(chuàng)建對A的新引用??梢灾赶駻的僅有新塊是在第一次進展之前并且在第二次進展之后寫入的塊。但是這些精確地是從其發(fā)送附加增量的塊。去重引起了下一問題,并且該問題在圖3(b)圖示??紤]在當前刪除開始時未被任何其它塊所指向的待完成塊A。如果用戶寫入重復塊A、然后寫入指向A的留存根R,則應當保留二者。然而刪除過程將會把A識別為垃圾,因為任何待完成塊和舊塊均未指向它。于是A的刪除是不正確的,并且引起數(shù)據(jù)損失。為了解決這一問題,在寫入時通過設置所謂的不刪除標記來將重復寫入的基礎(chǔ)塊標記為在當前刪除期間不可刪除。在刪除完成時,當塊將要被刪除(即它的新計算的計數(shù)器為O)并且設置有不刪除標記時,通過將這樣的塊的計數(shù)器恢復成初始值來保留塊。如果刪除未在進行中,則重復寫入未設置任何標記。在已經(jīng)計算所有新計數(shù)器值之后,未針對重復寫入設置新的不刪除標記。繼續(xù)寫入這樣的標記將引起在設置與使用它們以將計數(shù)器恢復成初始值之間的競爭。取而代之,使用所謂的基礎(chǔ)塊過濾以避免在只是將要刪除寫入的基礎(chǔ)塊時而將寫入分辨為重復。只有在基礎(chǔ)塊的仍然是臨時的但是準備好交付的計數(shù)器為正或者設置不刪除標記時,則才對寫入去重。否則,即使新塊的潛在基礎(chǔ)塊已經(jīng)存在于系統(tǒng)中,仍然寫入新塊。完成的刪除運行可以造成具有的計數(shù)器值被設置成初始值為刪除塊。下一刪除運行需要決定是否真正地應當保持這些塊。按照需要,用附加遞歸遞增來完成這一點。對于新刪除待完成塊中的至少一個待完成塊所指向的每個未刪除塊,向被指向塊遞歸地發(fā)送增量。注意,在上次已完成刪除運行的情境中,未刪除塊僅能被其它未刪除塊或者新塊所指向。如果給定的未刪除塊可由任何新塊到達,則這樣的未刪除塊將由上文描述的遞歸遞增過程達到。否則,不可到達未刪除塊將被這一刪除運行識別為垃圾。(細節(jié))(刪除和時期改變)刪除運行如圖4中所示覆蓋一個完整時期和下一時期的部分。如上文描述的那樣,稱為預備時期的第一時期允許用戶丟棄具有舊時期的地址。在稱為刪除標記時期的第二時期中,執(zhí)行實際刪除計算。沒有理由在刪除運行結(jié)束時解除(bump)當前時期。進展操作由系統(tǒng)中的分離實體協(xié)調(diào),該實體保證只有在所有用戶均確認除掉舊地址時才執(zhí)行下一進展。(計數(shù)器遞增)在時期進展兩次并且選擇良好對等體之后,基于待完成塊的批量遞增開始(在圖4中描繪增量源)。良好對等體讀取具有指針的待完成塊中的塊地址,并且向負責目的地地址的超節(jié)點中的良好對等體傳送對(源地址,目的地地址)。目的地良好對等體在消息接收時并未遞增目標塊計數(shù)器。這一點的原因有兩重消息可以通過網(wǎng)絡變得重復,因此可以多于一次遞增計數(shù)器。另外,多次訪問隨機塊的計數(shù)器以逐個執(zhí)行遞增將是低效的。取而代之,接收的所有指針被存儲到臨時本地存儲裝置,并且隨后讀取、使這些指針唯一化以及批量應用于臨時計數(shù)器。在批量遞增之后,系統(tǒng)對使其計數(shù)器遞增的未刪除塊進行定位并且執(zhí)行如上文提到的遞歸遞增。當完成整個遞增時,一些常規(guī)待完成塊(與留存或者刪除根相反)可以仍然設置有初始值,這意味著無新指針指向它們。所有這樣的塊均是用于下文描述的遞減算法的附加輸入。(計數(shù)器遞減)計數(shù)器遞減始于初始識別的垃圾根,并且如上文描述的那樣遞歸地進行直至未發(fā)現(xiàn)更多新垃圾。單輪的減量分布和實際遞減與遞增以相同的方式工作,而僅有的不同在于它使計數(shù)器減小而不是使其它們增加。(新計數(shù)器交付)一旦上一輪遞減結(jié)束,針對每個超節(jié)點驗證計算的計數(shù)器相等性。在任何超節(jié)點上的計數(shù)器未匹配將指示軟件故障。如果發(fā)現(xiàn)任何未匹配,則中止刪除過程。在成功驗證之后,使臨時計數(shù)器持續(xù),并且系統(tǒng)準備好使用它們。良好對等體表決進入恰當交付階段,在該交付階段中,系統(tǒng)開始使用新計數(shù)器。從現(xiàn)在開始,在故障之后重啟的每個節(jié)點設法完成計數(shù)器交付。切換本身很快,因為它僅需替換所有片段容器的元數(shù)據(jù)。(不刪除標記組織和處置)如上文描述的那樣,在刪除期間的重復寫入觸發(fā)在每個良好對等體上的特殊不刪除標記的寫入。未針對新塊設置不刪除標記,因為當前刪除運行決不刪除這樣的塊。在遞減之后,無論塊何時設置有新計數(shù)器值零和不刪除標記,都會將它的計數(shù)器重置成初始值,因此這一個塊不會再被視為垃圾。作為塊寫入的部分的去重是基本操作,并且它的性能對于整個系統(tǒng)的性能是關(guān)鍵的。因此,設置不刪除標記必須很高效。這通過在良好對等體存儲器中將未刪除標記作為位圖來實現(xiàn)。這是安全的,因為只要在每個超節(jié)點中有足夠的良好對等體就進行刪除。(基礎(chǔ)塊過濾過程)一旦交付開始,就不再寫入不刪除標記。取而代之,檢查用于在寫入期間識別的基礎(chǔ)塊的每個候選是否它將幸免于當前刪除。這通過向所有良好對等體的查詢來執(zhí)行。僅在針對這一個塊設置不刪除標記或者這一個塊的最近計算的、但是仍然臨時的計數(shù)器為正時,對等體的答復才為肯定。在答復為肯定時,執(zhí)行去重;否則,寫入新塊。當接收所有良好對等體答復時,將最終答復計算為所有收集的答復的邏輯與。這是因為所有良好對等體必須均返回肯定答復以保證將在這一刪除運行結(jié)束之后將會保留基礎(chǔ)塊候選。部分答復可能不一致,因為較早發(fā)出的不刪除標記寫入可能失敗,從而僅使一些良好對等體上設置有不刪除標記。(將不刪除標記應用于計數(shù)器)當檢測到不刪除標記的不一致時,通過將邏輯與應用于從超節(jié)點內(nèi)的所有良好對等體收集的位并且向所有良好對等體往回分布結(jié)果來使它們一致。此后,對于設置有不刪除標記并且計算的計數(shù)器值等于最終零的每個塊,將這一計數(shù)器值改變成初始零。(空間回收概述)作為垃圾識別的結(jié)果,一些塊計數(shù)器可能降至零。雖然每個這樣的塊不再可讀,但是它仍然占用存儲資源?;厥漳切┵Y源需要重寫該塊的片段駐留于其中的整個容器,因此這是工作繁重的操作。為了避免不必要的繁重工作,在需要存儲資源時,或者在有用于執(zhí)行回收的空閑周期時,回收存儲資源。為了可快回收盡可能多的存儲資源,將優(yōu)先權(quán)給予具有最高的待去除片段率的容器。(刪除正確性分析)將證明上述刪除過程正確,即它未去除的從如上文定義的根集合可到達的塊。理想地,應當也能夠表明垃圾識別去除從根集合不可到達的所有塊。然而情況并非如此,因為在任何時間點,用戶可以從存儲器去除塊的地址,因此從當前根集合去除該塊。例如,用戶可以在垃圾識別在進行中之時寫入新的常規(guī)塊,并且立即忘記這一個塊的地址。然而被這樣的地址引用的塊雖然不可被來自根集合的塊到達,但是它不會被去除。因此,將僅證明刪除去除大類的塊。從可用于證明該主定理的以下引理開始。(引理5.1)在時期T中結(jié)束的刪除運行將保留在系統(tǒng)時期T-1中寫入的留存根可到達的塊,這些塊的地址帶有關(guān)聯(lián)時期T-2。(證明)如上文描述的那樣,增量從在T-1中寫入的留存根發(fā)送,并且傳播到這樣的留存根可到達的所有塊,特別是具有時期T-2的塊?,F(xiàn)在介紹可用于證明主張的一些術(shù)語??紤]比如讀取、寫入和忘記獲得地址的用戶操作在從第一進展直至刪除運行結(jié)束的垃圾識別期間執(zhí)行。這樣的操作的數(shù)目有限,并且它們以某一順序執(zhí)行;向它們分配連續(xù)自然數(shù)。在已經(jīng)定義順序后,令數(shù)學式I為用戶所記住的、限于有效寫入地址的地址集合序列,即假設在時期T中,用戶并未保持來自時期T-2和更早時期的地址。此外,還定義由在第一進展之前存活的留存根所構(gòu)成的集合的并行序列數(shù)學式2。集合Ri隨著在第一進展之后的每個新寫入的根而改變。這里,未考慮在第一進展之后寫入的刪除根,因為它們未影響這一刪除運行。令修改Ui的數(shù)學式3操作是常規(guī)塊寫入、任何類型塊的讀取和忘記保持的地址。修改Ri的操作是留存根寫入。每個操作改變這些集合中的僅一個集合。[數(shù)學式I]{Ujiel..n[數(shù)學式2]{Rjiel..n[數(shù)學式3]Si = Ui U Ri注意在第i個瞬間,Ui的任何元素均可讀。為了證明刪除過程的正確性,示出保留從Sn可到達的所有塊就足夠了。為此,將證明更強命題。(定理5.2)(正確性性質(zhì))在時期T中結(jié)束的刪除運行將保留集合Si的以下元素1.屬于Ri的所有留存根,2. Ui中具有的關(guān)聯(lián)時期等于T-1或者T的所有地址,
3. Ui中具有時期T-2 (如被來自Rn的任何留存根所指向)的地址,4.從⑴、⑵或者(3)可到達的所有塊。(證明)將通過歸納進行證明?;A(chǔ)=Stl可以僅包含來自T-2的存活留存根和地址。刪除不會去除從這樣的留存根可到達的塊,因為它是應用的引用計數(shù)的自然性質(zhì)。來自T-2的地址按照引理5.1滿足命題。歸納步驟令Si滿足命題。作為以下操作之一的結(jié)果可以從Si創(chuàng)建Si+1 :(1)去除使si+1很一般地滿足命題的被遺忘的地址。(2)添加從屬于Ri的留存根所讀取的地址。讀取的地址滿足歸納假設的命題。(3)添加從具有指針的來自Ui的具有時期T-2的塊所讀取的地址。讀取的地址來自時期T-2(參見圖1)并且按照引理5.1如果被來自Rn的任何留存根可到達則將被保留。(4)添加從具有指針的來自Ui的具有時期T-1或者T的塊讀取的地址。讀取的地址從Ui可到達,并且具有時期T-1或者Τ,因此按照歸納假設將被保留。(5)添加通過寫入無指針的規(guī)則塊而獲得的地址。獲得的地址將來自時期T-1或者Τ。如果未對塊去重,則當前垃圾識別簡單地不刪除它。否則,設置不刪除標記,或者基礎(chǔ)塊過濾在刪除運行結(jié)束之后確認塊存在。這二者保證當前刪除不刪除基礎(chǔ)塊。(6)添加通過寫入具有指針的塊而獲得的地址,其中插入的至少一個地址來自時期Τ-2。按照圖1中陳述的所謂最小值規(guī)則,這樣的返回地址將與時期Τ-2關(guān)聯(lián)并且將按照引理5.1被有條件地保留。(7)添加通過寫入具有指針的塊而獲得的地址,其中插入的所有地址具有時期T-1或者Τ。同樣,如果未對這樣的塊去重,則當前刪除簡單地不去除它。如果這樣的寫入被分辨為重復,則如在(5)的情況下那樣,保留基礎(chǔ)塊。被指向塊來自Ui,因此按照歸納假設保留它們。(8)通過寫入在系統(tǒng)時期T-1期間的留存根來擴充民。保留從這樣的留存根可讀的塊,因為遞增過程覆蓋了它們。(9)通過寫入在系統(tǒng)時期T期間的留存根來擴充民。這樣的留存根僅能具有來自按照歸納假設保留的Ui的、來自T-1和T的插入地址?,F(xiàn)在將定義刪除去除的塊的類。(定理5.3)(非空性質(zhì))刪除運行將在刪除開始之前寫入并且同時滿足以下條件的塊識別為垃圾1.未被在刪除開始之前的任何存活留存根可到達,以及2.未被在第一和第二進展之前寫入的任何留存根可到達,以及3.未用作為用于在這一運行期間的重復消除的基礎(chǔ)塊。(證明)根據(jù)增量和減量的邊界設置,這樣的塊將讓它們的計數(shù)器計算為O。如果并未使用這樣的塊作為用于在刪除期間的重復消除的基礎(chǔ)塊,則O計數(shù)器變成有效并且去除這樣的塊。(解決刪除要求)刪除算法滿足上文提到的所有要求。此算法以更早描述的定義好的塊存活語義為特征。保留所有“存活塊”,刪除多數(shù)“停用塊”。系統(tǒng)可以臨時保留一些潛在垃圾塊,因為刪除算法是保守的。然而,僅僅保持這樣的塊直至下一刪除運行,下一刪除運行將識別這些塊為垃圾。由于上文描述的時期約束,客戶端能夠在刪除期間向系統(tǒng)中進行寫入而無中斷。不刪除標記的輕量級機制在刪除運行的同時允許良好的去重有效性和寫入性能。如下文呈現(xiàn)的性能評估示出的那樣,刪除由于設計決策而引起用戶可見總體系統(tǒng)性能的很有限下降,這些設計決策比如是(I)推遲空間回收和引用計數(shù)器更新;(2)增量和減量的有效分布以及它們批量應用于臨時計數(shù)器;(3)從具有最高的待收獲空間率的容器開始空間回收;以及(4)保持良好對等體存儲器中的不刪除標記。刪除算法的可擴展性與整個系統(tǒng)的可擴展性相似,因為刪除計算分布于超節(jié)點之中。刪除以與針對用于用戶寫入和讀取的數(shù)據(jù)位置所執(zhí)行的方式相似的方式,使用內(nèi)部DHT來應對系統(tǒng)的動態(tài)性質(zhì)。刪除過程對于對等體故障有彈性。由于在對等體之中的計算冗余性,對等體故障很少會終止識別過程。只要對于每個超節(jié)點具有充分數(shù)目的良好對等體,識別就繼續(xù)。上文描述的計數(shù)器驗證給予免于最有害軟件故障的保護。(性能評估)除指出之處外所有實驗均使用由4個存儲節(jié)點(SN)和2個訪問節(jié)點(AN)組成的內(nèi)容可尋址存儲系統(tǒng)。所有服務器運行Red Hat EL 5.3 Linux,具有2個四芯3GHz CPU和4個GigE卡。每個SN具有24GB的RAM和12個ITB SATA盤,而每個AN具有8GB的RAM和有限本地存儲。利用可壓縮33%的平均塊大小64KB來執(zhí)行實驗。將數(shù)據(jù)塊寫為9個原有片段和提供對3個故障的冗余性的3個冗余片段。如果未另外指定,則在所有實驗中均使用向用戶操作(讀取和寫入)給予70%系統(tǒng)資源并且向與刪除有關(guān)任務給予30%的默認資源劃分策略。(讀取/寫入帶寬)這一實驗測量了垃圾識別對用戶寫入和讀取的性能的影響。對于寫入,將這一影響測量為寫入的數(shù)據(jù)的去重率的函數(shù)。收集了共計15個數(shù)據(jù)點,3個一組,每組中5個去重率值,其范圍從0%至幾乎100%,步長25%。每組中的第一測量對在無刪除運行時具有給定的去重率的寫入帶寬進行測量。用相同基本場景收集第二和第三數(shù)據(jù)點首先用4TB的非重復數(shù)據(jù)填充空系統(tǒng),并且執(zhí)行刪除以計算塊計數(shù)器。接著加載400GB的新數(shù)據(jù)并且刪除400GB的現(xiàn)有數(shù)據(jù)。這兩個數(shù)據(jù)點之間的不同在于所用的資源劃分策略第二數(shù)據(jù)點使用向?qū)懭虢o予100%的資源劃分策略,而第三數(shù)據(jù)點使用向刪除保留30%的資源的默認資源劃分策略。對于讀取,執(zhí)行三個相似實驗,但是測試對一開始加載的數(shù)據(jù)的一些連續(xù)片段的讀取,而不是寫入數(shù)據(jù)。使用兩個AN,并且在每個實驗中寫入許多流以保證瓶頸不在客戶端側(cè)上。圖5中的結(jié)果示出對于高度重復的流寫入帶寬最顯著下降。在這樣的情況下,CPU是瓶頸,并且垃圾識別過程需要例如用于寫入不刪除標記的大量CPU周期。對于更少去重的流,寫入性能與設置的資源劃分策略匹配。刪除對讀取的影響甚至比對寫入更小。這是因為在本發(fā)明的存儲系統(tǒng)中的讀取過程聚焦于以帶寬為代價的少量讀取延時,因此讀取未完全利用CPU和盤資源。因而,仍然可以適應刪除需要而對讀取延時無重大影響。(垃圾識別持續(xù)時間)
在執(zhí)行上文描述的實驗之時,還附加地測量了垃圾識別的持續(xù)時間。在圖6中給出針對利用默認資源劃分策略的情況的結(jié)果。測量了第二刪除運行的垃圾識別的持續(xù)時間。對于刪除持續(xù)時間,盤是瓶頸。由于非重復寫入密集地使用盤,所以刪除持續(xù)時間在存在這樣的寫入時需時最長。在讀取期間,未使用所有盤,因為要求少量讀取延時;因而在讀取期間的刪除持續(xù)時間短。對CPU周期的最高刪除需要是在設置用于重復寫入的不刪除標記時。如上文說明的那樣,利用默認資源劃分策略,刪除獲得足夠CPU周期,但是這造成更低寫入性能。(垃圾回收)在測量垃圾回收的持續(xù)時間的5個實驗中的每個實驗中,寫入500GB的數(shù)據(jù)并且刪除該數(shù)據(jù)中的50GB,只是為了完成回收而改變了待重寫的數(shù)據(jù)量。圖7(a)示出在垃圾回收持續(xù)時間與待重寫的數(shù)據(jù)量之間的幾乎線性關(guān)系。這是因為垃圾回收的持續(xù)時間與如下容器的數(shù)目成比例,這些容器保持具有等于零的計數(shù)器的塊。如上文描述的那樣,必須在空間回收期間重寫具有這樣的塊的容器。重寫容器是繁重操作,因此如預計的那樣,待重寫容器越多,空間回收的持續(xù)時間就越長。(刪除可擴展性)已經(jīng)使用具有I至4個SN的系統(tǒng)來執(zhí)行用于考察刪除可擴展性的實驗。已經(jīng)用4TB的非重復數(shù)據(jù)填充系統(tǒng),該數(shù)據(jù)中的5%被標記用于去除,并且開始刪除。圖7(b)示出兩節(jié)點垃圾識別與單個節(jié)點的幾乎兩倍一樣快,添加超出2個的更多節(jié)點仍然幾乎線性地、但是更少陡峭地減少這一階段。添加節(jié)點減少刪除持續(xù)時間,因為刪除待完成的工作未隨更多節(jié)點而改變,并且它分布于所有節(jié)點之中。(在節(jié)點故障之后的刪除性能)執(zhí)行了 3個實驗以測量節(jié)點故障如何影響識別持續(xù)時間。在每個試驗中,在一開始使用4個SN,用2TB的非重復數(shù)據(jù)填充系統(tǒng),并且將該數(shù)據(jù)中的5%標記用于去除。在第一實驗期間,僅執(zhí)行垃圾識別。在第二實驗期間,關(guān)掉SN之一,開始垃圾識別,等待直至選擇良好對等體,并且重啟已經(jīng)關(guān)掉的SN。在第三實驗期間,恰好在開始垃圾識別之前停掉SN之一。在每個實驗中,已經(jīng)測量從選擇良好對等體到垃圾識別結(jié)束的時段的持續(xù)時間。在圖8中示出結(jié)果。由于在選擇良好對等體之后重啟SN之一并且這一節(jié)點未參加垃圾識別,所以第二持續(xù)時間更多。因此,在僅3個SN而不是4個之間劃分在識別期間待完成的工作。第三持續(xù)時間比第二持續(xù)時間長得多,因為在整個垃圾識別期間,執(zhí)行為了重建數(shù)據(jù)而需要的后臺任務。注意如果故障出現(xiàn)于識別中間,則過程將設法完成,并且它的持續(xù)時間不會比在第三實驗中呈現(xiàn)的持續(xù)時間更長。(有關(guān)工作)在本發(fā)明中的實施的刪除帶來與好理解的具有動態(tài)數(shù)據(jù)結(jié)構(gòu)的編程語言的并行垃圾收集(NPL 2、3)的一些類似性。然而,有顯著不同。一方面,在本發(fā)明中的刪除由于內(nèi)容可尋址存儲系統(tǒng)的去重、可擴展性和故障容許去重而更為復雜;另一方面,刪除被簡化,因為塊圖必須非循環(huán),這對于編程語言的垃圾收集不成立。在本發(fā)明中的刪除基于推遲的引用計數(shù)(NPL 2)。備選地,可以已經(jīng)是使用標記和掃除(NPL 4)來實施刪除。針對它決定避免在每個刪除時遍歷所有數(shù)據(jù)。分組的標記和掃除(NPL 5)嘗試通過對備份分組并且僅掃除如下那些容器來解決這一問題,這些容器保持來自如下組的對象,這些組具有自從算法的先前運行起刪除的一些文件。由于備份數(shù)據(jù)中的去重率高,所以即使可能有很少數(shù)據(jù)待回收,但去除一個舊備份仍然可能造成掃除具有共享數(shù)據(jù)的多個容器;而利用引用計數(shù),情況就并非如此。在本發(fā)明中使用的不刪除標記的方式與在三色標記和掃除方案中在讀取時使白色對象變灰(NPL 2)相似。在無去重時,在分布式存儲系統(tǒng)中的刪除相對簡單,并且可以如同在Glacier (NPL6)中用租賃或者如同在Ursa Minor (NPL 7)中用過時版本的簡單回收來完成。然而利用去重,刪除出于更早說明的原因而變得困難。例如Venti (NPL 8), Deep Store (NPL 9)和Spare Indexing (NPL 10)尚未實施刪除。另一類的系統(tǒng)以分裂性方式在它們的存儲單元上實施垃圾收集。MAD2(NPL 11)對指紋進行引用計數(shù),但是凍結(jié)在物理刪除時段期間的所有涉及到的儲箱(tanker)。DDE (NPL 12)撤消客戶端保持的所有數(shù)據(jù)鎖定以釋放去引用的塊。Dedupvl (NPL 13,14)在后臺中標記未引用的塊為“垃圾收集候選”,但是僅在系統(tǒng)空閑時才交付它們的去除。其它工作包括在SIS(NPL 15)中和在FARSITE(NPL 16)中使用向后指針(引用列表)17)中在對帶外更新的全局哈希索引的部分的獨占掃描期間收集未用塊。數(shù)據(jù)域(PTL 1、2、NPL 18)提出在具有內(nèi)嵌去重的集中式系統(tǒng)中的垃圾收集過程。使用Bloom濾波器來完成選擇用于去除的塊,該濾波器造成一些垃圾保留于系統(tǒng)中。EMC Centera(PTL 3,NPL 19,20)提出了內(nèi)容單元的顯式刪除,但是未提到如何處置并行刪除和去重,Extreme Binning (NPL 21)使它們的去重局限于倉內(nèi)并且主張這一劃垃圾收集,但是未給出細節(jié)。(結(jié)論和將來工作)已經(jīng)描述用于具有去重的可擴展存儲的刪除算法。已經(jīng)在作為商用系統(tǒng)的內(nèi)容可尋址存儲系統(tǒng)中實施和部署本發(fā)明的刪除。算法是非分裂性的,即允許刪除隨著用戶讀取和寫入而進行。另外,它解決其它關(guān)鍵功能要求,比如高可用性、對用戶操作的少量性能影響和對多個盤、節(jié)點或者網(wǎng)絡故障以及由于系統(tǒng)增長所產(chǎn)生的配置改變的彈性。刪除對總性能的影響在改變計算能力或者盤容量方面很好地擴展。通過在舊數(shù)據(jù)與新寫入的數(shù)據(jù)之間創(chuàng)建邊界的時期機制實現(xiàn)連續(xù)可用性,因為設置了靜默點,并且可以在計數(shù)器計算期間執(zhí)行讀取和寫入。因此,進行中的備份未受后臺中運行的刪除過程影響。事實上,時期引入對于定義用于非分裂性刪除過程的清晰語義而言是至關(guān)重要的。性能影響又很小,因為批量執(zhí)行刪除的操作,并且它們分布于整個網(wǎng)絡內(nèi)。重要的是,在主存儲器中保持不刪除標記,這致使在用戶寫入時的低標記處置開銷。通過與良好對等體關(guān)聯(lián)的計算的冗余性而實現(xiàn)故障容許。所選對等體冗余地執(zhí)行關(guān)鍵計算,從而即使它們中的若干崩潰、仍然允許刪除過程繼續(xù)。良好對等體也負責刪除過程可擴展性以保證性能根據(jù)系統(tǒng)大小的可擴展性。通過將刪除工作與每個超節(jié)點關(guān)聯(lián)來保證刪除可擴展性而無任何集中式部件。雖然刪除如今為全功能,但是重要特征仍然可以提高它對于終端用戶的價值。由于刪除過程是非分裂性的,所以多數(shù)改進涉及到保證進一步性能增進。潛在改進之一是引入用于具有指針的塊的分離容器,這可以加速計數(shù)器遞增階段。除了提高性能之外,將來工作的其它方向包括通過抽點檢查中間刪除結(jié)果使刪除可重新開始。〈第二示例實施例〉將參照圖9至圖20描述本發(fā)明的第二示例實施例。圖9是示出整個系統(tǒng)的配置的框圖。圖9是示意地示出存儲系統(tǒng)的框圖,并且圖1是示出配置的功能框圖。圖12至圖20是用于說明存儲系統(tǒng)的操作的說明視圖。這一示例實施例在這里示出了通過連接多個服務器計算機來配置存儲系統(tǒng)這樣的情況。然而本發(fā)明的存儲系統(tǒng)不限于具有多個計算機的配置,并且可以由一個計算機配置。如圖9中所示,本發(fā)明的存儲系統(tǒng)10經(jīng)由網(wǎng)絡N連接到控制備份過程的備份系統(tǒng)
11。備份系統(tǒng)11獲取在經(jīng)由網(wǎng)絡N連接的備份目標設備12中存儲的備份目標數(shù)據(jù)(存儲目標數(shù)據(jù)),并且請求存儲系統(tǒng)10進行存儲。因此,存儲系統(tǒng)10存儲被請求存儲為備份的備份目標數(shù)據(jù)。如圖10中所示,這一示例實施例的存儲系統(tǒng)10運用連接多個服務器計算機這樣的配置。具體而言,存儲系統(tǒng)10被配備有加速器節(jié)點10A,其充當控制存儲系統(tǒng)10的存儲/再現(xiàn)操作的服務器計算機;以及存儲節(jié)點10B,充當配備有用于存儲數(shù)據(jù)的存儲設備的服務器計算機。加速器節(jié)點IOA的數(shù)目和存儲節(jié)點IOB的數(shù)目不限于圖10中所示的數(shù)目,并且可以利用連接更多節(jié)點IOA和更多節(jié)點IOB的配置。另外,這一示例實施例的存儲系統(tǒng)10是內(nèi)容地址存儲系統(tǒng),該內(nèi)容地址存儲系統(tǒng)劃分數(shù)據(jù),并且使數(shù)據(jù)冗余、分布數(shù)據(jù)且存儲到多個存儲設備中,以及通過根據(jù)待存儲的數(shù)據(jù)的內(nèi)容而設置的唯一內(nèi)容地址來指定存儲數(shù)據(jù)的存儲位置。下文將描述這一內(nèi)容地址存儲系統(tǒng)。假設存儲系統(tǒng)10是一個系統(tǒng),下文將描述存儲系統(tǒng)10的配置和功能。換而言之,可以在加速器節(jié)點IOA或者存儲節(jié)點IOB中包括下文描述的存儲系統(tǒng)10的配置和功能。存儲系統(tǒng)10不限于包括加速器節(jié)點IOA和存儲節(jié)點IOB的配置。存儲系統(tǒng)10可以具有任何配置,并且例如可以由一個計算機配置。另外,存儲系統(tǒng)10不限于內(nèi)容地址存儲系統(tǒng)。圖11示出存儲系統(tǒng)10的配置。如該圖中所示,存儲系統(tǒng)10配備有存儲數(shù)據(jù)的存儲設備31以及控制向存儲設備31中存儲數(shù)據(jù)和從存儲設備31取回數(shù)據(jù)這樣的操作的數(shù)據(jù)存儲控制單元21,以及數(shù)據(jù)釋放控制單元22,該數(shù)據(jù)釋放控制單元釋放包含存儲設備
31中存儲但尚未使用的數(shù)據(jù)的存儲空間,以便允許回收存儲空間。實際上,數(shù)據(jù)存儲控制單元21和數(shù)據(jù)釋放控制單元22由在多個算術(shù)設備(比如圖10中所示加速器節(jié)點IOA的CPU(中央處理單元)和存儲節(jié)點IOB的CPU)中安裝的程序來配置。另外,存儲設備31由圖10中所示加速器節(jié)點IOA的硬盤和存儲節(jié)點IOB的硬盤來配置。例如在存儲于存儲介質(zhì)(比如CD-ROM)中的狀態(tài)中,向存儲系統(tǒng)10提供上文提到的程序。備選地,可以在網(wǎng)絡上的另一服務器計算機的存儲設備中存儲并且經(jīng)由網(wǎng)絡從另一服務器計算機向存儲系統(tǒng)10提供程序。下文將描述數(shù)據(jù)存儲控制設備和數(shù)據(jù)釋放控制單元22的配置。首先,將參照圖12至14描述數(shù)據(jù)存儲控制單元21存儲和取回數(shù)據(jù)的內(nèi)容可尋址方法。首先,如圖13中的箭頭Yl所示,當數(shù)據(jù)存儲控制單元21接收備份目標數(shù)據(jù)A的輸入時,數(shù)據(jù)存儲控制單元21如圖12和13中的箭頭Y2所示,將備份目標數(shù)據(jù)A劃分成可變?nèi)萘?例如平均64KB)或者預定容量(例如64KB)的塊數(shù)據(jù)D。然后,數(shù)據(jù)存儲控制單元21基于這一塊數(shù)據(jù)D的數(shù)據(jù)內(nèi)容,計算代表數(shù)據(jù)內(nèi)容的唯一哈希值H(內(nèi)容標識信息)(箭頭Y3)。例如,通過使用預設哈希函數(shù),根據(jù)塊數(shù)據(jù)D的數(shù)據(jù)內(nèi)容來計算哈希值H。在加速器節(jié)點IOA中執(zhí)行數(shù)據(jù)存儲控制單元21的此過程。然后通過使用備份目標數(shù)據(jù)A的塊數(shù)據(jù)D的哈希值H,數(shù)據(jù)存儲控制單元21檢查在存儲設備31中是否已經(jīng)存儲塊數(shù)據(jù)D。具體而言,哈希值H與代表已存儲塊數(shù)據(jù)D的存儲位置的內(nèi)容地址CA相關(guān)并且注冊于MFI (主要片段索引)文件中。因此,當在存儲之前計算的塊數(shù)據(jù)D的哈希值H存在于MFI文件中的情況下,數(shù)據(jù)存儲控制單元21可以確定已經(jīng)存儲具有相同內(nèi)容的塊數(shù)據(jù)D(圖13中的箭頭Y4)。在這一情況下,數(shù)據(jù)存儲控制單元21從MFI文件取回與MFI內(nèi)的如下哈希值H有關(guān)的內(nèi)容地址CA,該哈希值與在存儲之前塊數(shù)據(jù)D的哈希值H—致。然后,數(shù)據(jù)存儲控制單元21將這一內(nèi)容地址CA(地址數(shù)據(jù))存儲為需要存儲的塊數(shù)據(jù)D的內(nèi)容地址CA。備選地,數(shù)據(jù)存儲控制單元21可以在樹結(jié)構(gòu)中存儲另一條地址數(shù)據(jù),該另一條地址數(shù)據(jù)進一步引用內(nèi)容地址CA,該內(nèi)容地址引用已經(jīng)存儲的塊數(shù)據(jù)D。因而,通過使用這一內(nèi)容地址CA來引用的已經(jīng)存儲的數(shù)據(jù)被用作需要存儲的塊數(shù)據(jù)D,并且變得不必存儲需要存儲的塊數(shù)據(jù)D。另外,數(shù)據(jù)存儲控制單元21壓縮如上文描述的那樣確定為尚未存儲的塊數(shù)據(jù)D,并且如圖13中的箭頭Y5所示,將數(shù)據(jù)劃分成具有預定容量的多個片段數(shù)據(jù)。例如,如圖12中的標號Dl至D9所示,數(shù)據(jù)存儲控制單元21將數(shù)據(jù)劃分成九條片段數(shù)據(jù)(劃分數(shù)據(jù)41)。另外,數(shù)據(jù)存儲控制單元21生成冗余數(shù)據(jù)從而使得即使通過劃分而獲得的片段數(shù)據(jù)中的一些片段數(shù)據(jù)丟失仍然可以恢復原有塊數(shù)據(jù),并且向通過劃分而獲得的片段數(shù)據(jù)41添加冗余數(shù)據(jù)。例如,如圖12中的標號DlO至D12所示,數(shù)據(jù)存儲控制單元21添加三個片段數(shù)據(jù)(冗余數(shù)據(jù)42)。因此,數(shù)據(jù)存儲控制單元21生成數(shù)據(jù)集40,該數(shù)據(jù)集包括由九個劃分數(shù)據(jù)41和三個冗余數(shù)據(jù)組成的十二個片段數(shù)據(jù)。數(shù)據(jù)存儲控制單元21的過程由一個存儲節(jié)點IOB執(zhí)行。然后數(shù)據(jù)存儲控制單元21分布并且向存儲設備31中形成的存儲區(qū)域中逐個存儲組成生成的數(shù)據(jù)集的片段數(shù)據(jù)。例如,如圖12中所示,在生成十二個片段數(shù)據(jù)Dl至D12的情況下,數(shù)據(jù)存儲控制單元21向十二個存儲設備31中形成的數(shù)據(jù)存儲文件Fl至F12(數(shù)據(jù)存儲區(qū)域)之一中存儲片段數(shù)據(jù)Dl至D12之一(參見圖13中的箭頭Y6)。另外,數(shù)據(jù)存儲控制單元21生成和管理內(nèi)容地址CA,該內(nèi)容地址代表如上文描述的在存儲設備31中存儲的片段數(shù)據(jù)Dl至D12的存儲位置,也就是待由片段數(shù)據(jù)Dl至D12恢復的塊數(shù)據(jù)D的存儲位置。具體而言,數(shù)據(jù)存儲控制單元21通過組合基于存儲的塊數(shù)據(jù)D的內(nèi)容而計算的哈希值H的部分(短哈希)(例如哈希值H中的開始8個字節(jié))與代表邏輯存儲位置的信息,來生成內(nèi)容地址CA。然后,數(shù)據(jù)存儲控制單元21向存儲系統(tǒng)10內(nèi)的文件系統(tǒng),即向加速器節(jié)點IOA返回這一內(nèi)容地址CA(圖13中的箭頭Y7)。加速器節(jié)點IOA然后將比如備份目標數(shù)據(jù)文件名的標識信息與內(nèi)容地址CA相關(guān),并且在文件系統(tǒng)中對他們進行管理。另外,數(shù)據(jù)存儲控制單元21將塊數(shù)據(jù)D的內(nèi)容地址CA與塊數(shù)據(jù)D的哈希值H相關(guān),并且相應存儲節(jié)點IOB在MFI文件中對他們進行管理。因此,內(nèi)容地址CA與指定文件的信息、哈希值H等相關(guān),并且存儲到加速器節(jié)點IOA和存儲節(jié)點IOB的存儲設備31中。另外,數(shù)據(jù)存儲控制單元21執(zhí)行對取回如上文描述的那樣存儲的備份目標數(shù)據(jù)的控制。例如,當存儲系統(tǒng)10接受到具有基于文件系統(tǒng)而指明的具體文件的取回請求(參見圖14中的箭頭Yll)時,數(shù)據(jù)存儲控制單元21首先指明內(nèi)容地址CA,該內(nèi)容地址由短哈希和邏輯位置的信息組成,該短哈希是與涉及取回請求的文件對應的哈希值的部分(參見圖14中的箭頭Y12)。然后數(shù)據(jù)存儲控制單元21檢查內(nèi)容地址CA是否被注冊于MFI文件中(參見圖14中的箭頭13)。如果未注冊內(nèi)容地址CA,則不存儲請求的數(shù)據(jù),從而數(shù)據(jù)存儲控制單元21返回錯誤應答。另一方面,如果涉及取回請求的內(nèi)容地址CA被注冊,則數(shù)據(jù)存儲控制單元21指定由內(nèi)容地址CA指明的存儲位置,并且取回在指定的存儲位置中存儲的每個片段數(shù)據(jù)作為被請求取回的數(shù)據(jù)(參見圖14中的箭頭Y14)。這時,如果知道存儲相應片段的數(shù)據(jù)存儲文件Fl至F12和片段數(shù)據(jù)之一在數(shù)據(jù)存儲文件中的存儲位置,則數(shù)據(jù)存儲控制單元21可以指定其它片段數(shù)據(jù)的存儲位置,因為存儲位置是相同的。然后數(shù)據(jù)存儲控制單元21從響應于取回請求而取回的相應片段數(shù)據(jù)中恢復塊數(shù)據(jù)D(參見圖14中的箭頭Y15)。另外,數(shù)據(jù)存儲控制單元21連接多個恢復的塊數(shù)據(jù)D,以恢復成像是文件A的數(shù)據(jù)組,并且向正在控制取回的加速器節(jié)點IOA返回(參見圖14中的箭頭Y16)。數(shù)據(jù)存儲控制單元21如上文描述的那樣在存儲設備31中關(guān)于以時間序列方式劃分的每個時區(qū)存儲該存儲目標數(shù)據(jù)。具體而言,如圖15或者16中所示,每當預定時段已經(jīng)流逝時,數(shù)據(jù)存儲控制單元21設置指示時區(qū)的“時期”以執(zhí)行新存儲目標數(shù)據(jù)的寫入過程。這時,為了區(qū)分存儲設備31中寫入的數(shù)據(jù)的時期,將塊數(shù)據(jù)與識別時期的信息一起存儲。備選地,也有可能通過在寫入塊數(shù)據(jù)時與塊數(shù)據(jù)關(guān)聯(lián)地分開存儲時期的標識信息來管理時期。將參照圖16描述時期的轉(zhuǎn)變。如果假設當前寫入目標時期為“新塊時期”,則先前時期是“待完成塊時期”,并且在它之前的時期是“已完成塊時期”。繼而如圖15中所示,標號#1所示的當前“新塊時期”在下一時區(qū)#2中變成的“待完成塊時期”,并且當前時區(qū)#1中的“待完成塊時期”在下一時區(qū)#2中變成“已完成塊時期”。以這一方式,隨著時間進展,時期依次改變。如果在當前“新塊時期”中存在將寫入的存儲目標數(shù)據(jù),則要求數(shù)據(jù)存儲控制單元21在“新塊時期”內(nèi)、也就是在時期向下一時期進展之前,完成向存儲設備31中寫入存儲目標數(shù)據(jù)。例如,如圖16中所示,數(shù)據(jù)存儲控制單元21在“已完成塊時期”中存儲和保留由“塊1”、“塊2”和“塊3”組成的存儲目標數(shù)據(jù),這些塊從“塊6”到“塊4”和“塊5”而被依次指向。塊“留存I”指向這些多條新保留的塊數(shù)據(jù),該塊“留存I”指示它們是留存的塊。應當注意例如“塊4”、“塊5”和“塊6”是地址數(shù)據(jù),并且圖16中的斜線所示“塊1”、“塊2”和“塊3”是實際數(shù)據(jù)。然后,在作為下一時期的“待完成塊時期”中,如果將構(gòu)成“塊6”的塊數(shù)據(jù)“塊3”改變成“塊3x”,則在“待完成塊時期”中存儲新塊數(shù)據(jù)“塊3x” (圖16中的對角線所示)以及指向它的“塊5x”和“塊6x,,。這意味著在“待完成塊時期”中存儲由“塊1”、“塊2”和“塊3x ”組成的塊數(shù)據(jù),這些塊從“塊6x ”(而不是“塊6 ”)到“塊4 ”和“塊5 ”而被依次指向。然而,關(guān)于“塊I”和“塊2”,指向已經(jīng)在存儲設備31中存儲的塊數(shù)據(jù)。這時,由于新存儲將被“塊6x”指向的塊數(shù)據(jù),所以塊“留存2”指向“塊6x”,該塊“留存2”指示塊6x被保留。另外,在刪除改變成“塊6x”的“塊6”時,塊“刪除I ”指向它,該塊“刪除I ”指示塊6被刪除。另外,當時期向作為下一時期的“新塊時期”進展時,以與上文描述的方式相似的方式并且如果構(gòu)成“塊6x”的塊數(shù)據(jù)“塊2”改變成“塊2y”,則在“新塊時期”中存儲新塊數(shù)據(jù)“塊2y”(圖16中的對角線所示)以及指向它的塊“塊4y”和“塊6y”。這意味著在“新塊時期”中,存儲由“塊1”、“塊2y”和“塊3x”組成的塊數(shù)據(jù),這些塊從“塊6y” (而不是“塊6x”)到“塊4y”和“塊5x”而被依次指向。然而關(guān)于“塊1”,指向已經(jīng)在存儲設備31中存儲的塊數(shù)據(jù)。這時,由于新保留“塊6y”將指向的塊數(shù)據(jù),所以塊“留存2”指向“塊6y”,該塊“留存2”指示塊6y被保留。另外,在刪除改變成“塊6y”的“塊6x,,時,塊“刪除2”指向它,該塊“刪除2”指示塊6x被刪除。接著,將描述數(shù)據(jù)釋放控制單元22。如圖11中所示,數(shù)據(jù)釋放控制單元22包括分別執(zhí)行以下過程的指針計數(shù)單元23和數(shù)據(jù)釋放單元24。每當“時期”改變時,也就是說,每當時期進展到當前“新塊時期”時,指針計數(shù)單元23在以往時期中,在存儲設備31中寫入的多條數(shù)據(jù)之中,刪除未從其它地址數(shù)據(jù)被指向的多條存儲目標數(shù)據(jù)或者地址數(shù)據(jù),并且執(zhí)行用于釋放其中這樣的一條數(shù)據(jù)存儲于存儲設備中的存儲區(qū)域的“刪除過程”。具體而言,關(guān)于在“待完成塊時期”(其是當前“新塊時期”的先前時期)期間寫入的數(shù)據(jù)(下文稱為塊數(shù)據(jù)),指針計數(shù)單元23對“指針數(shù)目”進行計數(shù),該“指針數(shù)據(jù)”指示來自其它地址數(shù)據(jù)的指針的數(shù)目。執(zhí)行對指針數(shù)目的計數(shù),從而使得對于位于被“留存”塊指向的根上的塊數(shù)據(jù),計數(shù)是“+1”,并且對于位于被“刪除”塊指向的根上的塊數(shù)據(jù),計數(shù)是“-1”。例如在圖17的情況下,對在“待完成塊時期”(其是在當前“新塊時期”之前的最后時期)內(nèi)的每個塊數(shù)據(jù)的指針數(shù)目進行計數(shù)。然而,由于僅僅已經(jīng)固定“待完成塊時期”內(nèi)的“留存I ”的寫入,所以被“留存I ”指向的相應塊數(shù)據(jù)“塊I ”至“塊6”的指針數(shù)目變成“+I”。然后,當時間已經(jīng)流逝并且時期如圖18的情況下向下一時期進展時,遞增或者遞減在“待完成塊時期”(該待完成塊時期是在“新塊時期”之前的最后時期)中固定的從“留存I”和“刪除I”被指向的每個塊數(shù)據(jù)的指針數(shù)目。這樣,虛線包圍的“塊3”、“塊5”和“塊6”的指針數(shù)目變成“O”。由此,由于尚未被任何地址數(shù)據(jù)所指向的塊數(shù)據(jù)的指針數(shù)目變成“ O ”,所以易于檢測這樣的塊數(shù)據(jù)。然后,在“新塊時期”中執(zhí)行的“刪除”過程結(jié)束時,或者在給定的時間間隔,數(shù)據(jù)釋放單元24從存儲設備31刪除指針數(shù)目為“O”的塊數(shù)據(jù)。這時,數(shù)據(jù)釋放單元24釋放存儲設備31中的其中存儲已刪除塊數(shù)據(jù)的存儲區(qū)域。這意味著數(shù)據(jù)釋放單元24不僅防止讀取未被任何地址數(shù)據(jù)所指向的塊數(shù)據(jù),而且釋放了其中已經(jīng)存儲這樣的塊數(shù)據(jù)的存儲區(qū)域以實現(xiàn)存儲區(qū)域的回收。可以在任何時間執(zhí)行數(shù)據(jù)釋放單元24的釋放存儲區(qū)域的過程。指針計數(shù)單元23如圖19中所示在包括“同步階段”、“刪除標記階段”和“交付階段”的三個階段中執(zhí)行刪除過程。在“同步階段”中,完成向存儲設備31中寫入存儲系統(tǒng)10中寫入的數(shù)據(jù)。這意味著在最后時期中寫入的多條數(shù)據(jù)之中,如果有處于寫入之中的任何數(shù)據(jù),則指針計數(shù)單元23向存儲設備31中寫入這樣的數(shù)據(jù),以完成如圖18中所示的樹結(jié)構(gòu)。然后,在“刪除標記階段”中,指針計數(shù)單元23執(zhí)行對已經(jīng)寫入存儲設備31中的塊數(shù)據(jù)的“指針數(shù)目”進行計數(shù)的過程。由此,由于可以在固定塊數(shù)據(jù)的樹結(jié)構(gòu)(即,指向關(guān)系)之后,對“指針數(shù)目”進行計數(shù)時,所以可以更可靠地實現(xiàn)釋放未被指向的數(shù)據(jù)。然而,在“刪除標記階段”中對“指針數(shù)目”進行計數(shù)期間,存在其中寫入如下新數(shù)據(jù)的情況,該新數(shù)據(jù)指向計數(shù)目標塊數(shù)據(jù)并且將被去重。在該情況下,不能固定被計數(shù)的塊數(shù)據(jù)的“指針數(shù)目”,從而新寫入的數(shù)據(jù)可以指向可以以后刪除的、具有的“指針數(shù)目”為O的塊數(shù)據(jù)。例如,如圖20中所示,如果在“新塊時期”中對“塊3”的“指針數(shù)目”正在計數(shù)時的時間期間生成了指向“塊3”的新寫入,則雖“塊3”被然指向,但是它可能隨后被刪除。為了防止這樣的情形,如果當在“刪除標記階段”中正在對塊數(shù)據(jù)的“指針數(shù)目”計數(shù)時生成新寫入并且該新寫入指向以往時期中存儲的塊數(shù)據(jù),則指針技術(shù)單元23向這樣的塊數(shù)據(jù)設置稱為“不刪除標記”的標志。稱為“不刪除標記”的標志是用于從數(shù)據(jù)釋放單元24的釋放目標中排除具有此標志的塊數(shù)據(jù)的記號。這樣,在圖20中所示例子中,盡管“新塊時期”的時間將塊數(shù)據(jù)“塊3 ”的“指針數(shù)目”設置成“ O ”,但是由于設置了 “不刪除標記”,所以既不刪除也不釋放它。然后在下一時期中,由于對“塊3”的指針數(shù)目進行重新計數(shù)并且將它設置成“ I ”時,所以不會刪除“塊3”。另外,在“交付階段”中,在系統(tǒng)中反映在“刪除標記階段”中進行計數(shù)的塊數(shù)據(jù)的“指針數(shù)目”。在系統(tǒng)中反映的“指針數(shù)目”以后由數(shù)據(jù)釋放單元24認出,并由此將刪除具有的“指針數(shù)目”為“O”的塊數(shù)據(jù),并且將釋放存儲區(qū)域。然而,當在“交付階段”中在系統(tǒng)中反映“指針數(shù)目”時的時間期間,可能寫入指向計數(shù)的塊數(shù)據(jù)并且經(jīng)歷去重的新數(shù)據(jù)。這樣,新寫入數(shù)據(jù)可能指向以后將刪除的、其中“指針數(shù)目”被計數(shù)成“O”的塊數(shù)據(jù)。例如,如圖20中所示,如果在已經(jīng)在“新塊時期”中對“塊3 ”的“指針數(shù)目”計數(shù)之后生成指向“塊3 ”的新寫入,則雖然“塊3 ”被指向,但是它能夠隨后被刪除。為了防止這樣的情形,如果在“交付階段”中反應塊數(shù)據(jù)的“指針數(shù)目”時的時間期間生成了新寫入,則指針計數(shù)單元23僅允許指向“指針數(shù)目”為正值(也就是說,“指針數(shù)目”>0)的塊數(shù)據(jù)或者其中設置有上文描述的“不刪除標記”的塊數(shù)據(jù)。由此,有可能防止新寫入指向以后被刪除可能性高的塊數(shù)據(jù)并且執(zhí)行去重這樣的情況。上文公開的示例實施例的全部或者部分可以描述為以下補充注釋。下文將描述本發(fā)明的存儲系統(tǒng)(參見圖21)、存儲程序的計算機可讀介質(zhì)和信息處理方法的配置的概況。然而本發(fā)明不限于下文描述的配置。<補充注釋1>一種存儲系統(tǒng),包括數(shù)據(jù)存儲控制單元101,其將存儲目標數(shù)據(jù)和地址數(shù)據(jù)存儲于存儲設備110中,所述地址數(shù)據(jù)是基于在被指向的對象中存儲的數(shù)據(jù)內(nèi)容和存儲位置的數(shù)據(jù)并且指向所述存儲目標數(shù)據(jù)或者其它地址數(shù)據(jù),以及當嘗試在所述存儲設備110中存儲具有的數(shù)據(jù)內(nèi)容與已經(jīng)在存儲設備110中存儲的一條所述存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的另一條存儲目標數(shù)據(jù)時,將指向已經(jīng)在所述存儲設備110中存儲的所述一條所述存儲目標數(shù)據(jù)的所述地址數(shù)據(jù)作為所述另一條存儲目標數(shù)據(jù)而存儲在所述存儲設備110中;以及數(shù)據(jù)釋放控制單元102,釋放所述存儲設備110中的存儲區(qū)域,所述存儲區(qū)域存儲所述存儲設備110中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向,其中所述數(shù)據(jù)存儲控制單元101將所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)關(guān)于以時間序列方式劃分的每個時區(qū)存儲在所述存儲設備中,以及所述數(shù)據(jù)釋放控制單元102釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域在當前時區(qū)之前的以往時區(qū)中在所述存儲設備110中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向。<補充注釋2>根據(jù)補充注釋I所述的存儲系統(tǒng),其中所述數(shù)據(jù)釋放控制單元對所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的來自其它地址數(shù)據(jù)的指針數(shù)目進行計數(shù),并且釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),在此條數(shù)據(jù)中所述指針數(shù)目為“ O ”。<補充注釋3>根據(jù)補充注釋2所述的存儲系統(tǒng),其中所述數(shù)據(jù)釋放控制單元對在所述當前時區(qū)之前的上個時區(qū)或者更早時區(qū)中寫入的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的指針數(shù)目進行計數(shù)?!囱a充注釋4>根據(jù)補充注釋3所述的存儲系統(tǒng),其中所述數(shù)據(jù)釋放控制單元在所述數(shù)據(jù)存儲控制單元完成在所述存儲設備中存儲在所述上個時區(qū)中寫入的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)之后,對所述指針數(shù)目進行計數(shù)。<補充注釋5>根據(jù)補充注釋2所述的存儲系統(tǒng),其中在其中當所述數(shù)據(jù)釋放控制單元對在以往時區(qū)中在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的所述指針數(shù)目進行計數(shù)時生成指向所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的新寫入的情況下,所述數(shù)據(jù)存儲控制單元進行設置以從將由所述數(shù)據(jù)釋放控制單元執(zhí)行的釋放目標中排除在所述以往時區(qū)中在所述存儲設備中存儲的、作為被指向的對象的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)。<補充注釋6>根據(jù)補充注釋5所述的存儲系統(tǒng),其中在其中在所述數(shù)據(jù)釋放控制單元完成對在以往時區(qū)中在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的指針數(shù)目的計數(shù)之后生成指向所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的新寫入的情況下,如果在所述以往時區(qū)中在所述存儲設備中存儲的被指向的對象的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的指針數(shù)目具有正值,或者如果從將由所述數(shù)據(jù)釋放控制單元執(zhí)行的所述釋放目標中排除所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù),則所述數(shù)據(jù)存儲控制單元允許指向與所述新寫入對應的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)。<補充注釋7>一種存儲程序的計算機可讀介質(zhì),所述程序包括用于使信息處理器設備實現(xiàn)以下單元的指令數(shù)據(jù)存儲控制單元,其將存儲目標數(shù)據(jù)和地址數(shù)據(jù)存儲于存儲設備中,所述地址數(shù)據(jù)是基于在被指向的對象中存儲的數(shù)據(jù)內(nèi)容和存儲位置的數(shù)據(jù)并且指向所述存儲目標數(shù)據(jù)或者其它地址數(shù)據(jù),以及當嘗試在所述存儲設備中存儲具有的數(shù)據(jù)內(nèi)容與已經(jīng)在所述存儲設備中存儲的一條所述存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的另一條存儲目標數(shù)據(jù)時,將指向已經(jīng)在所述存儲設備中存儲的所述一條所述存儲目標數(shù)據(jù)的所述地址數(shù)據(jù)作為所述另一條存儲目標數(shù)據(jù)而存儲在所述存儲設備中;以及數(shù)據(jù)釋放控制單元,其釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向,其中所述數(shù)據(jù)存儲控制單元將所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)關(guān)于以時間序列方式劃分的每個時區(qū)而存儲在所述存儲設備中,以及所述數(shù)據(jù)釋放控制單元釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在當前時區(qū)之前的以往時區(qū)中在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向。<補充注釋8>根據(jù)補充注釋7所述的存儲所述程序的計算機可讀介質(zhì),其中所述數(shù)據(jù)釋放控制單元對所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的來自其它地址數(shù)據(jù)的指針數(shù)目進行計數(shù),并且釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),在此條數(shù)據(jù)中指針數(shù)目為“ O ”。<補充注釋9>一種信息處理方法,包括將存儲目標數(shù)據(jù)和地址數(shù)據(jù)存儲于存儲設備中,所述地址數(shù)據(jù)是基于在被指向的對象中存儲的數(shù)據(jù)內(nèi)容和存儲位置的數(shù)據(jù)并且指向所述存儲目標數(shù)據(jù)或者其它地址數(shù)據(jù),以及當嘗試在所述存儲設備中存儲具有的數(shù)據(jù)內(nèi)容與已經(jīng)在所述存儲設備中存儲的一條所述存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的另一條存儲目標數(shù)據(jù)時,將指向已經(jīng)在所述存儲設備中存儲的所述一條所述存儲目標數(shù)據(jù)的所述地址數(shù)據(jù)作為所述另一條存儲目標數(shù)據(jù)而存儲在所述存儲設備中;釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向;關(guān)于以時間序列方式劃分的每個時區(qū)執(zhí)行在所述存儲設備中對所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的存儲;以及釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在當前時區(qū)之前的以往時區(qū)中在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向。<補充注釋10>根據(jù)補充注釋9所述的信息處理方法,還包括對所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的來自其它地址數(shù)據(jù)的指針數(shù)目進行計數(shù),并且釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),在此條數(shù)據(jù)中指針數(shù)目為“ O ”。
權(quán)利要求
1.一種存儲系統(tǒng),包括: 數(shù)據(jù)存儲控制單元,其將存儲目標數(shù)據(jù)和地址數(shù)據(jù)存儲于存儲設備中,所述地址數(shù)據(jù)是基于在被指向的對象中存儲的數(shù)據(jù)內(nèi)容和存儲位置的數(shù)據(jù)并且指向所述存儲目標數(shù)據(jù)或者其它地址數(shù)據(jù),以及當嘗試在所述存儲設備中存儲具有的數(shù)據(jù)內(nèi)容與已經(jīng)被存儲在所述存儲設備中的一條所述存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的另一條存儲目標數(shù)據(jù)時,將指向已經(jīng)被存儲在所述存儲設備中的所述一條所述存儲目標數(shù)據(jù)的所述地址數(shù)據(jù)作為所述另一條存儲目標數(shù)據(jù)而存儲在所述存儲設備中;以及 數(shù)據(jù)釋放控制單元,其釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向,其中 所述數(shù)據(jù)存儲控制單元將所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)關(guān)于以時間序列方式劃分的每個時區(qū)而存儲在所述存儲設備中,以及 所述數(shù)據(jù)釋放控制單元釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在當前時區(qū)之前的以往時區(qū)中在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù) 據(jù)所指向。
2.根據(jù)權(quán)利要求1所述的存儲系統(tǒng),其中 所述數(shù)據(jù)釋放控制單元對所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的來自其它地址數(shù)據(jù)的指針數(shù)目進行計數(shù),并且釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),在此條數(shù)據(jù)中所述指針數(shù)目為“ O ”。
3.根據(jù)權(quán)利要求2所述的存儲系統(tǒng),其中 所述數(shù)據(jù)釋放控制單元對在所述當前時區(qū)之前的上個時區(qū)或者更早時區(qū)中寫入的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的指針數(shù)目進行計數(shù)。
4.根據(jù)權(quán)利要求3所述的存儲系統(tǒng),其中 所述數(shù)據(jù)釋放控制單元在所述數(shù)據(jù)存儲控制單元完成在所述存儲設備中存儲在所述上個時區(qū)中寫入的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)之后,對所述指針數(shù)目進行計數(shù)。
5.根據(jù)權(quán)利要求2所述的存儲系統(tǒng),其中 在其中當所述數(shù)據(jù)釋放控制單元對在以往時區(qū)中在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的所述指針數(shù)目進行計數(shù)時,生成指向所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的新寫入的情況下,所述數(shù)據(jù)存儲控制單元進行設置,以從將由所述數(shù)據(jù)釋放控制單元執(zhí)行的釋放目標中排除在所述以往時區(qū)中在所述存儲設備中存儲的、作為被指向?qū)ο蟮乃龃鎯δ繕藬?shù)據(jù)或者所述地址數(shù)據(jù)。
6.根據(jù)權(quán)利要求5所述的存儲系統(tǒng),其中 在其中在所述數(shù)據(jù)釋放控制單兀完成對在以往時區(qū)中在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的所述指針數(shù)目的計數(shù)之后,生成指向所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的新寫入的情況下,如果在所述以往時區(qū)中在所述存儲設備中存儲的、作為被指向?qū)ο蟮乃龃鎯δ繕藬?shù)據(jù)或者所述地址數(shù)據(jù)的所述指針數(shù)目具有正值,或者如果從將由所述數(shù)據(jù)釋放控制單元執(zhí)行的所述釋放目標中排除了所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù),則所述數(shù)據(jù)存儲控制單元允許指向與所述新寫入對應的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)。
7.一種存儲程序的計算機可讀介質(zhì),所述程序包括用于使信息處理器設備實現(xiàn)以下單元的指令: 數(shù)據(jù)存儲控制單元,其將存儲目標數(shù)據(jù)和地址數(shù)據(jù)存儲于存儲設備中,所述地址數(shù)據(jù)是基于在被指向的對象中存儲的數(shù)據(jù)內(nèi)容和存儲位置的數(shù)據(jù)并且指向所述存儲目標數(shù)據(jù)或者其它地址數(shù)據(jù),以及當嘗試在所述存儲設備中存儲具有的數(shù)據(jù)內(nèi)容與已經(jīng)被存儲在所述存儲設備中的一條所述存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的另一條存儲目標數(shù)據(jù)時,將指向已經(jīng)被存儲在所述存儲設備中的所述一條所述存儲目標數(shù)據(jù)的所述地址數(shù)據(jù)作為所述另一條存儲目標數(shù)據(jù)而存儲在所述存儲設備中;以及 數(shù)據(jù)釋放控制單元,其釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向,其中 所述數(shù)據(jù)存儲控制單元將所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)關(guān)于以時間序列方式劃分的每個時區(qū)而存儲在所述存儲設備中,以及 所述數(shù)據(jù)釋放控制單元釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在當前時區(qū)之前的以往時區(qū)中在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向。
8.根據(jù)權(quán)利要求7所述的存儲所述程序的計算機可讀介質(zhì),其中 所述數(shù)據(jù)釋放控制單元對所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的來自其它地址數(shù)據(jù)的指針數(shù)目進行計數(shù),并且釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),在此條數(shù)據(jù)中所述指針數(shù)目為“ O ”。
9.一種信息處理方法,包括: 將存儲目標數(shù)據(jù)和地址數(shù) 據(jù)存儲于存儲設備中,所述地址數(shù)據(jù)是基于在被指向的對象中存儲的數(shù)據(jù)內(nèi)容和存儲位置的數(shù)據(jù)并且指向所述存儲目標數(shù)據(jù)或者其它地址數(shù)據(jù),以及當嘗試在所述存儲設備中存儲具有的數(shù)據(jù)內(nèi)容與已經(jīng)被存儲在所述存儲設備中的一條所述存儲目標數(shù)據(jù)的數(shù)據(jù)內(nèi)容相同的另一條存儲目標數(shù)據(jù)時,將指向已經(jīng)被存儲在所述存儲設備中的所述一條所述存儲目標數(shù)據(jù)的所述地址數(shù)據(jù)作為所述另一條存儲目標數(shù)據(jù)存儲在所述存儲設備中; 釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向; 關(guān)于以時間序列方式劃分的每個時區(qū)執(zhí)行在所述存儲設備中對所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的存儲;以及 釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲在當前時區(qū)之前的以往時區(qū)中在所述存儲設備中存儲的所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向。
10.根據(jù)權(quán)利要求9所述的信息處理方法,還包括: 對所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的來自其它地址數(shù)據(jù)的指針數(shù)目進行計數(shù),并且釋放所述存儲設備中的存儲區(qū)域,所述存儲區(qū)域存儲所述存儲目標數(shù)據(jù)或者所述地址數(shù)據(jù)的一條數(shù)據(jù),在此條數(shù)據(jù)中所述指針數(shù)目為“ O ”。
全文摘要
在內(nèi)容地址存儲系統(tǒng)中,將存儲目標數(shù)據(jù)或者地址數(shù)據(jù)關(guān)于以時間序列方式劃分的每個時區(qū)而存儲于存儲設備中,并且釋放該存儲設備中的存儲區(qū)域,該存儲區(qū)域存儲在當前時區(qū)之前的以往時區(qū)中在存儲設備中存儲的存儲目標數(shù)據(jù)或者地址數(shù)據(jù)的一條數(shù)據(jù),此條數(shù)據(jù)未被其它地址數(shù)據(jù)所指向。
文檔編號G06F12/00GK103080908SQ20118004177
公開日2013年5月1日 申請日期2011年8月25日 優(yōu)先權(quán)日2010年8月31日
發(fā)明者P·斯特里齊爾克扎克, E·亞當齊克, U·赫爾曼-艾齊克卡, J·薩科維克茲, L·斯魯薩里齊克, J·羅恩, C·達布尼克基 申請人:日本電氣株式會社