專利名稱::用于復制內(nèi)容可尋址存儲集群的異步分布式對象上載的制作方法用于復制內(nèi)容可尋址存儲集群的異步分布式對象上載
背景技術:
:企業(yè)計算情形已經(jīng)在下述方面經(jīng)歷了在存儲架構上的根本轉移中央服務架構已經(jīng)讓位于分布式存儲集群。當企業(yè)尋求提高存儲效率的方式時,與單塊盤陣列相比較,從商品計算機建立的存儲集群可以以成本的一部分向新的數(shù)據(jù)密集應用提供高性能、可用性和可擴展性。為了開啟存儲集群的全部潛力,跨越多個地理位置復制數(shù)據(jù),由此提高可用性并且減小相對于客戶端的網(wǎng)絡距離。在這樣的系統(tǒng)中,在不同的集群中(使用多主機模型)動態(tài)地建立、克隆和刪除分布式對象和引用,并且基礎數(shù)據(jù)復制層維護寫入順序保真度,以保證所有的集群以相同的數(shù)據(jù)視圖結束。一些當前的可視化、多媒體和其他數(shù)據(jù)密集應用使用非常大的對象——通常幾百吉字節(jié)或甚至太字節(jié)。通常通過下述方式來在流模式中進行這樣的對象向分布式存儲系統(tǒng)內(nèi)的上載將對象劃分為組塊,并且單獨地上載每一個組塊。該處理能夠在上載時間中造出長的延遲,該上載時間可能被潛在的客戶端和/或服務器故障加劇。結果,在提供一致性保證的流模式中的有效分布式對象上載正在變得對于存儲業(yè)越來越重要,存儲業(yè)正在被允許客戶端連接到在某時可獲得的任何集群的大型系統(tǒng)的需求驅(qū)動。
發(fā)明內(nèi)容根據(jù)一個實現(xiàn)方式,一種方法可以由在分布式數(shù)據(jù)復制系統(tǒng)中的一組裝置的一個裝置執(zhí)行。所述方法可以包括在所述一個或多個裝置處從客戶端接收上載對象的請求;所述一個或多個裝置響應于所述請求向所述客戶端發(fā)送所述對象的唯一臨時標識;在所述一個或多個裝置處接收具有所述唯一臨時標識的一組組塊,其中,所述一組組塊包括所述上載的對象;通過所述一個或多個裝置在用于所述分布式數(shù)據(jù)復制系統(tǒng)的索引中建立用于所述對象的條目,其中,所述條目以所述唯一臨時標識為鍵;在所述一個或多個裝置從所述客戶端接收完成(finalize)所述上載的對象的請求;在所述一個或多個裝置從所述一組組塊重建所述對象;向所述上載的對象分配基于內(nèi)容的標識符;以及,所述一個或多個裝置在所述分布式數(shù)據(jù)復制系統(tǒng)的所述索引中建立用于所述對象的另一個條目,其中,所述另一個條目以所述基于內(nèi)容的標識符為鍵。根據(jù)另一個實現(xiàn)方式,在分布式數(shù)據(jù)復制系統(tǒng)中的一組裝置的一個裝置可以包括用于在所述分布式數(shù)據(jù)復制系統(tǒng)中存儲對象的索引的裝置;用于將組塊接收在用于所述分布式數(shù)據(jù)復制系統(tǒng)的新的對象內(nèi)指定的偏移處的裝置,其中,所述組的組塊的每一個包括相同的臨時標識符;用于向所述索引寫入所述新的對象的所述臨時標識符的裝置;用于鎖定所述新對象因此對所述新的對象內(nèi)容的內(nèi)容的任何未來修改都是不可能的裝置;用于計算所述新的對象的基于內(nèi)容的標識符的裝置;以及,用于更新所述索引以允許通過所述基于內(nèi)容的標識符訪問所述新的對象的裝置。根據(jù)另一種實現(xiàn)方式,一種系統(tǒng)可以包括存儲器,用于存儲指令、對象的數(shù)據(jù)存儲和在所述數(shù)據(jù)存儲中的所述對象的索引。所述系統(tǒng)也可以包括處理器,用于執(zhí)行在所述存儲器中的所述指令,以接收具有相同的唯一臨時標識符的一組組塊,其中,所述一組組塊包括要上載的對象;在所述索引中建立用于所述對象的條目,其中,所述條目以所述唯一臨時標識符為鍵;計算用于所述對象的基于內(nèi)容的標識符;在所述索引中建立用于所述新的對象的另一個條目,其中,所述另一個條目以所述永久的基于內(nèi)容的標識符為鍵;以及更新所述索引以從所述唯一臨時標識符指向所述基于內(nèi)容的標識符。根據(jù)另一個實現(xiàn)方式,一種由兩個或更多裝置執(zhí)行的方法可以包括在所述兩個或更多的裝置處接收具有相同的唯一臨時標識符的一組組塊,其中,所述一組組塊包括要上載的對象;在所述兩個或更多的裝置處建立在復制的索引中的用于所述對象的條目,其中,所述條目以所述唯一臨時標識符為鍵,并且其中,所述復制的索引是在所述兩個或更多的裝置的每一個處復制的;通過所述兩個或更多裝置的發(fā)起裝置來確定所述一組組塊的合集包含所述對象的所有數(shù)據(jù);通過所述發(fā)起裝置來計算對于所述對象而言的基于內(nèi)容的標識符;在所述兩個或更多裝置處建立在所述復制的索引中的用于所述對象的另一個條目,其中,所述另一個條目以所述基于內(nèi)容的標識符為鍵;以及通過所述兩個或更多裝置更新所述復制的索引以從所述唯一臨時標識符指向所述基于內(nèi)容的標識符。根據(jù)另一個實現(xiàn)方式,一種計算機可讀存儲器可以包括計算機可執(zhí)行指令。所述計算機可讀存儲器可以包括用于在指定的偏移處接收上載的對象的組塊的指令,所述上載的對象包括具有相同的唯一臨時標識符的一組組塊;用于確定所述一組組塊的合集是否包含所述上載的對象的所有數(shù)據(jù)的指令;用于鎖定所述上載的對象以免未來對所述上載的對象的內(nèi)容的修改的指令;用于計算用于所述上載的對象的基于內(nèi)容的標識符的指令;用于在復制索引中建立所述上載的對象的條目的指令,其中,所述條目以所述基于內(nèi)容的標識符為鍵;以及用于更新所述復制的索引以將對于在所述復制的索引中的所述唯一臨時標識符的引用從所述唯一臨時標識符改變?yōu)樗龌趦?nèi)容的標識符的指令。被合并到說明書中并且構成說明書的一部分的附示在此所述的一個或多個實施例,并且與說明書一起解釋這些實施例。在附圖中圖1是其中可以實現(xiàn)在此所述的系統(tǒng)和方法的示例性系統(tǒng)的圖;圖2是圖1的文件系統(tǒng)的示例性配置的圖;圖3是圖1的存儲集群的示例性組件的圖;圖4是圖1的示例性存儲集群的功能框圖;圖5是可以在分布式多主機數(shù)據(jù)復制系統(tǒng)的索引內(nèi)使用的示例性完成記錄結構的圖;圖6是根據(jù)在此所述的實現(xiàn)方式的用于管理客戶端發(fā)起的上載操作的示例性過程的流程圖;圖7是用于在分布式多主機數(shù)據(jù)復制系統(tǒng)中接收客戶端發(fā)起的上載的示例性過程的流程圖;圖8是用于處理上載對象的完成請求的示例性過程的流程圖;圖9是根據(jù)在此所述的實現(xiàn)方式的、用于在存儲集群進行掃描操作的示例性過程的流程圖10是用于建立對復制的存儲集群的全局索引的新引用的示例性過程的流程圖;以及圖11是圖示根據(jù)在此所述的實現(xiàn)方式的示例性全局索引的一部分的圖。具體實施例方式下面的詳細描述參考附圖。在不同附圖中的相同的附圖標號可以標識相同或類似的元素。而且,下面的詳細描述不限制本發(fā)明。在此所述的系統(tǒng)和/或方法可以為復制存儲集群提供在流模式中的異步分布式對象上載算法,該復制存儲集群對于大的不可改變的對象提供可用性、活性和一致性保證。對象可以被劃分為組塊,該組塊被應用異步地上載到可用的集群。在此所述的實現(xiàn)方式可以使用分布式多主機數(shù)據(jù)復制系統(tǒng)的基礎復制層來在不同的存儲集群之間復制在內(nèi)容可尋址索引(在此也稱為“全局索引”)中的組塊位置。一旦對象被應用完成,則可以基于組塊內(nèi)容來計算唯一內(nèi)容句柄(例如,散列值或數(shù)字簽名),并且,將對象插入內(nèi)容可尋址索引中作為不可改變的對象。在此使用的術語“對象”可以指可以被單獨地選擇或操縱的項目或數(shù)據(jù)集合,諸如多媒體文件、圖片、數(shù)據(jù)文件、文本組等。在此使用的術語“組塊”可以指示通過其偏移和大小唯一地識別的對象的一部分,該部分可以被單獨地上載并且以后與其他組塊編組以重建對象。示例性網(wǎng)絡配置圖1是其中可以實現(xiàn)在此所述的系統(tǒng)和方法的示例性系統(tǒng)100的圖。系統(tǒng)100可以包括經(jīng)由網(wǎng)絡130連接的客戶端110-1至110-N(統(tǒng)稱為客戶端110,并且個體稱為客戶端110)和存儲集群120-1至120-M(統(tǒng)稱為存儲集群120,并且個體稱為存儲集群120)。存儲集群120可以形成文件系統(tǒng)140(如圖1中的點線所示)。網(wǎng)絡130可以包括一個或多個網(wǎng)絡,諸如局域網(wǎng)(LAN)、廣域網(wǎng)(WAN)、電話網(wǎng)絡(例如,公共交換電話網(wǎng)絡(PSTN)或蜂窩網(wǎng)絡)。內(nèi)聯(lián)網(wǎng)、因特網(wǎng)、類似或不類似的網(wǎng)絡或網(wǎng)絡的組合。客戶端110和存儲集群120可以經(jīng)由有線和/或無線連接而連接到網(wǎng)絡130??蛻舳?10可以包括一個或多個類型的裝置,諸如個人計算機、無線電話、個人數(shù)字助理(PDA)、膝上型或另一類型的通信裝置和/或在這些裝置中的一個上運行的線程或進程。在一個實現(xiàn)方式中,客戶端110包括或鏈接到應用,其代表客戶端110來與存儲集群120進行通信以上載、讀取或刪除文件數(shù)據(jù)。存儲集群120可以包括一個或多個服務器裝置或其他類型的計算或通信裝置,它們可以以在此描述的方式來存儲、處理、搜索和/或提供信息。在一個實現(xiàn)方式中,存儲集群120可以包括一個或多個服務器(例如,計算機系統(tǒng)和/或應用),它們能夠維護文件的大型的、隨機讀/寫存取的數(shù)據(jù)存儲。存儲集群120的數(shù)據(jù)存儲可以允許索引系統(tǒng)在如果出現(xiàn)改變的情況下迅速地更新索引的部分。存儲集群120的數(shù)據(jù)存儲可以包括一個或多個表(例如,可以包括每一個統(tǒng)一資源定位符(URL)—行的文檔表、以除了URL之外的值為鍵的輔助表等)。在一個示例中,存儲集群120可以被包括在分布式存儲系統(tǒng)中(例如,在下文中闡述的“大表”Chang等人·,“Bigtable:ADistributedStorageSystemforStructuredData,"Proc.ofthe7thOSDI,pp.205-218(Nov.2006)),其用于管理結構化的數(shù)據(jù)(例如,文檔的隨機存取的存儲集群),該結構化的數(shù)據(jù)可以被設計得達到非常大的大小(例如,跨越成千上萬的服務器的千萬億字節(jié)數(shù)據(jù))。雖然在圖1中未示出,但是系統(tǒng)100可以包括多種其他組件,諸如一個或多個專用客戶服務器或集線器??蛻舴掌骼缈梢源鎯碜砸粋€或多個存儲集群120的數(shù)據(jù)存儲的只讀副本,以由客戶端110訪問。集線器例如可以存儲來自一個或多個存儲集群120的數(shù)據(jù)存儲的只讀副本,以向一個或多個客戶服務器分發(fā)。示例性存儲集群配置圖2是文件系統(tǒng)140的示例性配置的圖。如圖2中所示,文件系統(tǒng)140可以包括存儲集群120-1、120-2、120-3和120-4。在一個實現(xiàn)方式中,文件系統(tǒng)140可以是分布式多主機數(shù)據(jù)復制系統(tǒng),其中,存儲集群120-1、120-2、120-3和120-4的每一個可以作為用于其他存儲集群的主機服務器。在文件系統(tǒng)140中,可以跨越存儲集群120-1、120-2、120-3和120-4(例如,在多個地理位置)復制數(shù)據(jù),以提高數(shù)據(jù)可用性并且減少相對于客戶端(例如,客戶端110)的網(wǎng)絡距離。通常,可以在不同的存儲集群120中動態(tài)地建立、克隆和/或刪除分布式對象和引用,并且基礎數(shù)據(jù)復制層(未示出)維護寫入順序保真度,以保證所有的存儲集群120以相同的數(shù)據(jù)版本結束。因此,數(shù)據(jù)復制層遵守向單個對象的同一復制品的寫入順序。在分布式多主機數(shù)據(jù)復制系統(tǒng)中的所有對象的全局索引可以與每一個存儲集群120相關聯(lián)??梢酝ㄟ^在全局索引中的唯一內(nèi)容句柄(諸如散列值、數(shù)字簽名等)來列出每一個存儲的對象。在在此所述的實現(xiàn)方式中,正在從客戶端上載的新的對象可以被分配與新的對象的每一個組塊相關聯(lián)的、在全局索引中的唯一臨時標識符(ID)。當已經(jīng)接收到上載對象的所有組塊時,存儲集群中的一個可以向上載的對象分配永久內(nèi)容句柄,并且更新全局索引以允許使用永久內(nèi)容句柄來訪問對象。由一個存儲集群對于全局索引進行的改變可以被復制到其他存儲集群。雖然圖2示出文件系統(tǒng)140的示例性功能組件,但是在其他實現(xiàn)方式中,文件系統(tǒng)140可以包含比在圖2中描述的組件更少、另外、不同或不同地布置的組件。在其他實現(xiàn)方式中,文件系統(tǒng)140的一個或多個組件可以執(zhí)行被描述為由文件系統(tǒng)140的一個或多個其他組件執(zhí)行的一個或多個任務。圖3是存儲集群120的示例性組件的圖。存儲集群120可以包括總線310、處理器320、主存儲器330、只讀存儲器(R0M);340、存儲裝置350、輸入裝置360、輸出裝置370和通信接口380。總線310可以包括允許在存儲集群120的組件之間進行通信的一個或多個導體。處理器320可以包括可以解譯和執(zhí)行指令的任何類型的處理器或微處理器。主存儲器330可以包括隨機存取存儲器(RAM)或另一種類型的動態(tài)存儲裝置,其可以存儲信息和由處理器320執(zhí)行的指令。R0M340可以包括ROM裝置或另一種類型的靜態(tài)存儲裝置,其可以存儲靜態(tài)信息和由處理器320使用的指令。存儲裝置350可以包括磁和/或光記錄介質(zhì)及其對應的驅(qū)動。例如,存儲裝置350可以包括一個或多個本地盤355,其提供永久存儲。在一個實現(xiàn)方式中,存儲集群120可以在諸如主存儲器330和/或存儲裝置350的一個或多個計算機可讀存儲器內(nèi)維護用于在文件系統(tǒng)140中存儲的對象的元數(shù)據(jù)。例如,存儲集群120可以對于在分布式多主機數(shù)據(jù)復制系統(tǒng)內(nèi)存儲的所有對象在存儲裝置350內(nèi)存儲全局索引。輸入裝置360可以包括允許操作者向存儲集群120輸入信息的一個或多個機制,諸如鍵盤、小鍵盤、按鈕、鼠標、筆等。輸出裝置370可以包括向操作者輸出信息的一個或多個機制,包括顯示器、發(fā)光二極管(LED)等。通信接口380可以包括任何類收發(fā)器的機制,其使得存儲集群120能夠與其他裝置和/或系統(tǒng)進行通信。例如,通信接口380可以包括用于與其他存儲集群120和/或客戶端110進行通信的機制。圖4圖示存儲集群120的功能框圖。如圖4中所示,存儲集群120可以包括數(shù)據(jù)存儲410和組塊處理邏輯420。在一個實現(xiàn)方式中,如圖4中所示,數(shù)據(jù)存儲410可以被設置在存儲集群120內(nèi)。在其他實現(xiàn)方式中,數(shù)據(jù)存儲410的一些或全部可以被存儲在與存儲集群120進行通信的系統(tǒng)100的一個或多個其他裝置內(nèi),諸如外部存儲裝置或與索引系統(tǒng)(未示出)相關聯(lián)的裝置。數(shù)據(jù)存儲410可以包括復制索引存儲412和本地對象存儲414。復制索引存儲412可以被包括為分布式多主機數(shù)據(jù)復制系統(tǒng)的復制層的一部分。復制索引存儲412可以存儲與全局索引相關聯(lián)的信息??梢栽诙鄠€存儲集群120上復制復制索引存儲412的至少一部分。用于每一個復制索引存儲412的復制品的數(shù)量可以是用戶可配置的。本地對象存儲414可以在存儲集群120內(nèi)本地地存儲對象。本地對象存儲414可以包括文件,諸如由客戶端(諸如,客戶端110)上載的圖像或視頻。組塊處理邏輯420可以包括用于以下的邏輯從客戶端接收上載的組塊,其中每一個組塊通過其在對象內(nèi)的偏移識別;和/或從在分布式多主機數(shù)據(jù)復制系統(tǒng)(例如,存儲集群120-1、120-2、120-3和120-4)內(nèi)的多個組塊自動地重建對象。當客戶端(例如,客戶端110)開始上載對象時,組塊處理邏輯420可以為對象分配唯一臨時標識符,客戶端可以使用其來上載對象的所有組塊。當客戶端(例如,客戶端110)完成上載對象的所有組塊時,客戶端可以要求由在集群120中的一個的組塊處理邏輯420執(zhí)行完成功能。組塊處理邏輯420可以在全局索引中進行改變以鎖定(或密封)對象(例如,保證對對象內(nèi)容的未來修改都是不可能的)。組塊處理邏輯420也可以計算對象內(nèi)容散列(例如,基于對象的內(nèi)容產(chǎn)生的字母數(shù)字串),并且基于該散列向?qū)ο蠓峙溆谰脴俗R符。組塊處理邏輯420可以進一步更新全局索引以允許使用永久標識符在分布式多主機數(shù)據(jù)復制系統(tǒng)中訪問對象。為了便利來自多個上載的組塊的對象的完成,可以通過組塊處理邏輯420產(chǎn)生記錄(例如,元數(shù)據(jù)),并且將其附接到與特定的內(nèi)容句柄或臨時ID相關聯(lián)的全局索引的一部分。由一個集群產(chǎn)生的記錄可以最終傳播到在分布式多主機數(shù)據(jù)復制系統(tǒng)中的其他集群處的索引復制品。記錄可以包括例如“FinStarted”標志符,用于指示對象完成已經(jīng)開始;“FinSealed”標志符,用于指示已經(jīng)通過索引復制了上載的對象組塊的所有元數(shù)據(jù),并且不可以對對象的內(nèi)容進行進一步的改變;“FinRefCopy”標志符,用于指示應當在全局索引復制品中包括對于永久ID的交叉引用,并且應當從臨時ID向永久ID索引條目復制對象引用;“FinRefCopyDone”標志符,用于指示已經(jīng)向全局索引復制品增加交叉引用,并且已經(jīng)從臨時ID向永久ID索引條目復制所有的對象引用;以及“FinDone”標志符,用于將未來的引用從臨時ID轉向到永久ID索引條目,下面更詳細地描述記錄格式和使用。雖然圖4示出存儲集群120的示例性功能組件,但是在其他實現(xiàn)方式中,存儲集群120可以包含比在圖4中描述的更少、另外、不同或不同地布置的功能組件。在其他實現(xiàn)方式中,存儲集群120的一個或多個功能組件可以執(zhí)行被描述為由一個或多個其他功能組件執(zhí)行的一個或多個其他任務。示例性記錄結構圖5提供了在一個示例性實現(xiàn)方式中用于可以被寫入全局索引的完成記錄的示例性記錄結構500的圖示。完成記錄可以在全局索引中與對象復制品的特定臨時ID相關聯(lián)。如圖5中所示,記錄結構500可以包括指定部分510和位置部分520。指定部分510可以包括例如“Fir^tarted”標志符、“FinSealed”標志符、“FinRefCopy”標志符、“FinRefCopyDone”標志符或“FinDone”標志符。在上載的完成時從客戶端(例如,客戶端110)接收完成請求的存儲集群120(在此被稱為“發(fā)起集群”)可以向以臨時ID為鍵的對象的元數(shù)據(jù)增加“Fir^tarted”記錄?!癋inSealed”標志符可以被遇到“Fir^tarted”記錄的每一個存儲集群(包括發(fā)起集群)增加?!癋inSealed”標志符可以用于指示不可對與“FinSealed”標志符相關聯(lián)的對象復制品進行進一步的改變(例如,增加、更新或刪除)?!癋inRefCopy”標志符可以被發(fā)起集群使用來指示從臨時ID向永久ID(例如,基于用于對象的內(nèi)容散列)的交叉引用。發(fā)起集群可以向在全局索引中的對象的元數(shù)據(jù)寫入“FinRefCopy”消息。可以利用全局索引來復制“FinRefCopy”標志符以向其他存儲集群120指示永久ID對于該對象可用,并且應當向永久ID索引條目復制與臨時ID相關聯(lián)的引用?!癋inRefCopy”標志符也可以指示不可向臨時ID索引條目增加新的引用。“FinRefCopyDone”標志符可以用于指示集群已經(jīng)將與臨時ID相關聯(lián)的任何引用復制到在全局索引復制品中的永久ID條目。當發(fā)起集群看到在分布式多主機數(shù)據(jù)復制系統(tǒng)中的所有存儲集群的“FinRefCopyDone”標志符時,可以刪除與臨時ID相關聯(lián)的“FinStarted”、“FinSealed”和“FinRefCopyDone”記錄。在一個實現(xiàn)方式中,可以將“FinRefCopy”標志符留在全局索引中,以提供交叉引用以將對于臨時ID的未來引用引導到永久ID。在另一個實現(xiàn)方式中,可以利用其他記錄來刪除“FinRefCopy”標志符,并且可以增加新的“FinDone”記錄。發(fā)起集群可以使用“FinDone”標志符來提供用于對應的對象復制品的從以臨時ID為鍵的條目到永久ID(例如,基于用于對象的內(nèi)容散列)的永久交叉引用。發(fā)起集群可以向在全局索引中的對象的元數(shù)據(jù)寫入“FinDone”消息??梢岳萌炙饕齺韽椭啤癋inDone”標志符以向其他存儲集群120指示永久ID可用于對象,并且與臨時ID相關聯(lián)的引用應當被改變到永久ID索引條目。在一個實現(xiàn)方式中,當指定部分510包括“FinStarted”、“FinSealed”或“FinRefCopyDone”指定時,位置部分520可以包括用于與在指定部分510中的指定相關聯(lián)的存儲集群120的唯一標識(例如,“集群ID”)。在另一個實現(xiàn)方式中,當指定部分510包括“FinRefCopy”或“FinDone”指定時,位置部分520可以包括對與對象復制品的臨時ID相關聯(lián)的永久ID的交叉引用。可以以“指定位置”的形式來列出記錄結構500。例如,可以由具有記錄"FinStarted:01”的存儲集群120-1向全局索引增加具有臨時ID的特定對象的記錄,其中,“FinStarted”是標志符,并且其中,“01”是用于存儲集群120-1的集群ID。用于在存儲集群120-2中的同一對象的另一個復制品的記錄可以是“FinRefCopy:catl3M”,其中,“FinRefCopy”是標志符,并且其中,“cat1324”是用于對象的永久ID。示例性過程流圖6提供了根據(jù)在此所述的實現(xiàn)方式的用于管理客戶端發(fā)起的上載操作的示例性過程600的流程圖。在一個實現(xiàn)方式中,客戶端110中的一個可以執(zhí)行過程600。在另一個實現(xiàn)方式中,包括或不包括客戶端110的另一個裝置或一組裝置可以執(zhí)行過程600的一些或全部。參見圖6,過程600可以通過請求上載對象(塊610)并且接收該對象的臨時ID(塊620)來開始。例如,客戶端110可以向存儲集群120提交向分布式多主機數(shù)據(jù)復制系統(tǒng)上載文件的請求。存儲集群可以接收該請求,并且分配用于文件的唯一臨時ID??梢砸耘c在全局索引中使用的永久ID(例如,基于內(nèi)容的散列)的格式相區(qū)別的任何格式來提供臨時ID。客戶端110可以從存儲集群120接收臨時ID。可以將對象劃分為組塊(塊630)。例如,客戶端110可以將文件劃分為沒有重疊數(shù)據(jù)的多個組塊。在一個實現(xiàn)方式中,每一個組塊可以具有由其偏移和數(shù)據(jù)大小標識的對應的字節(jié)范圍(例如,第一組塊可以指示開始偏移0和63,900,000字節(jié)的組塊大小;第二組塊可以指示63,900,000的偏移和63,989,050字節(jié)的組塊大小;第三組塊可以指示127,889,049的偏移和62,800,000字節(jié)的組塊大?。坏鹊???梢援惒降厣陷d組塊(塊640),并且,可以發(fā)起完成請求(塊650)。例如,客戶端Iio可以向在分布式多主機數(shù)據(jù)復制系統(tǒng)中的任何可用的存儲集群120上載組塊??梢陨陷d組塊使得將每一個組塊標注相同的分配的臨時ID,因此,上載的組塊的字節(jié)范圍的合集覆蓋整個文件。當上載最后的組塊時,客戶端110可以調(diào)用完成功能以發(fā)起在分布式多主機數(shù)據(jù)復制系統(tǒng)內(nèi)的行為來鎖定文件、計算文件的內(nèi)容散列并且基于該散列來分配永久ID。具有上載的對象的元數(shù)據(jù)復制品的任何存儲集群120可以接收完成請求。接收到完成請求的存儲集群120可以作為相對于特定的上載文件的發(fā)起集群,以用于在分布式多主機數(shù)據(jù)復制系統(tǒng)內(nèi)的隨后的完成行為??梢越邮粘晒Υa(塊660)。例如,客戶端110可以從存儲集群120中的一個(例如,從發(fā)起集群)接收成功代碼,以指示已經(jīng)成功地向分布式多主機數(shù)據(jù)復制系統(tǒng)上載了文件。圖7是用于在分布式多主機數(shù)據(jù)復制系統(tǒng)(例如,文件系統(tǒng)140)中接收客戶端發(fā)起的上載的示例性過程700的流程圖。在一個實現(xiàn)方式中,存儲集群120的一個或多個可以執(zhí)行過程700。在另一個實現(xiàn)方式中,包括或不包括存儲集群120的另一個裝置或一組裝置可以執(zhí)行過程700的一些或全部。在每一個存儲集群120中周期地實施過程700,并且過程700可以包括在存儲集群120中的對象的全部或一部分的掃描。對于下面描述的過程700的具體示例,可以參考文件系統(tǒng)140的存儲集群120-1和120-2,其中,存儲集群120-1包括集群ID“01”,并且存儲集群120-2包括集群ID“02”。如圖7中所示,過程700可以通過接收對象上載請求(塊710)并且對于對象分配唯一臨時ID來開始。例如,存儲集群120-1可以從客戶端110中的一個接收對于對象的上載請求。存儲集群120可以為對象分配唯一臨時ID,客戶端110可以在上載期間使用其來指定對象的每一個組塊。臨時ID可以被用作用于上載的對象的全局索引中的鍵。可以以與在全局索引中使用的永久ID(例如,基于內(nèi)容的散列)的格式相區(qū)別的任何格式來提供臨時ID??梢越邮丈陷d的組塊(塊730)。例如,一個或多個存儲集群120以從客戶端110接收組塊??梢韵蛟诜植际蕉嘀鳈C數(shù)據(jù)復制系統(tǒng)中的任何可用的存儲集群120上載組塊,使得可以在不同的存儲集群120接收同一對象的不同組塊??梢陨陷d組塊,使得將每一個組塊標注相同的分配的臨時ID,因此上載的組塊的字節(jié)范圍的合集覆蓋整個對象??梢越邮胀瓿烧埱?塊740)。例如,存儲集群120中的一個可以從上載對象組塊的客戶端110接收完成請求。在已經(jīng)上載了對象的所有組塊后,可以接收完成請求。接收該完成請求的存儲集群120可以被稱為發(fā)起集群。可以從上載的組塊重建對象(塊750)。例如,存儲集群120中的一個(例如,發(fā)起集群)可以通過分布式多主機數(shù)據(jù)復制系統(tǒng)的基礎復制層接收與上載的對象相關聯(lián)的所有組塊的位置。使用用于每一個組塊的唯一臨時ID和字節(jié)范圍序列,存儲集群120可以從其當前位置復制組塊,并且組配它們以重建上載的對象。可以處理完成請求(塊760)。例如,發(fā)起集群可以發(fā)起一系列異步行為來鎖定對象(例如,保證對對象內(nèi)容的進一步的修改都是不可能的),計算對象內(nèi)容散列(例如,基于對象內(nèi)容產(chǎn)生的字母數(shù)字串),并且基于該散列向?qū)ο蠓峙溆谰肐D。完成行為也可以更新全局索引以允許使用永久ID和臨時ID來在分布式多主機數(shù)據(jù)復制系統(tǒng)中訪問對象。參考圖8-10來進一步描述完成請求的處理。圖8是用于在上面的塊760中處理對上載的對象的完成請求的示例性過程的流程圖。在一個實現(xiàn)方式中,發(fā)起集群(例如,存儲集群120中的一個)可以執(zhí)行該過程。在另一個實現(xiàn)方式中,可以由包括或不包括發(fā)起集群的另一個裝置或一組裝置執(zhí)行該過程的一些或全部。對于在圖8中的過程的特定示例,可以參考包括三個存儲集群即存儲集群120-1、120-2和120-3的分布式多主機數(shù)據(jù)復制系統(tǒng)(例如,文件系統(tǒng)140)。假定存儲集群120-1是具有集群ID“01”的發(fā)起集群。存儲集群120-2和120-3分別是具有集群ID“02”和“03”的獨立的存儲集群??梢韵?qū)ο笤獢?shù)據(jù)增加完成開始消息(塊800)。例如,發(fā)起集群120-1(例如,組塊處理邏輯420)可以向在發(fā)起集群120-1中存儲的全局索引復制品中的對象元數(shù)據(jù)增加"FinStarted:01”。與對于全局索引的任何更新相同,可以最后向在分布式多主機數(shù)據(jù)復制系統(tǒng)中的其他存儲集群(例如,包括存儲集群120-2和120-處的全部全局索引復制品傳播完成開始消息??梢韵蚩蛻舳税l(fā)送成功代碼(塊810)。例如,發(fā)起集群120-1可以向發(fā)起對象上載的客戶端110發(fā)送成功代碼。成功代碼可以指示已經(jīng)成功地上載了對象的所有組塊,并且從客戶端110的角度看,上載過程完成??梢栽诿恳粋€集群進行全局索引復制品的異步掃描操作(塊820)。例如,存儲集群120-1、120-2和120-3的任何一個可以周期地進行它們各自的全局索引復制品的全部或一部分的掃描和/或向其的寫入。參考圖9來進一步討論掃描操作。圖9是根據(jù)在此所述的實現(xiàn)方式的用于在存儲集群進行掃描操作的示例性過程的流程圖。在一個實現(xiàn)方式中,存儲集群120中的一個(例如,存儲集群120-1、120-2或120-3)可以執(zhí)行該過程。在分布式多主機數(shù)據(jù)復制系統(tǒng)內(nèi)的每一個存儲集群120可以異步地執(zhí)行該過程,直到上載的對象的完成完成。對于在圖9中的過程的具體示例,可以參考包括三個存儲集群即存儲集群120-1、120-2和120-3的分布式多主機數(shù)據(jù)復制系統(tǒng)(例如,文件系統(tǒng)140)。假定存儲集群120-1是具有集群ID“01”的發(fā)起集群。存儲集群120-2和120-3分別是具有集群ID“02”和“03”的獨立的存儲集群??梢园l(fā)起全局索引復制品的掃描(塊900)。例如,存儲集群120-2可以執(zhí)行在存儲集群120-2內(nèi)存儲的全局索引復制品的離線掃描。該掃描可以查看在存儲集群120-2中的所有索引條目。可以確定以臨時ID為鍵的條目是否具有完成開始消息(塊910)。例如,存儲集群120-2可以遇到在以臨時ID為鍵的全局索引復制品中的對象,并且包括來自另一個存儲集群(例如,來自存儲集群120-1)的完成開始消息(例如,“FinStartechOl”)。如果以臨時ID為鍵的條目沒有完成開始消息(塊910-否),則過程可以返回到塊900,以繼續(xù)掃描或最終發(fā)起全局索引復制品的另一個掃描。如果以臨時ID為鍵的條目具有完成開始消息(塊910-是),則在對于進行掃描的存儲集群沒有已經(jīng)存在對象鎖定消息的情況下,可以向?qū)ο笙?shù)據(jù)增加對象鎖定消息(塊920)。例如,當在存儲集群120-2中的掃描在以臨時ID為鍵的條目中看到“Fir^tartechOl”時,存儲集群120可以向在存儲集群120-2中的全局索引復制品中的對象的元數(shù)據(jù)增加“FinSealed:02”。“FinSealed”消息的存在禁止對應的存儲集群的其他系統(tǒng)組件對上載的對象字節(jié)進行任何改變(增加、更新、刪除)。可以從在分布式多主機數(shù)據(jù)復制系統(tǒng)中的所有存儲集群確定以臨時ID為鍵的條目是否具有對象鎖定消息(塊930)。例如,發(fā)起集群120-1可能遇到以臨時ID為鍵的全局索引復制品中的對象,并且包括來自在分布式多主機數(shù)據(jù)復制系統(tǒng)中的所有存儲集群(例如,來自存儲集群120-1、120-2和120-3)的對象鎖定消息(例如,“FinSealed:01”、"FinSealed:02V<FinSealed:03”)。如果以臨時ID為鍵的條目沒有來自所有存儲集群的對象鎖定消息(塊930-否),則過程可以返回到塊900,以繼續(xù)掃描或最終發(fā)起對全局索引復制品的另一個掃描。如果以臨時ID為鍵的條目具有來自所有存儲集群的對象鎖定消息(塊930-是),則可以增加永久ID和條目對于永久ID的復制引用——如果尚未存在(塊940)。例如,如果在發(fā)起集群120-1中的掃描在以臨時ID為鍵的條目中看到所有存儲集群的對象鎖定消息(例如,“FinSealed01","FinSealed:02”、“FinSealed:03”),則存儲集群120-1(例如,組塊處理邏輯420)可以計算對象的內(nèi)容散列,并且基于內(nèi)容散列來建立永久對象ID。存儲集群120-1可以然后向在存儲集群120-1中的對象的元數(shù)據(jù)增力『FinRefCopy:PermID”(其中,PermID是基于內(nèi)容散列而新產(chǎn)生的永久ID)。“FinRefCopy=PermID"消息的存在也可以禁止其他系統(tǒng)組件對在其他存儲集群(例如,存儲集群120-2和120-中的對象的字節(jié)以及與對象的元數(shù)據(jù)一起存儲的引用進行任何改變(例如,增加、更新、刪除)??梢源_定以臨時ID為鍵的條目是否具有對于永久ID的復制引用(塊950)。例如,任何存儲集群120(例如,存儲集群120-1、120-2或120-3的任何一個)可能遇到以臨時ID為鍵的全局索引復制品中的對象,并且包括復制引用消息(例如,“FinRefCopy:PermID”)。如果以臨時ID為鍵的條目沒有對于永久ID的復制引用(塊950-否),則過程可以返回到塊900以繼續(xù)掃描或最終發(fā)起全局索引復制品的另一個掃描。如果以臨時ID為鍵的條目具有對于永久ID的復制引用(塊950-是),則在臨時ID條目中的對象引用可以被復制到永久ID條目,并且,如果沒有的話可以增加復制結束消息(塊960)。例如,如果存儲集群120-2中的掃描在以臨時ID為鍵的條目中看到"FinRefCopy:PermID”,則存儲集群120-2可以將在臨時ID條目中列出的所有的對象引用復制到以對應的永久ID為鍵的條目。一旦復制完成,則存儲集群120-2可以向存儲集群120-2中以臨時ID為鍵的條目增加"FinRefCopyDone:02”??梢源_定以臨時ID為鍵的條目是否具有來自所有的集群的復制結束消息(塊970)。例如,發(fā)起集群120-1可能遇到在以臨時ID為鍵的全局索引復制品中的對象,并且包括來自在分布式多主機數(shù)據(jù)復制系統(tǒng)中的所有存儲集群(例如,來自存儲集群120-1、120-2和120-3)的復制結束消息(例如,"FinRefCopyDone:01”、"FinRefCopyDone:02”、"FinRefCopyDone:03”)。如果以臨時ID為鍵的條目沒有復制結束消息(塊970-否),則過程可以返回到塊900,以繼續(xù)掃描或最終發(fā)起全局索引復制品的另一個掃描。如果以臨時ID為鍵的條目具有復制結束消息(塊970-是),則可以去除與臨時ID相關聯(lián)的多余元數(shù)據(jù),并且可以增加完成結束消息(塊980)。例如,如果發(fā)起存儲集群120-1中的掃描在以臨時ID為鍵的條目中看到所有存儲集群的“FinRefCopyDone”(例如,"FinRefCopyDone:01”、“FinRefCopyDone:02”、“FinRefCopyDone:03”),則發(fā)起集群120-1可以從以臨時ID為鍵的條目去除所有的完成開始(“FinStarted”)、對象鎖定(“FinSealed”)、復制引用("FinRefCopy")消息和復制結束("FinRefCopyDone")消息。發(fā)起集群也可以增加“FinDone=PermID”消息以提供從以臨時ID為鍵的條目到以對應的永久ID(例如,基于對象的內(nèi)容散列)為鍵的條目的永久交叉引用。注意完成過程不影響對于臨時ID的預先存在的對象引用的有效性。多余元數(shù)據(jù)的去除可以完成上載的對象的完成過程。該過程可以返回到塊900,以繼續(xù)掃描或最終發(fā)起全局索引復制品的另一個掃描。在另一個實現(xiàn)方式中,如果客戶端(例如,客戶端110)在開始上載過程之前預先計算永久對象ID,則可以優(yōu)化上述過程。在這種變化形式中,可以消除對于以新的永久ID為鍵的條目的引用的復制(例如,“FinRefCopy”消息)。相反,一旦已經(jīng)從所有的存儲集群120接收到“FinSealed”消息,發(fā)起集群120可以簡單地將上載的對象標注為完成。注意,在這種變化形式中的臨時ID等于永久ID。圖10提供了用于向復制的存儲集群的全局索引增加新的對象引用的示例性過程1000的流程圖。通常,意欲向以臨時ID為鍵的索引條目增加引用的在分布式多主機數(shù)據(jù)復制系統(tǒng)中的任何系統(tǒng)組件可以首先檢查是否在那個條目中存在復制引用消息。如果找到復制引用消息,則取而代之向以對應的永久ID為鍵的條目增加新的引用。在一個實現(xiàn)方式中,存儲集群120中的一個(例如,存儲集群120-1、120-2或120-3)可以執(zhí)行該過程。在分布式多主機數(shù)據(jù)復制系統(tǒng)內(nèi)的每一個存儲集群120可以異步地執(zhí)行該過程,直到已經(jīng)在每一個存儲集群120復制了新的引用??梢越邮諏τ谝耘R時ID為鍵的對象的引用請求(塊1010)。例如,存儲集群120-1可以接收向以臨時ID“TempID3”為鍵的索引條目增加新的引用的請求(例如,基于已經(jīng)上載但是還沒有完成的對象的引用)??梢源_定以臨時ID為鍵的條目是否具有對于永久ID的交叉引用(塊1020)。例如,存儲集群120-1可以掃描以“TempID3”為鍵的條目,以識別在條目中的任何“FinRefCopy”消息或“FinDone”消息。如果以臨時ID為鍵的條目具有對于永久ID的交叉引用(塊1020-是),則可以向以永久ID為鍵的條目增加引用(塊1030)。例如,存儲集群120-1可以識別“FinRefCopy:PermID4”消息,并且向以“PermID4”為鍵的條目增加新的引用。如果以臨時ID為鍵的條目沒有對于永久ID的交叉引用(塊1020-否),則可以向以臨時ID為鍵的條目增加引用(塊1040)。例如,如果未找到“FinRefCopy”消息或“FinDone”消息,則存儲集群120-1可以向以“TempID3”為鍵的條目增加新的引用。示例圖11提供了根據(jù)在此所述的實現(xiàn)方式的示例性全局索引復制品的部分1100。該索引可以包括內(nèi)容句柄列1110和完成記錄列1120。諸如對象引用和組塊元數(shù)據(jù)(未示出)的其他信息也可以被包括在全局索引復制品中。為了清楚,在部分1100中示出內(nèi)容句柄列Ilio和完成記錄列1120。在其他實現(xiàn)方式中,在全局索引復制品中的完成記錄可以與其他記錄混合并且使用或不使用列被分隔符(例如,逗號、空格等)界定。其他數(shù)據(jù)結構也可以用于全局索引復制品。假定在示例性索引復制品部分1100中分布式多主機數(shù)據(jù)復制系統(tǒng)包括三個存儲集群XX、YY和Ti。完成算法可以在存儲集群XX、YY和TL的每一個中周期地運行,并且可以掃描全局索引的全部或一部分。而且,可以由存儲集群XX、丫丫或以中的一個向與特定的對象內(nèi)容句柄相關聯(lián)的全局索引復制品寫入消息(例如,F(xiàn)inStarted,FinSealed,FinRefCopy和FinRefCopyDone)。對全局索引的修改可以被復制到所有其他的參與集群(例如,存儲集群X、YY和TL的剩余者)。如圖11中所示,索引部分1100包括用于三個對象的內(nèi)容句柄和相關聯(lián)的完成記錄。以“TempID06”為鍵的行1130具有用于指示發(fā)起集群XX已經(jīng)對與“TempID06”相關聯(lián)的對象開始了完成過程。行1130也包括用于指示已經(jīng)在存儲集群XX(即,“FinSealed:XX”)、在存儲集群YY(即,“FinSealed:YY”)和在存儲集群ZZ(即,“FinSealed:ZZ”)鎖定了對象的記錄。發(fā)起集群XX已經(jīng)識別了用于在分布式多主機數(shù)據(jù)復制系統(tǒng)中的所有存儲集群的“FinSealed”消息并且確認與“TempID06”對應的對象的所有字節(jié)已經(jīng)被上載到XX、YY和ZZ,該發(fā)起集群XX已經(jīng)計算了對象的內(nèi)容散列(即,“PermID07”)。存儲集群XX因此已經(jīng)向行1130中的完成記錄增加“FinRefCopy:PermID07”,并且建立以“PermID07”為鍵的新行1150,該新行1150包括來自行1130的對象引用。復制結束消息(即,“FinRefCopyDoneXX”)也已經(jīng)被包括在行1130中,以指示存儲集群XX已經(jīng)完成了復制過程。一旦從其他存儲集群YY和U提供了“FinRefCopyDone,,消息(并且將該消息復制到發(fā)起集群XX),則發(fā)起集群XX可以刪除多余的消息數(shù)據(jù)(BP,"FinStarted:XX'\"FinSealed:XX”、"FinSealed:YY”、“Fir^ealedZZ","FinRefCopy:PermID07”、“FinRefCopyDone:XX”禾口其他“FinRefCopyDone”消息)(并且,該刪除被復制到剩余的集群)。以“TempID08”為鍵的行1140具有用于指示已經(jīng)對于與“TempID08”相關聯(lián)的對象完成了完成過程的記錄。來自完成過程的多余數(shù)據(jù)已經(jīng)被刪除,并且僅對永久ID的交叉引用(即,“FinDone:PermID09”)保留在完成記錄中。以“PermID09”為鍵的新的行1160包括來自行1140的對象引用。如在上述實現(xiàn)方式中所示,在此所述的系統(tǒng)和方法保證完成從臨時ID向新的永久ID的最終轉變。可以在對象的永久ID下復制曾經(jīng)在對象的臨時ID下記錄的所有引用,并且不能在未來在對象的臨時ID下記錄新的引用。結論在此所述的系統(tǒng)和/或方法可以包含用于在內(nèi)容可尋址存儲集群中的復制使用的異步分布式對象上載算法。該算法使用基礎數(shù)據(jù)復制層來復制包含包括對象的組塊的位置的索引??梢噪S著時間在不同的集群中上載組塊,直到明確地完成對象。在已經(jīng)上載了所有組塊后,可以向內(nèi)容可尋址的索引系統(tǒng)內(nèi)插入對象。上述的實現(xiàn)方式的描述提供了圖示和說明,但是不意欲是窮盡性的或?qū)⒈景l(fā)明限于所公開的精確的形式。修改和改變基于上面的教導是可能的,或可以通過本發(fā)明的實踐來獲取修改和改變。例如,在另一個實現(xiàn)方式中,可以使用完成算法的同步版本,其中,不同的存儲集群直接地進行通信,而不是使用在分布式數(shù)據(jù)復制系統(tǒng)內(nèi)的復制層來進行通信。而且,雖然參考圖6-10描述了塊系列,但是可以在其他實現(xiàn)方式中修改塊的順序。而且,可以并行地執(zhí)行非依賴的塊。顯然,可以以在附圖中圖示的實現(xiàn)方式中的軟件、固件和硬件的許多不同形式來實現(xiàn)在此所述的實施例。用于實現(xiàn)在此所述的實施例的實際軟件代碼或?qū)S每刂朴布皇菍τ诒景l(fā)明的限制。因此,沒有參考特定的軟件代碼來描述實施例的操作和行為——可以明白,軟件和控制硬件可以基于在此的說明被設計來實現(xiàn)所述實施例。而且,在此所述的某些實現(xiàn)方式可以被實現(xiàn)為執(zhí)行一個或多個功能的“邏輯”或“組件”。該邏輯或組件可以包括硬件,諸如處理器、微處理器、專用集成電路或場可編程門陣列;或者,硬件和軟件(例如,由處理器執(zhí)行的軟件)的組合。應當強調(diào),詞語“包括”和/或“包含”當在本說明書中使用時用于指定所述特征、完整物、步驟或組件的存在,但是不排除一個或多個其他特征、完整物、步驟、組件或其組的存在或者增加。即使在權利要求中描述和/或在說明書中公開了特征的特定組合,這些組合也不意欲限制本公開的公開。事實上,可以以未具體地在權利要求中描述和/或在說明書中公開的方式來組合這些特征中的許多。在本申請的說明書中使用的元素、行為或指令不應當被理解為對于本發(fā)明是關鍵或必要的,除非明確描述如此。而且,不加數(shù)量詞限定的項意欲包括一個或多個項。在僅意欲表示一個項目的情況下,使用詞語“一個”或類似的語言。而且,在此使用的短語“基于”意欲表示“至少部分地基于”,除非另外明確地說明。權利要求1.一種由在分布式數(shù)據(jù)復制系統(tǒng)中的多個裝置中的一個或多個裝置執(zhí)行的方法,所述方法包括在所述一個或多個裝置處從客戶端接收上載對象的請求;通過所述一個或多個裝置響應于所述請求向所述客戶端發(fā)送用于所述對象的唯一臨時標識;在所述一個或多個裝置處接收具有所述唯一臨時標識的多個組塊,其中,所述多個組塊包括所述上載的對象;通過所述一個或多個裝置在用于所述分布式數(shù)據(jù)復制系統(tǒng)的索引中建立用于所述對象的條目,其中,所述條目以所述唯一臨時標識為鍵;在所述一個或多個裝置處從所述客戶端接收完成所述上載的對象的請求;在所述一個或多個裝置處從所述多個組塊重建所述對象;向所述上載的對象分配基于內(nèi)容的標識符;以及通過所述一個或多個裝置在所述分布式數(shù)據(jù)復制系統(tǒng)的所述索引中建立用于所述對象的另一個條目,其中,所述另一個條目以所述基于內(nèi)容的標識符為鍵。2.根據(jù)權利要求1所述的方法,進一步包括通過所述一個或多個裝置向所述客戶端發(fā)送成功代碼,以確認接收到所述多個組塊。3.根據(jù)權利要求1所述的方法,進一步包括從在所述索引中的以所述唯一臨時標識為鍵的條目向在所述索引中以所述永久基于內(nèi)容的標識符為鍵的條目復制用于所述對象的引用。4.根據(jù)權利要求1所述的方法,其中,所述索引是內(nèi)容可尋址索引,包括用于所述索引內(nèi)的每一個對象的內(nèi)容句柄。5.根據(jù)權利要求1所述的方法,進一步包括通過所述一個或多個裝置向與用于所述對象的所述唯一臨時標識符相關聯(lián)的所述索引的部分寫入對象鎖定消息;以及將與用于所述對象的所述唯一臨時標識符相關聯(lián)的所述索引的所述部分復制到所述多個裝置中的一個或多個其他裝置。6.根據(jù)權利要求5所述的方法,進一步包括通過所述一個或多個裝置向與用于所述對象的所述唯一臨時標識符相關聯(lián)的所述索引的所述部分寫入對與用于所述對象的所述永久基于內(nèi)容的標識符相關聯(lián)的所述索引的部分的交叉引用。7.根據(jù)權利要求6所述的方法,進一步包括在寫入對與用于所述對象的所述永久基于內(nèi)容的標識符相關聯(lián)的所述索引的部分的所述交叉引用后,通過所述一個或多個裝置從與用于所述對象的所述唯一臨時標識符相關聯(lián)的所述索引的所述部分刪除所述對象鎖定消息。8.根據(jù)權利要求1所述的方法,其中,在所述一個或多個裝置中的每一個內(nèi)與所述對象分離地存儲所述索引。9.一種在分布式數(shù)據(jù)復制系統(tǒng)中的多個裝置中的一個裝置,所述裝置包括用于在所述分布式數(shù)據(jù)復制系統(tǒng)中存儲對象的索引的裝置;用于接收用于所述分布式數(shù)據(jù)復制系統(tǒng)的新對象的組塊的裝置,所述組塊包括形成所述新對象的多個組塊的最后組塊,其中,所述多個組塊中的每一個包括同一臨時標識符;用于向所述索引寫入所述新對象的所述臨時標識符的裝置;用于鎖定所述新對象使得對所述新對象內(nèi)容的內(nèi)容的任何未來的修改都是不可能的裝置;用于計算所述新對象的基于內(nèi)容的標識符的裝置;以及用于更新所述索引以允許通過所述基于內(nèi)容的標識符訪問所述新對象的裝置。10.根據(jù)權利要求9所述的系統(tǒng),進一步包括用于向在所述索引中的所述基于內(nèi)容的標識符復制對在所述索引中的所述臨時標識符的引用的裝置。11.一種系統(tǒng),包括存儲器,用于存儲指令、對象的數(shù)據(jù)存儲和在所述數(shù)據(jù)存儲中的所述對象的索引;以及處理器,用于執(zhí)行在所述存儲器中的所述指令,以接收具有相同的唯一臨時標識符的多個組塊,其中,所述多個組塊包括要上載的對象;在所述索引中建立用于所述對象的條目,其中,所述條目以所述唯一臨時標識符為鍵;計算用于所述對象的基于內(nèi)容的標識符;在所述索引中建立用于所述新對象的另一個條目,其中,所述另一個條目以永久的基于內(nèi)容的標識符為鍵;以及更新所述索引以從所述唯一臨時標識符指向所述基于內(nèi)容的標識符。12.根據(jù)權利要求11所述的系統(tǒng),其中,所述處理器進一步執(zhí)行在所述存儲器中的指令,以接13.根據(jù)權利要求11所述的系統(tǒng),其中,所述處理器進一步執(zhí)行在所述存儲器中的指令,以接收完成所述對象的請求,以及從所述多個組塊重建所述對象。14.根據(jù)權利要求11所述的系統(tǒng),其中,所述處理器進一步執(zhí)行在所述存儲器中的指令,以發(fā)送成功代碼以確認接收到所述多個組塊。15.根據(jù)權利要求11所述的系統(tǒng),其中,所述處理器進一步執(zhí)行在所述存儲器中的指令,以鎖定所述對象以免對所述新對象的內(nèi)容的未來修改。16.根據(jù)權利要求11所述的系統(tǒng),其中,所述處理器進一步執(zhí)行在所述存儲器中的指令,以從在所述索引中的以所述唯一臨時標識符為鍵的所述條目向在所述索引中的以所述永久基于內(nèi)容的標識符為鍵的所述條目復制對所述臨時標識符的引用。17.一種由兩個或更多裝置執(zhí)行的方法,包括在所述兩個或更多裝置處接收具有相同的唯一臨時標識符的多個組塊,其中,所述多個組塊包括要上載的對象;在所述兩個或更多裝置處建立在復制的索引中的用于所述對象的條目,其中,所述條目以所述唯一臨時標識符為鍵,并且其中,所述復制的索引是在所述兩個或更多裝置中的每一個處復制的;通過所述兩個或更多裝置中的發(fā)起裝置來確定所述多個組塊的合集包含所述對象的所有數(shù)據(jù);通過所述發(fā)起裝置來計算對于所述對象而言的基于內(nèi)容的標識符;在所述兩個或更多裝置處建立在所述復制的索引中的用于所述對象的另一個條目,其中,所述另一個條目以所述基于內(nèi)容的標識符為鍵;以及通過所述兩個或更多裝置更新所述復制的索引以從所述唯一臨時標識符指向所述基于內(nèi)容的標識符。18.根據(jù)權利要求17所述的方法,進一步包括通過所述兩個或更多裝置鎖定所述對象以免對所述新對象的內(nèi)容的未來修改。19.根據(jù)權利要求17所述的方法,其中,所述復制的索引是使用分布式多主機數(shù)據(jù)復制系統(tǒng)的基礎復制層來復制的。20.根據(jù)權利要求17所述的方法,其中,所述復制的索引是內(nèi)容可尋址索引。21.一種計算機可讀存儲器,包括計算機可執(zhí)行指令,所述計算機可讀存儲器包括用于接收上載的對象的組塊的指令,所述上載的對象包括具有相同的唯一臨時標識符的多個組塊;用于確定所述多個組塊的合集是否包含所述上載的對象的所有數(shù)據(jù)的指令;用于鎖定所述上載的對象以免對所述上載的對象的內(nèi)容的未來修改的指令;用于計算用于所述上載的對象的基于內(nèi)容的標識符的指令;用于在復制的索引中建立所述上載的對象的條目的指令,其中,所述條目以所述基于內(nèi)容的標識符為鍵;以及用于更新所述復制的索引以將對在所述復制的索引中的所述唯一臨時標識符的引用從所述唯一臨時標識符改變?yōu)樗龌趦?nèi)容的標識符的指令。22.根據(jù)權利要求21所述的計算機可讀存儲器,進一步包括用于接收上載所述對象的請求的指令,以及用于在上載之前對于所述對象分配唯一臨時標識符的指令。23.根據(jù)權利要求21所述的計算機可讀存儲器,進一步包括用于向在所述復制的索引中的所述基于內(nèi)容的標識符復制對于在所述復制的索引中的所述臨時標識符的引用的指令。全文摘要一種由在分布式數(shù)據(jù)復制系統(tǒng)中的一組裝置中的兩個或更多裝置執(zhí)行的方法。該方法包括在所述兩個或更多裝置處接收具有相同的唯一臨時標識符的一組組塊,其中,所述一組組塊包括要上載的對象;在所述兩個或更多裝置處建立在復制的索引的用于所述對象的條目,其中,所述條目以所述唯一臨時標識符為鍵,并且其中,在所述兩個或更多裝置中的每一個處復制所述復制的索引;通過所述兩個或更多裝置的發(fā)起裝置來確定所述一組組塊的合集包含所述對象的所有數(shù)據(jù)。所述方法也包括計算對于所述對象而言的基于內(nèi)容的標識符;建立在所述復制的索引中的用于所述對象的另一個條目,其中,所述另一個條目以所述基于內(nèi)容的標識符為鍵;并且更新所述復制的索引以從所述唯一臨時標識符指向所述基于內(nèi)容的標識符。文檔編號G06F17/30GK102395967SQ201080016861公開日2012年3月28日申請日期2010年4月16日優(yōu)先權日2009年4月21日發(fā)明者亞歷山大·克塞爾曼,亞歷山大·德羅貝切夫申請人:谷歌公司