欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于存儲集群的共享名稱空間的制作方法

文檔序號:6595391閱讀:245來源:國知局

專利名稱::用于存儲集群的共享名稱空間的制作方法
技術(shù)領(lǐng)域
:本發(fā)明大體上涉及名稱空間。更具體地,本發(fā)明涉及在訪問存儲集群的客戶端應(yīng)用(applicaion)之間所共享的名稱空間。
背景技術(shù)
:現(xiàn)有技術(shù)的內(nèi)容可尋址的存儲應(yīng)用將唯一的標(biāo)識符返回給管理應(yīng)用(或用戶);作為交換,其接收并存儲數(shù)字對象(如計算機(jī)文件)。一般地,這種唯一的標(biāo)識符是在數(shù)字對象的內(nèi)容(例如,冗長的十六進(jìn)制字符串)上執(zhí)行的散列函數(shù)(hashfunction)的結(jié)果,或者是與該數(shù)字對象相關(guān)聯(lián)的唯一的隨機(jī)數(shù)。然而,輪到管理應(yīng)用(或用戶)來決定對該唯一的標(biāo)識符做什么將其存儲在哪里,如何維護(hù)該標(biāo)識符,以及當(dāng)存儲在內(nèi)容可尋址的存儲器中的數(shù)字對象必須被檢索時如何檢索到該標(biāo)識符。當(dāng)然,追蹤(例如)1位的唯一的標(biāo)識符對用戶而言可能是困難的,并且對于習(xí)慣于使用其自己的路徑名稱方案的管理應(yīng)用可能是有問題的。另外,各種應(yīng)用可能希望使用不同的路徑名稱方案來查閱存儲器中的數(shù)字對象,但是卻不能夠。此外,期望共享和訪問同一數(shù)字對象的不同應(yīng)用在各自管理冗長的十六進(jìn)制字符串的情況下,不能做到這樣。另外,盡管存在用于備份計算機(jī)文件并恢復(fù)到計算機(jī)系統(tǒng)中的早先狀態(tài)的很多技術(shù),但是大多數(shù)這些技術(shù)僅僅提供離散時間下的早先狀態(tài)。例如,在來自蘋果公司的計算機(jī)上可用的“時間機(jī)器(TimeMachine)”特征自動地每小時進(jìn)行增量備份——僅復(fù)制自最后一次備份后發(fā)生了變化的文件。但是,這種類型的備份僅僅在離散的檢查點(每小時)是可用的;如果文件一直在變化的話,則不可能確定小時間的計算機(jī)系統(tǒng)狀態(tài)。當(dāng)前,存在很多特定的名稱空間,如將主機(jī)名稱映射到IP地址的DNS;將路徑名稱映射到各個文件的文件系統(tǒng);將電子郵件地址映射到各個電子信箱的電子郵件系統(tǒng);以及將統(tǒng)一資源定位符(URL)和統(tǒng)一資源標(biāo)識符(URI)映射到互聯(lián)網(wǎng)內(nèi)容的Web服務(wù)器。不幸的是,這些現(xiàn)有技術(shù)的名稱空間都沒有解決上面指出的問題,并且期待改進(jìn)的名稱空間和技術(shù)。
發(fā)明內(nèi)容為了實現(xiàn)以上所述,并且根據(jù)本發(fā)明的目的,解決現(xiàn)有技術(shù)中的上述問題的名稱空間和相關(guān)方法被公開。本發(fā)明提供一種通用的功能以將象征性的用戶可讀名稱映射到(例如)識別數(shù)字對象的固定內(nèi)容存儲器中的唯一標(biāo)識符。在文件系統(tǒng)的上下文中,這使得用戶或者管理應(yīng)用能夠通過象征性的名稱或者通過路徑名稱代替通過1位的數(shù)字來查閱數(shù)字對象(例如文件)。因此,存儲在固定內(nèi)容存儲器中的數(shù)字對象此時能夠被提供更有用的象征性名稱,并且能夠被(例如)利用文件系統(tǒng)來操作。本發(fā)明確保了完全解析的路徑名稱不模糊,并且最多指代固定內(nèi)容存儲器中的單個數(shù)字對象。本發(fā)明的名稱空間通常是足夠的,使其能夠表示主機(jī)名稱、URI、URL、分級文件名稱、電子郵件地址以及幾乎任何象征性名稱,不論語法如何。與上面的文件系統(tǒng)示例相同,優(yōu)選地,管理應(yīng)用確保路徑名稱不模糊。因此,本發(fā)明提供了一種具有通用映射功能的新穎的名稱空間任何客戶端應(yīng)用(文件系統(tǒng),電子郵件程序等)都能夠利用其自己的特殊路徑名稱方案存儲和檢索數(shù)字對象而無需管理冗長的唯一標(biāo)識符。名稱空間支持來自不同文件系統(tǒng)、URL、電子郵件地址等的文件名稱,所有這些都使用不同的格式用于識別數(shù)字對象,并因此提供語法一般性。本發(fā)明的名稱空間允許在任何數(shù)量的不同系統(tǒng)和客戶端之間共享數(shù)字對象。不同類型的軟件應(yīng)用可以利用其自己的特殊路徑名稱訪問存儲集群中的同一數(shù)字對象,并且不僅確保了正確的數(shù)字對象在被訪問,還確保了其他的軟件應(yīng)用能夠看到對數(shù)字對象的元數(shù)據(jù)(或者數(shù)字對象本身)進(jìn)行的任何改變。諸如CIFS、NFS、FTP、HTTP-Web等的大量客戶端和協(xié)議被支持。名稱空間還提供將起始日期和終止日期值附到每個名稱綁定和屬性的功能。每個綁定或?qū)傩园ū砻鲗ο?或?qū)傩?何時開始存在和何時它被刪除或改變的“起始日期”和“終止日期”。利用這些值,一旦數(shù)據(jù)被存儲在固定內(nèi)容RAIN集群(例如)中并且用于對象的標(biāo)識符被存儲在名稱空間中,則不再需要手動備份。任何用戶(不僅僅是管理員)都能夠?qū)r鐘回?fù)芤钥吹轿募⑽募A或文件系統(tǒng)在過去的任何時刻看起來像什么。因此,不像僅僅提供在過去的離散時間處的備份功能,名稱空間還提供了用于數(shù)字對象的“連續(xù)備份”的功能。名稱空間加強(qiáng)了共同確保不模糊的完全合格的路徑名稱的特定限制。在給定的名稱上下文內(nèi),簡單的名稱僅僅能夠在任何給定的時間柱身(timescape)中使用一次,以指代單個數(shù)字對象。該簡單的規(guī)則足以確保給定的完全合格的路徑名稱將在當(dāng)前或在過去的任何時刻指代最多一個數(shù)字對象。然而,給定的數(shù)字對象可能具有很多(或許是無限多的)完全合格的指代它的路徑名稱。通常,任何文件系統(tǒng)(或者數(shù)字對象的其他集合)可被實施為固定內(nèi)容存儲集群(例如,獨(dú)立節(jié)點的冗余陣列,或者RAIN)加上本發(fā)明的通用名稱空間。因此,名稱空間允許人對固定內(nèi)容存儲器中的存儲對象分配象征性的、結(jié)構(gòu)化的名稱,然后在稍晚的時候通過名稱檢索對象。例如,構(gòu)建為固定內(nèi)容存儲器與本發(fā)明的名稱空間的組合的Linux文件系統(tǒng)可以用來保持分層的文件名稱。通過參照下面結(jié)合了附圖的描述,本發(fā)明及其進(jìn)一步的優(yōu)點可以被最佳地理解,在附圖中圖1示出了用于本發(fā)明的操作的適當(dāng)計算環(huán)境。圖2示出了名稱空間環(huán)境的替代視圖。圖3以圖形的方式表示了在對象Ul的上下文中,名稱“A”指代對象u2。圖4示出了對象可以具有用于多個其他對象的名稱。圖5示出了圖4的對象可以具有用于其他對象的名稱。圖6示出了同一個對象可以具有兩個或更多個名稱。圖7示出了對象Ul具有用于自身的名稱“.”,以及u5指代其根源為“..”。圖8示出了創(chuàng)建新的名稱空間及其根節(jié)點。圖9示出了創(chuàng)建新的節(jié)點。圖10示出了創(chuàng)建三個新的節(jié)點。圖11示出了對u5創(chuàng)建別名。圖12示出了對對象進(jìn)行重命名。圖13示出了刪除名稱綁定。圖14示出了包括四個對象的簡單名稱圖形。圖15示出了存在于名稱空間內(nèi)的綁定表。圖16示出了同樣存在于名稱空間內(nèi)的屬性表。圖17是在解釋下面的流程圖中使用的示例名稱圖形。圖18是流程圖,其描繪了利用該示例創(chuàng)建名稱圖形的一部分。圖19是流程圖,其描繪了利用不同的路徑名稱方案對同一對象創(chuàng)建另一路徑。圖20示出了表示URL型路徑名稱的名稱圖形的另一示例。圖21是流程圖,其描繪了如何可以刪除特定的客戶端應(yīng)用的數(shù)字對象。圖22是流程圖,其描繪了如何可以改變名稱空間中的對象的屬性。圖23是流程圖,其描繪了如何可以檢索名稱空間中的對象的屬性。圖24A和24B示出了適于執(zhí)行本發(fā)明的實施例的計算機(jī)系統(tǒng)。具體實施例方式如上所述,本發(fā)明適用于數(shù)字對象,即以數(shù)字形式表示的任何類型的信息。例如,本發(fā)明適用于信息的任何電子表示,如計算機(jī)文件、一組文件、一組文件標(biāo)識符,或者數(shù)據(jù)或數(shù)據(jù)庫信息的其他集合。這種數(shù)據(jù)的其他集合包括來自數(shù)字音頻或視頻流的幀或剪取、數(shù)碼照片、掃描的紙件、聲音信息、CAD/CAM設(shè)計、MRI或X射線數(shù)據(jù)、來自信息記錄或文件的流、來自審查的日志記錄或系統(tǒng)的狀態(tài)日志、電子郵件存檔、檢查圖像等。術(shù)語“計算機(jī)文件”通常在此處用來包括上述類型的信息的任何電子表示。如本領(lǐng)域公知的,名稱空間是被創(chuàng)建以保持唯一標(biāo)識符或符號的邏輯分組的環(huán)境。典型地,計算機(jī)存儲設(shè)備和現(xiàn)代計算機(jī)語言提供對名稱空間的支持。存儲設(shè)備可以使用目錄(或者文件夾)作為名稱空間。這種使用允許將具有相同名稱的兩個文件存儲在設(shè)備上,只要它們存儲在不同的目錄中即可。本發(fā)明結(jié)合下面描述的固定內(nèi)容存儲集群使用名稱空間以實現(xiàn)諸多優(yōu)點。圖1示出了用于本發(fā)明的操作的適當(dāng)環(huán)境10。本發(fā)明可以利用任何適當(dāng)?shù)挠嬎銠C(jī)硬件和軟件來執(zhí)行;名稱空間10示出了一個特定的實施例。示出的存儲集群20包括任意數(shù)量的的計算機(jī)節(jié)點22-28。優(yōu)選地,每個節(jié)點包括CPU、操作系統(tǒng)、與其他節(jié)點(或者,至少與中央路由器)的通信鏈路、以及任意數(shù)量的內(nèi)部硬盤驅(qū)動器四。集群20—般為固定內(nèi)容存儲集群,這意味著其用于備份、長期存儲、存檔等,并且一般并不用于對計算機(jī)文件的日常訪問。通常稱為WORM(寫入一次,讀多次)存儲器,這意味著一旦計算機(jī)文件或數(shù)字對象被寫入到集群中,便不能改變。(當(dāng)然,修改版本的計算機(jī)文件也可以存儲在集群內(nèi))。集群20可以執(zhí)行為獨(dú)立節(jié)點的冗余陣列(RAIN),這意味著每個節(jié)點運(yùn)行其自己的操作系統(tǒng)并作出獨(dú)立的關(guān)于集群內(nèi)的存儲的決定。存儲集群可以構(gòu)建在刀片式服務(wù)器(blade)、塔式服務(wù)器(tower)、個人計算機(jī)和服務(wù)器上。可替代地,單個計算機(jī)盒內(nèi)的多核處理器可以支持在每個核上運(yùn)行的虛擬存儲節(jié)點。在一個特定的RAIN實施例中,每個節(jié)點是IU服務(wù)器,其具有標(biāo)準(zhǔn)以太網(wǎng)聯(lián)網(wǎng)的大約1兆兆字節(jié)(terabyte)的串口ATA磁盤存儲容量。每個節(jié)點可以利用基于IP的LAN(局域網(wǎng))、MAN(城域網(wǎng))或WAN(廣域網(wǎng))物理地互連。在一個實施例中,利用可從德克薩斯州的奧斯丁的Caringo公司獲得的CAMor內(nèi)容存儲軟件以及任何適當(dāng)?shù)挠嬎銠C(jī)硬件來實現(xiàn)存儲集群20。在該實施例中,一般地,計算機(jī)節(jié)點M用作在存儲數(shù)字對象的節(jié)點22J6和觀之間進(jìn)行路由通信的路由器。在該實施例中,存儲集群20是固定內(nèi)容存儲器,并且每個數(shù)字對象通過隨機(jī)的數(shù)字(通用唯一標(biāo)識符,或者稱作UUID)在集群內(nèi)被唯一地編址,所述隨機(jī)的數(shù)字是利用隨機(jī)數(shù)字生成器對該數(shù)字對象生成的。每個數(shù)字對象的內(nèi)容利用散列函數(shù)進(jìn)行驗證。軟件應(yīng)用在將數(shù)字對象存儲在集群中時接收UUID,并通過將該UUID提供給集群而檢索該數(shù)字對象。軟件應(yīng)用利用標(biāo)準(zhǔn)HTTP1.1、更具體地是利用標(biāo)準(zhǔn)的稱為簡單內(nèi)容存儲協(xié)議(SCSP)的簡化子集與CAMor集群進(jìn)行通信(例如,通過通信鏈路72和74)。利用該標(biāo)準(zhǔn)接口,諸如電子郵箱、企業(yè)內(nèi)容管理、健康護(hù)理應(yīng)用、Web2.O等的應(yīng)用可以訪問CAMor存儲集群。另外,直接HTPP訪問對瀏覽器、JAVA、Python、C++以及其他軟件環(huán)境是可用的。通過內(nèi)容文件服務(wù)器(CFS)軟件產(chǎn)品可以獲得對存儲集群的標(biāo)準(zhǔn)文件訪問,內(nèi)容文件服務(wù)器(ere)軟件產(chǎn)品同樣可以從Caringo公司獲得。CFS是支持諸如CIFS、NFS、FTP、WebDAV、Macintosh、Linux等的所有主要文件協(xié)議的Linux文件系統(tǒng)。利用HTTP1.1,CFS在向存儲集群存儲和檢索計算機(jī)文件時支持這些標(biāo)準(zhǔn)文件協(xié)議。在另一實施例中,利用可從EMC公司獲得的Centera硬件和軟件來實現(xiàn)存儲集群20。在該實施例中,存儲集群20是固定內(nèi)容、內(nèi)容可尋址的存儲器,并且每個數(shù)字對象由通過散列值(通用唯一標(biāo)識符,或者稱作UUID)在集群內(nèi)被唯一地編址,所述散列值是利用散列函數(shù)對該數(shù)字對象計算的。軟件應(yīng)用在將數(shù)字對象存儲在集群中時接收UUID,并通過將該UUID提供給集群而檢索該數(shù)字對象。計算機(jī)30、40和50中常駐(host)使用名稱空間服務(wù)器60來訪問存儲集群20的客戶端應(yīng)用或服務(wù)器軟件。當(dāng)然,如果需要,計算機(jī)40和50也可以在不使用名稱空間服務(wù)器60的情況下訪問存儲集群20。在本示例中,計算機(jī)50上的軟件客戶端使用名稱空間服務(wù)器60上可用的名稱空間,以將數(shù)字對象存儲在存儲集群20內(nèi)、管理該數(shù)字對象、并利用該客戶端應(yīng)用所喜歡的路徑名稱方案來檢索該數(shù)字對象。可替代地,計算機(jī)40上的客戶端應(yīng)用使用計算機(jī)30上的服務(wù)器應(yīng)用,以與名稱空間服務(wù)器60進(jìn)行交互以便數(shù)字對象存儲、管理和檢索。當(dāng)然,客戶端應(yīng)用可以在名稱空間所運(yùn)行的同一個物理計算機(jī)上運(yùn)行。圖2示出了名稱空間環(huán)境的替代視圖100。概念性示出的是固定內(nèi)容存儲集群20,其可以利用任何適當(dāng)?shù)挠布蛙浖韺崿F(xiàn)。優(yōu)選地,集群20存儲數(shù)字對象并返回唯一的標(biāo)識符或通用唯一標(biāo)識符,并在這種標(biāo)識符被呈現(xiàn)給它時檢索該數(shù)字對象。軟件應(yīng)用110、120和130在任何適當(dāng)?shù)挠嬎銠C(jī)(例如計算機(jī)30-50中的一個或多個)上運(yùn)行,并利用任何適當(dāng)?shù)耐ㄐ沛溌放c集群20通信??蛻舳藨?yīng)用110和130是任何適當(dāng)?shù)能浖?yīng)用,其設(shè)計成通過使用名稱空間160來存儲、管理和檢索集群20中的數(shù)字對象。客戶端應(yīng)用110使用軟件應(yīng)用120與名稱空間160交互,并且客戶端應(yīng)用110是諸如文件系統(tǒng)的任何適當(dāng)?shù)目蛻舳塑浖T诒緦嵤├?,?yīng)用120是可以從Caringo公司獲得的內(nèi)容文件服務(wù)器軟件。應(yīng)用120包括SCSP接口124、FUSE開源軟件模塊122和將在下面描述的名稱空間API162??蛻舳藨?yīng)用130也包括名稱空間API162并與名稱空間160直接通信。應(yīng)用130是諸如字處理、電子郵件、用戶應(yīng)用等的任何適當(dāng)?shù)能浖?yīng)用。名稱空間160是在名稱空間服務(wù)器160上執(zhí)行的軟件模塊,并且包括綁定表180、屬性表190以及用符號表示的名稱圖形170。名稱圖形170不是以圖形方式表示在名稱空間內(nèi),而是借助于綁定表180而存在;下面將使用各種名稱圖形來解釋本發(fā)明。普通名稱空間用最簡單的術(shù)語,名稱空間是符號名稱(字符串)到對象的映射。嚴(yán)格地來說,名稱空間本身并不涉及對象自身的結(jié)構(gòu)、類型或其他屬性,而僅涉及對象的基本身份,該基本身份表示為對象ID(或序列號)。名稱空間所要求的全部就是,名稱空間中的每個獨(dú)特的對象都具有其自己的對象ID。通常,給定的對象剛好具有一個對象ID,盡管該對象可以具有多個指代它的名稱綁定(namebinding)。除了根之外,名稱空間中的每個簡單的名稱都在某一對象的上下文中來理解。每個對象可用作對于附加名稱的命名上下文,并且給定上下文內(nèi)的所有名稱限制為彼此不同。名稱空間在邏輯上是三元組(對象1,名稱,對象2),這意味著在對象1的上下文中,給定的名稱指代對象2。這被稱作名稱綁定。一種使名稱空間中的名稱映射的全體形象化的方式是將它們想成有向圖。最簡單的可能的名稱空間是兩個不同的對象之間的命名關(guān)系。當(dāng)看成有向圖時,可能看起來像圖3—樣。該圖是以下含義的圖形化表示在對象ul的上下文中,名稱“A”指代對象u2。對象可以具有用于多個其他對象的名稱,如圖4所示。并且,這些對象可以具有用于其他對象的名稱,如圖5所示。名稱空間圖形中的節(jié)點稱作“對象”,并且如前面所提及的,邊(edge)稱作“名稱綁定”,或者簡單地稱作“綁定”。這在一開始看起來像傳統(tǒng)的文件系統(tǒng)目錄分級,并且這確實是名稱空間的最重要的應(yīng)用,允許文件系統(tǒng)存儲和解析文件路徑名稱。然而,注意到文件系統(tǒng)目錄結(jié)構(gòu)并不是嚴(yán)格分級的。如圖6所示,存在允許同一個對象具有兩個或更多個名稱的硬鏈接和軟鏈接。在該名稱空間內(nèi),對象u4在u3的上下文中命名為“C”,但是在u6的上下文中卻命名為“A”。注意到,各個名稱(例如,“A”)不需要在整個名稱空間上是獨(dú)特的。在一個上下文內(nèi),所有的名稱是不同的。在名稱空間內(nèi),如在文件系統(tǒng)內(nèi),在圖形中甚至允許循環(huán)。例如,對象ul具有用于自身的名稱“.”,并且u5將其根源稱為聯(lián)想起Unix慣例(convention)的“..”,如圖7所示。名稱空間具有單個的、獨(dú)特的根節(jié)點,所有不合格的名稱都被從該節(jié)點解析。這連同某種語法分隔符一起允許使用完全合格的路徑名稱來識別名稱空間圖形中的任何對象。假定ul是圖7的上述圖形中的根節(jié)點,并且“/”是分隔符,則下面的路徑名稱將以如下形式解析:B/D=>u5;B/C=>u4;C/A=>u4;·/·/·/B/D/··/C=>u4。不同的客戶端應(yīng)用可以使用名稱空間圖形的不同部分。例如,文件系統(tǒng)的實現(xiàn)可以安裝在“filesystems/linux/appl”或“filesystems/windows/app2”處開始的文件系統(tǒng)。名稱空間應(yīng)用編程接口可以由一個或多個計算機(jī)服務(wù)器以允許被多個客戶端應(yīng)用并發(fā)訪問的形式來實現(xiàn)名稱空間。為了方便客戶端應(yīng)用,提供名稱空間鎖(見下文)。然而,這些鎖對于名稱空間本身完全是可選的,因為上面列出的原始名稱空間操作中的每一個都一直保持總名稱空間的ACID屬性(原子性、一致性、隔離和耐久性)。在下面的API定義中,應(yīng)當(dāng)理解,所有的路徑參數(shù)都是完全合格的路徑名稱,其源自名稱空間的根節(jié)點。簡單的名稱是給定上下文中的對象的名稱。通過使用沿著路徑的各種上下文分隔符(separator)和路徑目錄(pathdir),由簡單的名稱構(gòu)建路徑名稱。下面的原子(atomic)函數(shù)通過名稱空間來執(zhí)行。API寫入操作namespace(name[,separator][,pathdir])該函數(shù)構(gòu)建了新的名稱空間和稱為名稱的根節(jié)點。在進(jìn)行解析以及構(gòu)建路徑名稱時,可以缺省的形式使用可選的參數(shù)“S印arator”和“pathdir”。(參見下文對路徑名稱的描述。)如果沒有提供分隔符或路徑遍歷(traversal)方向參數(shù),則名稱空間將默認(rèn)使用分隔符“/”和路徑遍歷方向“向左”。bind(contextPath,name[,separator][,pathdir])該函數(shù)在給定上下文中創(chuàng)建新的名稱綁定。如果contextPath不存在,(contextPath,name)對已經(jīng)存在于當(dāng)前時間柱身(timescape)中,或者如果名稱含有用于該上下文的分隔符,該函數(shù)失敗。unbind(path)該函數(shù)刪除當(dāng)前時間柱身中的名稱綁定。如果path不存在,則該函數(shù)失敗。alias(path,contextPath,name)該函數(shù)將綁定拷貝成一個新的。任一個的進(jìn)一步改變是完全獨(dú)立的。如果源路徑不存在、上下文不存在、名稱已經(jīng)存在于上下文中、該名稱含有用于該上下文的分隔符、或者如果源路徑和目標(biāo)路徑處于不同的名稱空間中,則該函數(shù)失敗。link(path,contextPath,name)該函數(shù)創(chuàng)建到已有對象的鏈接。其具有與Unix硬鏈接相同的語法。對任何鏈接的任何將來的修改(例如,函數(shù)setAttributes)也將適用于所有的鏈接。如果源路徑不存在、上下文不存在、名稱已經(jīng)存在于上下文中、該名稱含有用于該上下文的分隔符、或者如果源路徑和目標(biāo)路徑處于不同的名稱空間中,則該函數(shù)失敗。rebind(path,contextPath,name)該函數(shù)對已有的名稱綁定重新命名(移動)。這本質(zhì)上是源路徑被解除綁定(unbind)之前的鏈接。歷史在重新綁定過程中被保持。如果源路徑不存在、上下文不存在、名稱已經(jīng)存在于上下文中、該名稱含有用于該上下文的分隔符、或者如果源路徑和目標(biāo)路徑處于不同的名稱空間中,則該函數(shù)失敗。setAttribute(path,key,value[,collectable])該函數(shù)設(shè)置或創(chuàng)建用于綁定的屬性鍵/值對。如果可選的布爾參數(shù)“collectable”為真(默認(rèn)為假),則垃圾收集器將通知應(yīng)用何時這些屬性不再是可訪問的11(見下面的論述)。如果路徑不存在,則該函數(shù)失敗。setAttributes(path,pairs)該函數(shù)設(shè)置或創(chuàng)建用于綁定的多個屬性鍵/值對。如果路徑(path)不存在,則該函數(shù)失敗。deleteAttributes(path,key)如果屬性鍵/值對存在的話,則該函數(shù)從綁定中刪除該屬性鍵/值對。如果路徑(path)不存在,則該函數(shù)失敗。API讀操作resolve(path)[,timescape])=>Boolean該函數(shù)解析路徑名稱并返回其是否存在于該timescape(時間柱身)中。“timescape”參數(shù)是可選的,并且如果省略的話,將通過搜索在當(dāng)前時間活動的所有綁定來解析路徑名稱。也就是說,解析函數(shù)對當(dāng)前的時間柱身是默認(rèn)的。另一方面,如果向timescape參數(shù)提供過去的日期/時間值,那么路徑解析將在給定的日期和時間處發(fā)生,并且僅在給定的路徑存在于過去的該時刻的情況下,該函數(shù)才將返回真。list(path[,timescape][,offset][,limit]=>{names}該函數(shù)返回上下文中的所有名稱綁定。從語法意義上,這意味著返回前綴是“path”的所有簡單名稱。如果使用“timescape”參數(shù),那么所返回的名稱是在給定的日期和時間存在的名稱??蛇x的參數(shù)“offset”和“l(fā)imit”用來訪問可管理的“塊”中可能的大的名稱列表。例如,如果offset=1000并且limit=100,那么程序?qū)⒎祷匾缘?000個開始的多達(dá)100個名稱。如果路徑不存在,則該函數(shù)將失效。history(path[,timescape])=>{changes}該函數(shù)返回在該時間柱身(timescape)中由路徑(path)命名的對象的修改歷史。歷史總是完整的歷史,所以其通常包括在時間柱身(timescape)之前和之后進(jìn)行的修改(如果有修改的話)。可選的參數(shù)“offset”和“l(fā)imit”是如上所述的那樣。如果路徑(path)不存在,則該函數(shù)失敗。getAttribute(path,key[,timescape])=>{value}該函數(shù)返回該時間柱身(timescape)中用于給定路徑(path)的給定鍵的屬性值。getAttribute(path[,prefix][,timescape][,offset][,limit])=>{pairs}該函數(shù)返回該時間柱身(timescape)中給定路徑(path)的所有屬性。如果提供了prefix字符串,則僅僅將其鍵以該前綴開始的那些屬性返回。可選的參數(shù)offset和limit如上所述。getAttributeKeys(path[,timescape][,offset][,limit])=>{keys}該函數(shù)返回該時間柱身(timescape)中給定路徑(path)的所有屬性的鍵??蛇x的參數(shù)offset和limit如上所述。getLinkCount(path,[,timescape]=>count該函數(shù)返回該時間柱身(timescape)中由路徑(path)命名的對象的鏈接的數(shù)量。如果路徑(path)不存在,則該函數(shù)失敗。API鎖定操作Lock(path,type,pid,timeout)該函數(shù)需要由路徑(path)指定的名稱上的名稱空間鎖。type和pid參數(shù)可以是任何字符串。它們旨在表示鎖定類型(例如,“寫”)和獲取器的過程識別。如果鎖沒有被明確地因超時的秒數(shù)而釋放,名稱空間將自動地過期(釋放)鎖定。如果鎖已經(jīng)存在并且Pid為同一個,則可以調(diào)整超時(timeout)值(如果期望的話,可以進(jìn)行處理以改變其自己的鎖定的到期時間)。如果路徑(path)不存在或者在路徑(path)上存在相同類型(type)但是具有不同Pid的已有的鎖,則該函數(shù)失敗。unlock(path,type,pid)該函數(shù)釋放由路徑(path)所指定的名稱上的名稱空間鎖。如果路徑(path)不存在、不存在具有給定路徑(path)和類型的已有的鎖、或者如果鎖屬于不同的pid,那么該函數(shù)失敗。API垃圾收集garbage(namespace[,timescape][,offset][,limit]=>{pairs}該函數(shù)返回在過去、當(dāng)前或?qū)聿辉倌軌蚪?jīng)由名稱空間(namespace)中的任何名稱訪問的可收集屬性(見上文關(guān)于setAttribute的論述)鍵/值對的列表??蛇x的參數(shù)offset和limit如上所述。如果名稱空間(namespace)不存在,則該函數(shù)失敗。名稱空間普通示例為了進(jìn)一步示出上面的名稱綁定方法的預(yù)期的語法,這里示出了名稱空間調(diào)用的序列以及由其產(chǎn)生的名稱圖形變形。圖8示出了利用命令(call):namespace(“file”),創(chuàng)建新的名稱空間及其根節(jié)點ο圖9示出了利用命令:bind(“file”,“home”,“/”,“l(fā)eft”)在根上下文中創(chuàng)建名稱為“home(出發(fā)點)”的新的節(jié)點。圖10示出了利用命令:bind(("file:home","jim")),bind((“file:home,,,“l(fā)aura”))以及bind((“fiIe:home/jim”,“foo.txt”)),創(chuàng)建三個新的節(jié)點。圖11示出了利用命令alias(("file:home/jim","foo.txt")),("file:home/laura","bar.txt”)),,生成u5的別名。圖12示出了利用命令:rebind("file:home/jim/foo.txt”,“file:home/laura,,,"foo.txt”)),將“foo.txt”重命名(移動)到Laura的上下文。圖13示出了利用命令=Unbind("file:home/laura/bar.txt,,),刪除‘‘bar.txt,,名稱綁定。日期功效在上面的名稱空間寫操作部分中列出的所有操作都在名稱空間的當(dāng)前狀態(tài)(“當(dāng)前時間柱身”)上運(yùn)行,名稱空間讀操作的默認(rèn)變型也是如此。當(dāng)對名稱空間進(jìn)行修改時,每個名稱綁定的狀態(tài)在被以修改日期和時間(“終止日期”)進(jìn)行時間標(biāo)記之后,被保存。讀操作也可以被給定時間柱身參數(shù)、過去的日期/時間值,以便一旦名稱綁定出現(xiàn)便訪問關(guān)于它們的信息。每個名稱綁定都具有開始日期,并且可能還具有終止日期,該開始日期是綁定首次變?yōu)橛行У娜掌诤蜁r間,該終止日期是綁定被改變或刪除的日期和時間。例如,假設(shè)在時間tl,在對象Ul的上下文中創(chuàng)建用于“green(綠)”的新的名稱綁定。就其而言,該名稱綁定可能看起來是13(ul,"green,,,u2,start=tl)任何改變綁定的名稱空間操作都將產(chǎn)生其一份新的拷貝,并填寫該拷貝的終止日期,從而制成舊的綁定的歷史記錄。例如,假設(shè)上述綁定在時間t2被利用bind("green",u3)更新。將產(chǎn)生新的綁定,并且原始的綁定將如bind()操作中所指示地那樣被修改。結(jié)果產(chǎn)生兩個綁定,一個是當(dāng)前的,一個是歷史的。(ul,"green,,,u2,start=tl,end=t2)(ul,"green",u3,start=t2)此時,假設(shè)在時間t3利用rebincK"green","blue")進(jìn)一步修改新的綁定,以改變其名稱。第二歷史綁定將被創(chuàng)建,以記錄該事件,并且原始的綁定將因操作命令再次被修改。(ul,"green,,,u2,start=tl,end=t2)(ul,"green,,,u3,start=t2,end=t3)(ul,"green",u3,start=t3)優(yōu)選的是,歷史綁定是原始綁定的拷貝,而原始綁定根據(jù)名稱空間操作被修改。該技術(shù)允許我們產(chǎn)生名稱綁定的修改歷史(見下面)。如果可選的‘‘datatime(日期時間)”參數(shù)被包括,則諸如IistO的名稱空間讀操作能夠獲取關(guān)于歷史名稱綁定的信息。例如,命令list(“h0me/jim”,datetime=1)將使源自start彡t并且end<t的home/jim的所有名稱綁定返回。已經(jīng)被“end-dated(標(biāo)記終止日期)”的歷史綁定將被名稱空間保留一段可配置的時期,然后它們將被利用垃圾收集而永久地刪除。實際上,利用該機(jī)制在時間上追溯回去是可能的,但是僅僅能到特定的點。修改歷史除了能夠在名稱綁定存在于過去時看到名稱綁定之外,還必須看到對名稱進(jìn)行的所有改變,例如,恢復(fù)已經(jīng)被更新若干次并從一個子目錄移動到另一個子目錄的文檔的先前修訂。history()方法能夠做到這一點。當(dāng)利用create()、alias()、或link()創(chuàng)建新的名稱綁定時,唯一的綁定身份被分配給該名稱綁定,該綁定身份被稱為“綁定唯一標(biāo)識符”或buid。隨后利用bindO(更新)、rebindO(重新命名)、unbind()(刪除)、或setAttributesO對名稱綁定進(jìn)行的改變將使綁定保留原始buid,同時新的、標(biāo)記終止日期的、歷史的綁定也將使用同樣的buid。historyO方法簡單地返回過去、當(dāng)前、或?qū)砼c給定的名稱具有相同buid的所有綁定。名稱空間鎖定嚴(yán)格地來說,名稱空間不需要鎖定機(jī)制,以便確保名稱綁定的一致性,因為所有的操作都是原子的和無狀態(tài)的。然而,名稱空間提供普通的鎖定機(jī)制以支持客戶端應(yīng)用(特別是CFS應(yīng)用),這些客戶端應(yīng)用確實出于某些目的而需要鎖定名稱綁定,例如,為了執(zhí)行寫鎖定,以使兩個過程不能夠同時使同一個文件打開以進(jìn)行寫入。名稱空間本身并不給這些鎖分配任何含義,即,所有的名稱空間操作始終是對任何客戶可用的。鎖定語法和加強(qiáng)嚴(yán)格地是名稱空間的客戶端應(yīng)用之間的自愿合作的問題。名稱空間的具體示例圖14-16示出了名稱空間內(nèi)的名稱圖形及其表示的簡單、具體的示例。圖14示出了簡單的名稱圖形310,其包括四個對象根1和對象2、3和4。名稱A、B、X和Y將這些對象鏈接起來并提供通向?qū)ο?的兩條路徑(假設(shè)分隔符“/”被使用)路徑/B/X,和路徑/A/Y。這種簡單的名稱圖形表示例如用于同一計算機(jī)文件的兩個不同的文件名稱,即/B/X和/A/Y。假設(shè)對象4包括是用于計算機(jī)文件的通用唯一標(biāo)識符的屬性,那么可以通過遍歷名稱圖形(沿任一方向)、從對象4取回UUID以及然后將UUID傳遞給存儲集群而從存儲集群20中檢索計算機(jī)文件。名稱圖形中的每個對象被分配唯一的序列號,例如數(shù)字1-4。這些序列號由名稱空間分配并且僅在內(nèi)部使用。盡管名稱空間可以包括除了在唯一的根之外未彼此連接的多個不同的名稱圖形,但是序列號在整個名稱空間內(nèi)是唯一的。圖15示出了存在于名稱空間160內(nèi)的綁定表320。綁定表是通過其來表示和遍歷名稱圖形及其對象的裝置;綁定表320通過在每行中列出綁定來實現(xiàn)名稱圖形310。列322包括對象的序列號,并且提供對于該綁定的上下文。列3M是分配給綁定的名稱。列3是被應(yīng)用該名稱的對象的序列號。列3是綁定首次被創(chuàng)建的開始日期和時間。列330是綁定被刪除的終止日期和時間。向下近似到秒地計算并存儲開始時間和終止時間。當(dāng)然,取決于CPU和所涉及的操作系統(tǒng),如果需要,以細(xì)分得多的粒度計算和存儲時間是可能的,例如十分之一秒或百分之一秒。以這種方式,為了提供自動連續(xù)備份功能,名稱空間、其對象、以及最終由名稱空間表示的數(shù)字對象的狀態(tài)的連續(xù)記錄可以被維護(hù)并且被查閱。列332指代整個路徑名稱的上下文中的名稱所使用的路徑遍歷方向。例如,文件系統(tǒng)路徑名稱通常是一致的,因為隨著名稱從左遍歷到右,計算機(jī)文件的位置變的更具體(例如,“出發(fā)點(home)”之后是“文檔(documents)”,“文檔(documents)”之后是"brochure,pdf”)。隨著名稱從右遍歷到左,其他路徑名稱方案變的更具體,例如johndoeOcompanyX.com。并且,諸如URL的一些路徑名稱組合兩者的位。因此,綁定表中的每個綁定行的“方向”區(qū)域允許名稱空間指定“名稱”在哪個方向上變的更具體。例如,在名稱空間中所表示的典型的文件名稱將都具有“左”方向,因為它們在從左遍歷到右時變的更具體。相反,電子郵件地址將具有“右”方向。諸如URL的指代數(shù)字對象的路徑名稱可以具有“左”和“右”兩者的綁定的組合。列334指示在特定路徑名稱方案中的名稱之間使用的分隔符。例如,蘋果文件名稱一般使用“/”作為用于計算機(jī)文件的路徑名稱中的名稱之間的分隔符。其他常用的分隔符是在Windows文件系統(tǒng)中使用的“\”,在某些蘋果Macintosh文件系統(tǒng)中使用的“”,在IP地址中使用并用來描繪頂級域名的“.”,在電子郵件地址中使用的“@”,用來使電話號碼部分分開的“-”,以及其他分隔符。綁定行中的分隔符指的是緊鄰在數(shù)字對象的路徑名稱中的名稱前面或緊鄰在該名稱后面所使用的分隔符,這取決于分隔符的方向。在綁定表中不存在另外的相關(guān)信息。綁定表320的第一行表示綁定(bind)函數(shù)已經(jīng)被用來利用名稱“Α”將對象1綁定于對象2。綁定在特定的日期于上午8點34分16秒創(chuàng)建。盡管為了方便說明沒有將日期顯示在該列中,但是一般地,列3包括日期和向下幾乎到秒的時間。如果當(dāng)綁定(bind)函數(shù)被調(diào)用時對象2不存在,那么在該時創(chuàng)建對象。第二和第三行示出了對綁定(bind)的相似調(diào)用的結(jié)果。第四行示出了將對象2鏈接到預(yù)先存在的對象4的鏈接函數(shù)命令的結(jié)果。用于“終止日期”列的值被設(shè)置為將來的遙遠(yuǎn)時間(例如4,000年),以表示綁定仍然存在。因此,能夠看到隨著對象和鏈接被添加到名稱空間,綁定表中的行對于特定的名稱空間而被建立起來。如將在下面解釋的,客戶端應(yīng)用然后可以通過引用綁定表中自己的綁定使用已有的名稱圖形,以利用大量不同路徑名稱方案中的任一種來從存儲集群20中檢索數(shù)字對象。圖16示出了同樣存在于名稱空間160內(nèi)的屬性表360。由于綁定表僅僅是表示名稱圖形的一行接一行的綁定,所以屬性表只是一行接一行的屬性。每個行識別名稱圖形中的特定對象的特定屬性,并且提供值。例如,第一行表示對象4包括UUID并且用于該標(biāo)識符的值是“F84B91CD”,該值是十六進(jìn)制數(shù),其表示識別唯一地位于存儲集群20內(nèi)的數(shù)字對象的隨機(jī)數(shù)。當(dāng)然,用于識別存儲集群中的數(shù)字對象的對象的唯一標(biāo)識符可以具有適于存儲集群的執(zhí)行的任何值。例如,該唯一的標(biāo)識符可以是對于數(shù)字對象而隨機(jī)生成的數(shù),可以是由應(yīng)用于數(shù)字對象的內(nèi)容的散列函數(shù)產(chǎn)生的散列值,或者可以是由中央機(jī)構(gòu)(centralauthority)分配的某種其他的唯一標(biāo)識符。后者的例子包括國際電話號碼、使用IPv4或IPv6的IP地址、完全合格的域地址、緯度/經(jīng)度位置、笛卡爾和其他坐標(biāo)系統(tǒng)中的坐標(biāo)、以及很多其他的標(biāo)識符。在當(dāng)前的實施例中,UUID所命名的屬性是CAMor軟件使用的通用唯一標(biāo)識符,并且其值是隨機(jī)生成的具有1位的數(shù)字。第二行指示對象4具有稱為“模式”的屬性,并且其值是存儲在表的行366中的值。諸如“用戶標(biāo)識符”和“組標(biāo)識符”的其他屬性可用來存儲關(guān)于數(shù)字對象的任意元數(shù)據(jù)。與綁定表一樣,屬性表提供對于每個對象的每個屬性的開始日期和終止日期。這些日期允許與上面對于綁定所描述的相同的時間柱身功能。特別地,名稱空間能夠提供完整的一組屬性以及在過去的某一任意日期它們對于任何數(shù)字對象的值。對象的屬性由客戶端應(yīng)用確定,并且任何屬性和值都可以根據(jù)客戶端應(yīng)用的需要而存儲。例如,屬性可以表示與存儲集群20中的數(shù)字對象相關(guān)聯(lián)的元數(shù)據(jù)。如圖16所示,有用的屬性是允許客戶端應(yīng)用從存儲集群檢索數(shù)字對象的通用的唯一標(biāo)識符。名稱空間的語法一般性本發(fā)明的一個實施例將數(shù)字對象存儲在存儲集群中,并創(chuàng)建名稱空間中的表示,該表示考慮了客戶端應(yīng)用所使用的優(yōu)選路徑名稱方案。如上所述,客戶端應(yīng)用使用多種路徑名稱方案用于指代數(shù)字對象。URL典型地是“www.company,com/folder/blue”的形式(概括為該路徑內(nèi)的不同方向的具體流)。URI是“ftp//”或“fiIe//home/Fred/file,txt,,的形式。IP地址具有“192.168.1.1”的形式。蘋果計算機(jī)具有“homegreen:blue”的形式的文件名,而運(yùn)行Microsoft操作系統(tǒng)的計算機(jī)具有“\home\green\blue”的形式的文件名。因此,路徑名稱方案是不同的,因為它們使用不同的語法,但是是相似的,因為它們使用特定的分隔符來將路徑名稱內(nèi)的名稱分開,并且從一般到具體、從具體到一般始終一致地前進(jìn),或者使用兩者可預(yù)測的混合。因此,本發(fā)明表示名稱空間內(nèi)的這些名稱、分隔符以及特異性(specificity)的方向,以允許語法一般性。換句話說,任何客戶端應(yīng)用,無論其使用哪個路徑名稱方案,都將被允許使用完全不同的路徑名稱方案存儲、管理和檢索另一個客戶端應(yīng)用所參考的同一個數(shù)字對象。圖17是在解釋下面的流程圖中使用的示例性名稱圖形410。如圖所示,該圖形包括經(jīng)由對象1、2、3和4的第一路徑和經(jīng)由對象1、5、6和4的第二路徑。兩個路徑都終止在對象4處,對象4優(yōu)選包括保持用于存儲集群20中的特定數(shù)字對象的通用獨(dú)特標(biāo)識符的屬性。在本示例中,數(shù)字對象是保持用于個人John的配置信息的文件“myemail.txt”。第一路徑表示例如特定文件的Unix路徑名稱,而第二個路徑表示典型的電子郵件地址路徑名稱。一個或多個客戶端應(yīng)用可以希望使用不同的路徑名稱存儲或訪問文件。圖18是描繪利用該示例創(chuàng)建一部分名稱圖形的流程圖。在步驟422中,任何適當(dāng)?shù)目蛻舳藨?yīng)用(例如,客戶端應(yīng)用110)使用內(nèi)容文件服務(wù)器(ContentFileServer)應(yīng)用120以便在名稱空間服務(wù)器60上創(chuàng)建名稱空間。當(dāng)然,客戶端應(yīng)用可以代替使用CFS而直接訪問名稱空間服務(wù)器。根對象1被創(chuàng)建;此時,綁定表和屬性表兩者都是空白的。創(chuàng)建名稱空間命令也可以在名稱空間模塊安裝在名稱空間服務(wù)器上時由安裝者啟動。在步驟4中,客戶端應(yīng)用請求CFS將新的文件存儲在存儲集群中并將其表示存儲在名稱空間中。在本示例中,文件的路徑名稱是“home/John/myemail,txt”。優(yōu)選地,客戶端應(yīng)用解析整個路徑名稱,以將路徑名稱的每個部分(以增加特異性的方式)、每個名稱前面的分隔符以及要存儲的計算機(jī)文件的實際內(nèi)容提供給CFS。在步驟430中,CFS(或者在直接訪問名稱空間的情況下是客戶端應(yīng)用)利用綁定(bind)函數(shù)和第一名稱“home”、以及適當(dāng)?shù)姆指舴头较蛘{(diào)用名稱空間,以創(chuàng)建綁定452。此時還創(chuàng)建新的對象2。作為響應(yīng),名稱空間創(chuàng)建綁定表中的行,以表示該新的綁定。類似地,步驟434和438利用名稱“John”和"myemial.txt”調(diào)用bind函數(shù),以分別創(chuàng)建對象3和4以及綁定妨4和456。此時,已經(jīng)利用對象1、2、3和4創(chuàng)建了名稱圖形,其中對象4唯一地表示數(shù)字對象“myemail.txt”。接下來,步驟442將該文件寫入存儲集群中,并且存儲集群返回唯一標(biāo)識符或通用唯一標(biāo)識符。最后,在步驟446中,CFS創(chuàng)建屬性“UUID”(例如),并將該屬性設(shè)為等于所返回的用于名稱空間410中的對象4的唯一標(biāo)識符。如前面所提及的,客戶端應(yīng)用可以對任何對象創(chuàng)建任何適當(dāng)?shù)膶傩裕M管這些屬性都不是所需要的。結(jié)果,名稱空間此時向?qū)ο?提供使用特定路徑名稱方案的路徑,其中對象4保持用于存儲在存儲集群20中的計算機(jī)文件的唯一標(biāo)識符。圖19是流程圖,描繪了使用不同路徑名稱方案創(chuàng)建到同一對象4的另一路徑。在本示例中,使用不同的路徑名稱方案的不同客戶端應(yīng)用(如客戶端應(yīng)用130)希望訪問先前已經(jīng)存儲在集群中并表示在名稱空間中的同一計算機(jī)文件“home/John/myemail.txt”。在步驟462中,客戶端應(yīng)用130請求名稱空間使用路徑名稱“JohnOcompany.com"創(chuàng)建新的路徑,然后該路徑名稱在步驟474中被鏈接到已經(jīng)存在的對象。名稱空間鏈接函數(shù)將新形成的路徑名稱“JohnOcompany.com”鏈接到當(dāng)前由路徑“home/John/myemail,txt”命名的完全相同的對象,該對象在本示例中為對象4。名稱空間鏈接在構(gòu)造和使用方面與Unix類文件系統(tǒng)中的“硬鏈接”相似。優(yōu)選地,客戶端應(yīng)用解析整個路徑名稱,以將路徑名稱的每個部分(以增加的特異性方式)和每個名稱前面的分隔符提供給名稱空間。在本示例中,客戶端應(yīng)用解析路徑名稱以獲得如下的增加的特異性的名稱“c0m”、“C0mpany”、和“John”。在步驟466中,客戶端應(yīng)用利用綁定(bind)函數(shù)和第一名稱“com”以及適當(dāng)?shù)姆指舴头较蛘{(diào)用名稱空間,以創(chuàng)建綁定482。新的對象5也在此時創(chuàng)建。作為響應(yīng),名稱空間創(chuàng)建綁定表中的行,以表示該新的綁定。類似地,步驟470利用名稱“company”調(diào)用綁定(bind)函數(shù),以創(chuàng)建對象6和綁定484。接下來,客戶端應(yīng)用調(diào)用鏈接(link)函數(shù)以創(chuàng)建綁定486,該鏈接(link)函數(shù)作為自變量穿過到對象4的已有路徑、到對象6的當(dāng)前路徑、以及名稱“John”。此時,已經(jīng)利用對象1、5、6和4創(chuàng)建了新的路徑;對象4仍借助保持屬性UUID及其值的該對象來唯一地表示數(shù)字對象“myemial.txt”。因此,兩個不同的客戶端應(yīng)用此時各自具有通向名稱空間內(nèi)的同一對象的使用不同路徑名稱方案的不同路徑。該對象4保持屬性UUID,屬性UUID提供用于存儲集群內(nèi)的數(shù)字對象的唯一標(biāo)識符。當(dāng)然,一旦已經(jīng)如上所述地構(gòu)建了名稱空間(并且一個或多個路徑名稱指向保持用于存儲集群中的特定文件的獨(dú)特唯一標(biāo)識符的特定對象),則任何客戶端應(yīng)用都能夠使用多種路徑名稱中的任何一個檢索該唯一的標(biāo)識符。一旦從名稱空間檢索到該獨(dú)特的標(biāo)識符,則其可以被用來訪問存儲集群中的特定數(shù)字對象。例如,希望檢索計算機(jī)文件"myemail.txt”的Unix客戶端應(yīng)用可以通過調(diào)用如下的名稱空間函數(shù)來做到這樣GetAttr(UUID,/home/John/myemail.txt)該“獲取屬性”函數(shù)將基于所提供的Unix風(fēng)格的路徑名稱返回通用的唯一標(biāo)識符。然后UUID可以被用來從存儲集群檢索計算機(jī)文件。為了執(zhí)行該函數(shù)調(diào)用,名稱空間接收Unix路徑名稱并沿著名稱圖形410的左手側(cè)向下行進(jìn)(利用綁定表中的信息),直至到達(dá)對象4。然后,其訪問用于對象4的屬性表,以檢索用于屬性名稱“UUID”的值。此時,考慮希望檢索同一計算機(jī)文件但是使用其自己的不同路徑名稱的電子郵件程序客戶端應(yīng)用。其將如下調(diào)用名稱空間函數(shù)GetAttr(UUID,Johnicompany.com)注意到,電子郵件程序被允許使用其自己的路徑名稱方案,但是最終結(jié)果是其將檢索到同一個通用唯一標(biāo)識符,并且然后將能夠從存儲集群檢索到完全相同的計算機(jī)文件。為了執(zhí)行該函數(shù)調(diào)用,名稱空間接收電子郵件路徑名稱并沿著名稱圖形410的右手側(cè)向下行進(jìn)(利用綁定表中的信息),直至到達(dá)對象4。然后,其訪問用于對象4的屬性表,以檢索屬性名稱“UUID”的值。圖20示出了表示URL型路徑名稱的名稱圖形的另一示例??紤]識別存儲在特定位置的特定文件的下面的URL:http://www.company,com/green/blue,pdf。該特定的路徑名稱方案并不一致地從左到右或從右到左地從一般流向具體;相反,流動在路徑名稱內(nèi)改變方向。希望存儲數(shù)字對象“blue,pdf”的客戶端應(yīng)用將對上述URL進(jìn)行解析,并對名稱空間函數(shù)bind進(jìn)行漸進(jìn)的調(diào)用,該函數(shù)隨著每次調(diào)用而經(jīng)過更多來自URL的具體名稱。因此,圖20象征性地示出了所生成的從最廣義的名稱“com”向下一直到最具體的“blue,pdf”的名稱空間的名稱圖形。綁定函數(shù)使用使用參數(shù)“S印arator”和“direction”來將該信息存儲在綁定表中。該信息然后在任何客戶端應(yīng)用希望檢索數(shù)字對象“blue,pdf”時從綁定表被使用。如上所述,客戶端應(yīng)用僅僅將URL"http://www.company,com/green/blue,pdf”傳遞到名稱空間,名稱空間然后使用綁定表以及方向和分隔符信息,以便遍歷該名稱圖形,到達(dá)對象6并檢索對應(yīng)于文件“blue,pdf”的UUID。因此,名稱空間能夠獲取客戶端應(yīng)用所使用的任何類型的整個路徑名稱,并且只要根據(jù)該路徑名稱方案的路徑之前已經(jīng)被表示在名稱空間中,則名稱空間將返回與任何特定對象相關(guān)聯(lián)的任何期望的屬性。在本示例中,客戶端應(yīng)用能夠使用其自己的路徑名稱方案,以指代存儲在存儲集群中的同一數(shù)字對象。在應(yīng)用之間共享的名稱空間如上所述,諸如客戶端應(yīng)用110-130的任何客戶端應(yīng)用都可以利用其自己的特定路徑名稱方案訪問名稱空間,并仍能確保每個路徑指代同一數(shù)字對象。在圖17的示例中,來自兩個不同的客戶端應(yīng)用的兩個不同路徑名稱都指向?qū)ο?,對象4保持例如具有識別存儲集群20內(nèi)的單個數(shù)字對象的通用唯一標(biāo)識符值的UUID的屬性。屬性表360保持用于所有對象的所有屬性,并且對任何希望讀或設(shè)置特定對象的屬性的客戶端應(yīng)用都是可訪問的,名稱空間及其對象和屬性在所有客戶端應(yīng)用之間基本上是共享的。改變用于特定對象的特定屬性的客戶端應(yīng)用將使該改變同樣可被任何其他客戶端應(yīng)用看到。在此處所使用的示例中,當(dāng)對象表示存儲集群中的數(shù)字對象時(例如,圖17的對象4保持用于存儲在存儲集群中的文件“myemail.txt”的UUID),這意味著數(shù)字對象和數(shù)字對象的改變(以及它們的元數(shù)據(jù))同樣在所有客戶端應(yīng)用之間共享。例如,如果一個客戶端應(yīng)用希望修改存儲在存儲集群中的計算機(jī)文件并且讓所有其他的客戶端應(yīng)用引用該修改的文件,則可以這樣做??蛻舳藨?yīng)用首先修改計算機(jī)文件,將其存儲在存儲集群中,接收新的UUID,然后執(zhí)行下面的名稱空間函數(shù)SetAttr(UUID,<path>,newUUID)。結(jié)果是,該設(shè)置屬性的函數(shù)將找到由“path”指定的特定對象(例如,經(jīng)由左手路徑名稱找到對象4),并且改變屬性UUID為新的UUID值。因此,引用對象4的任何其他客戶端應(yīng)用(例如,使用右手路徑名稱的客戶端應(yīng)用)都將在訪問UUID屬性時檢索該新的UUID值,并將能夠檢索存儲集群中的修改計算機(jī)文件。當(dāng)然,對特定對象改變的任何屬性都將被訪問該對象的客戶端應(yīng)用中的任何一個看到??蛻舳藨?yīng)用可以通過改變例如對象4的特定屬性來改變用于存儲在存儲集群中的特定數(shù)字對象的元數(shù)據(jù)。客戶端應(yīng)用可以改變的元數(shù)據(jù)的示例包括修改日期、允許、訪問控制列表、對象大小、關(guān)鍵詞等。名稱空間的連續(xù)備份特征如上所述,本發(fā)明的名稱空間的執(zhí)行導(dǎo)致實際上對存儲在存儲集群內(nèi)的數(shù)字對象的連續(xù)備份,以及對存儲在名稱空間的屬性表中的它們的相關(guān)屬性中任何一個的連續(xù)備份。當(dāng)然,存儲集群必須確保數(shù)字對象的所有版本都保留一段時期,在這段時期內(nèi)希望進(jìn)行連續(xù)的備份,并且名稱空間必須確保屬性及其值同樣在這段時期內(nèi)也被保留。名稱空間能夠利用特定函數(shù)調(diào)用與使用綁定表和屬性表的開始日期和終止日期字段的組合來實現(xiàn)連續(xù)備份特征。圖21是流程圖,描繪了可以如何刪除用于特定客戶端應(yīng)用的數(shù)字對象。考慮圖17的名稱圖形示例,假設(shè)個人“John”已經(jīng)離開了公司并且希望刪除他的數(shù)據(jù),包括存在于存儲集群內(nèi)的他的電子郵件配置文件“myemial.txt”。在步驟504中,適當(dāng)?shù)目蛻舳藨?yīng)用(如公司的電子郵件程序)確定引用該特定文件的路徑名稱是JohnOcompany.com(利用圖19的示例預(yù)先存儲的)??蛻舳藨?yīng)用然后確定名稱“John”應(yīng)當(dāng)從其當(dāng)前指向的任何對象中解除綁定。在實際中將對象4從名稱空間移除是并不適當(dāng)?shù)?,因為有可能另一個客戶端應(yīng)用正在使用不同的路徑名稱來引用該對象(在本示例中是真的)。并且,即使沒有其他的客戶端應(yīng)用涉及該對象,將對象4移除將導(dǎo)致指示配置文件“myemail.txt”在過去的特定時間實際存在過的信息丟失。接下來,在步驟508中,客戶端應(yīng)用利用unbind函數(shù)調(diào)用名稱空間,該unbind函數(shù)傳遞上下文、對象6、以及要移除“John”的綁定的名稱。為了表明文件已經(jīng)被“刪除”(至少就電子郵件程序而言),在步驟512中,名稱空間僅僅修改綁定表中的行,以提供綁定“John”的“終止日期”。例如,在刪除之前,綁定表中的行可能看起來是這樣“6John41/1/2009:08:36:004,000”。該行表示綁定486創(chuàng)建于2009年1月1日,且在創(chuàng)建時,其具有大約無限遠(yuǎn)的終止日期(為了清楚起見,已經(jīng)去掉了方向和分隔符字段)。假設(shè)客戶端應(yīng)用在該日的上午10點刪除配置文件,則綁定行在刪除之后將看起來如下“6John41/1/2009:08:36:001/1/2009:10:00:00”。注意到,所有所發(fā)生的是上午10點的終止日期已經(jīng)被提供給該綁定。該綁定實際上沒有從名稱空間中移除;對象4和配置文件分別繼續(xù)存在于名稱空間和存儲集群中。因此,具有到對象4(并因此到配置文件)的路徑任何客戶端應(yīng)用都將繼續(xù)這樣做。先前使用路徑名稱“JohnOcompany.com"的電子郵件程序?qū)⒉荒軌蛟L問配置文件,因為綁定486已經(jīng)通過在綁定表中提供終止日期而被有效地移除。當(dāng)訪問名稱空間中的對象和綁定時,名稱空間將假定當(dāng)前時間的時間,并將不會辨認(rèn)出當(dāng)前時間未落在開始日期和終止日期內(nèi)的任何綁定。例如,如果電子郵件程序試圖在2009年1月1日的上午11點訪問配置文件,那么這種訪問將失敗,因為上午11點是在用于該綁定的上午10點的終止日期時間之后。相比之下,電子郵件程序可以當(dāng)其在過去存在時訪問配置文件,只要其提供落在用于綁定486的開始日期和終止日期之間的過去時間參數(shù)即可。名稱空間簡單地將輸入時間參數(shù)與開始日期和終止日期作比較。默認(rèn)地,名稱空間假設(shè)該時間參數(shù)是當(dāng)前時間。當(dāng)然,如果電子郵件程序試圖通過提供2009年1月1日上午8點36分之前的時間來訪問在過去的配置文件,那么這種訪問也將失敗,因為名稱空間將確定所提供的在過去時間在用于該特定綁定的開始日期時間之前。注意到,在圖21的過程中,用于存儲在屬性表中的對象4的屬性不改變,因為僅僅是綁定486正被提供綁定表中的終止日期;對象4的屬性都不在被改變或刪除。在該過程期間,屬性不改變或刪除,因為另一個客戶端應(yīng)用可能正在使用對象以及因為該屬性及其值應(yīng)當(dāng)被保留以便對其在過去存在時的配置文件的歷史訪問。圖22是流程圖,描繪了可以如何改變名稱空間中的對象的屬性。在本示例中,即使屬性可以改變,該屬性的歷史值也被保留。例如,如果計算機(jī)文件在存儲集群中被客戶端應(yīng)用修改,那么理想的是,該計算機(jī)文件的原始版本不僅被存儲集群保留,而且還可被任何希望看到其在過去存在時的該文件的客戶端應(yīng)用訪問。因此,允許用于UUID屬性的舊值被名稱空間保留(在屬性表中)是理想的。在步驟520中,客戶端應(yīng)用確定特定的計算機(jī)文件和其希望改變的該文件的屬性。優(yōu)選地,客戶端應(yīng)用確定引用名稱空間中的該文件的路徑名稱(預(yù)先設(shè)置)和其希望改變的屬性。在一個示例中,客戶僅僅希望修改用于特定計算機(jī)文件的元數(shù)據(jù)屬性而不改變文件本身?;蛘?,客戶已經(jīng)修改了計算機(jī)文件并接收到來自存儲集群的引用文件的新版本的新的UUID。因此,該新的UUID必須被用來替換表示計算機(jī)文件的名稱空間中的對象的舊的UUID屬性。在步驟524中,客戶端應(yīng)用以設(shè)置屬性的函數(shù)來調(diào)用名稱空間,該設(shè)置屬性的函數(shù)傳遞要改變的屬性的名稱(例如UUID)、到名稱空間中的期望對象的路徑名稱、以及要改變的屬性的新值。在步驟528中,名稱空間試圖利用所提供的路徑名稱找到名稱空間中的對象。有可能的是,對象并不存在(從未存在過或者已經(jīng)被刪除)。如果不存在,那么在步驟532中,該過程終止。如果對象被找到,那么在步驟536中,對于對應(yīng)于該特定對象和已經(jīng)在設(shè)置屬性的函數(shù)調(diào)用中被傳遞的屬性名稱的行,對屬性表進(jìn)行搜索。如果當(dāng)前時間沒20落在用于該特定屬性(屬性不是“活”)的開始日期和終止日期的范圍之內(nèi),那么過程終止,因為用于該對象的屬性之前已經(jīng)被刪除并且不能被改變。一旦找到,則在步驟MO中,“活”屬性行被復(fù)制,以產(chǎn)生用于該同一對象和屬性表中的屬性的相同的新的行。在步驟544中,用于原始行的終止日期被提供(使用當(dāng)前時間),該終止日期表明該屬性的舊值已經(jīng)存在過,并且一直存在到其被改變的當(dāng)前時間。在步驟M8中,用于新的行(其具有用于屬性的新值)的開始日期被設(shè)為當(dāng)前時間,并且終止日期被設(shè)為無限值。接下來,在步驟552中,用于該屬性的新值被插入到用于新的行的值字段中。因此,該屬性的舊值被保留在屬性表中,并且利用開始日期和終止日期,該屬性的舊值的存在時間被精確地反映在該原始行中。新的屬性值被反映在屬性表中的其自己的行中,其中開始日期表示其何時開始存在。以這種方式,客戶端應(yīng)用可以修改存儲集群中的文件并改變用于名稱空間中的相應(yīng)對象的UUID屬性,從而表明新的文件已經(jīng)在特定時間開始存在,并且如果客戶端應(yīng)用希望看到其被改變之前的時間的文件的原始版本,則仍然保留UUID的舊值。換句話說,屬性的舊的版本不被刪除,而是被以適當(dāng)?shù)拈_始日期和終止日期保&3甶ο圖23是流程圖,描繪了可以如何檢索名稱空間中的對象的屬性。在本示例中,盡管屬性可能已經(jīng)改變,但是其歷史值可以被檢索。例如,如果計算機(jī)文件在存儲集群中被客戶端應(yīng)用修改,那么該計算機(jī)文件的原始版本被希望看到其在過去存在時的該文件的任何客戶端應(yīng)用檢索到是有可能的。在步驟560中,客戶端應(yīng)用確定特定的計算機(jī)文件和其希望檢索的該文件的屬性。優(yōu)選地,客戶端應(yīng)用確定引用名稱空間中的(預(yù)先設(shè)定的)該文件的路徑名稱和其希望的屬性。在一個示例中,客戶端僅僅希望檢索特定計算機(jī)文件的元數(shù)據(jù)屬性而不檢索文件本身?;蛘?,客戶端希望檢索文件在過去的特定時間點存在時的文件版本并將需要檢索該舊版本的UUID屬性以從存儲集群檢索該版本。在步驟564中,客戶端應(yīng)用以獲取屬性(getattribute)函數(shù)調(diào)用名稱空間,該獲取屬性函數(shù)傳遞要檢索的屬性的名稱(例如UUID)、到名稱空間中的期望對象的路徑名稱、以及當(dāng)該屬性被認(rèn)為已經(jīng)存在時的時間。時間可以向下幾乎到秒地提供,其提供實際上連續(xù)的能力以在文件和屬性在過去存在時檢索它們。在步驟568中,名稱空間試圖利用所提供的路徑名稱找到名稱空間中的對象。有可能的是,對象從未存在過,在這種情況下,期望的路徑將不存在。如果是這樣的話,在步驟572中,過程終止。名稱空間遍歷名稱圖形,以依次查詢路徑名稱的每個部分(利用綁定表)并且確保所提供的時間處于其正在遍歷的每個綁定的開始日期和終止日期之間。在圖17的示例中,如果確定綁定482-486在所提供的時間值期間存在過,名稱空間將僅僅到達(dá)對象4。如果是這樣的話,過程例如移動到已經(jīng)發(fā)現(xiàn)了對象4的步驟576。對于對應(yīng)于該特定對象和已經(jīng)在獲取屬性函數(shù)調(diào)用中被傳遞的屬性名稱的行,對屬性表進(jìn)行檢索。如果所提供的時間值未落在該特定屬性的開始日期和終止日期的范圍之內(nèi),則這表明期望的屬性在過去的該時間點并不存在并且過程終止。如果屬性在該時間點確實存在過,那么其相應(yīng)的屬性值將在步驟576中被返回給客戶端應(yīng)用。可選地,如果期望的屬性是在特定時間存在的數(shù)字對象的UUID,那么在步驟580中,客戶端應(yīng)用使用該標(biāo)識符來訪問存儲集群并檢索數(shù)字對象在該時間點存在時的該數(shù)字對象。以這種方式,客戶端應(yīng)用可以在存儲集群中檢索到在向下精確到秒的過去任何時間其存在時的該文件。因此,該實施例提供了幾乎連續(xù)的備份功能而無需存儲集群或客戶端應(yīng)用提供特定時間的系統(tǒng)離散備份或離散快照。垃圾收集當(dāng)在名稱綁定上調(diào)用imbindO時,不能立即忘記其所指代的對象ID,因為可能還有指向同一對象的其他名稱(別名和鏈接)。即使沒有其他的名稱,也不能忘記對象ID,因為日期效能機(jī)制一般仍將允許通過不再是當(dāng)前的名稱綁定對對象的歷史進(jìn)行訪問。由于名稱空間不分配任何語法給對象ID,所以實際上沒有與需要被釋放的對象相關(guān)聯(lián)的源,當(dāng)然指代該對象的名稱綁定除外。像CFS應(yīng)用的客戶端應(yīng)用將想知道對象何時以怎樣的任何方式都不再能通過名稱空間訪問,因為如果知道這點將會允許客戶端例如從固定內(nèi)容存儲集群20中刪除對象。這通常稱為“垃圾收集”,并且存在若干處理它的標(biāo)準(zhǔn)算法。當(dāng)然,名稱空間實際上并不收集任何東西,其僅僅識別一組不再能夠以任何方式被命名的對象ID。garbage()方法返回這種列表并允許客戶端應(yīng)用以它們希望的任何方式處理對象ID。RAIN上的實現(xiàn)名稱空間的表示還存在多個優(yōu)點。如在此所描述和示出的,名稱空間的名稱圖形可以被分解成多個不同的綁定,即元組。這種表示允許通過橫跨RAIN的不同節(jié)點復(fù)制和延伸綁定來將名稱空間存儲在RAIN內(nèi)。綁定被簡單地分開、復(fù)制并存儲在不同的節(jié)點上。對稱的、分布式算法將碎片放回在一起,以解析給定對象的路徑名稱。在另一個實施例中,名稱空間被實現(xiàn)在RAIN集群上,從而提供橫跨整個集群的綁定的分布。計算機(jī)系統(tǒng)實施例圖24A和24B示出了適于執(zhí)行本發(fā)明的實施例的計算機(jī)系統(tǒng)900。圖24A示出了計算機(jī)系統(tǒng)的一種可能的物理形式。當(dāng)然,計算機(jī)系統(tǒng)可以具有多種物理形式,這些形式包括集成電路、印刷電路板、小型手持設(shè)備(如移動電話或PDA)、個人計算機(jī)或超級計算機(jī)。計算機(jī)系統(tǒng)900包括監(jiān)視器902、顯示器904、機(jī)箱906、磁盤驅(qū)動器908、鍵盤910和鼠標(biāo)912。磁盤914是用來傳遞數(shù)據(jù)到計算機(jī)系統(tǒng)900或從計算機(jī)系統(tǒng)900傳遞數(shù)據(jù)的計算機(jī)可讀介質(zhì)。圖24B是用于計算機(jī)系統(tǒng)900的框圖的示例。大量子系統(tǒng)附連于系統(tǒng)總線920。一個或多個處理器922(也稱作中央處理單元,或者CPU)耦接包括存儲器擬4的存儲設(shè)備。存儲器擬4包括隨機(jī)存取存儲器(RAM)和只讀存儲器(ROM)。如在本領(lǐng)域所眾所周知的,ROM用來單向地傳遞數(shù)據(jù)和指令給CPU,而RAM—般用來以雙向的方式傳遞數(shù)據(jù)和指令。這兩種類型的存儲器都可包括下面所描述的任何適當(dāng)?shù)挠嬎銠C(jī)可讀介質(zhì)。固定磁盤擬6也雙向地耦接CPU;其提供附加的數(shù)據(jù)存儲能力,并且也可以包括下面描述的任何計算機(jī)可讀介質(zhì)中。固定磁盤擬6可以用來存儲程序、數(shù)據(jù)等,并且一般是比主存儲器慢的二級存儲介質(zhì)(如硬盤)。應(yīng)當(dāng)注意到,保留在固定磁盤926內(nèi)的信息在適當(dāng)?shù)那闆r下可以標(biāo)準(zhǔn)的方式結(jié)合作為存儲器擬4中的虛擬存儲器。可移除磁盤914可以采取下面描述的任何計算機(jī)可讀介質(zhì)的形式。CPU922也耦接于大量諸如顯示器904、鍵盤910、鼠標(biāo)912和揚(yáng)聲器930的輸入/輸出設(shè)備。通常,輸入/輸出設(shè)備可以是下面的任何一種視頻顯示器、軌跡球、鼠標(biāo)、鍵盤、麥克風(fēng)、觸敏顯示器、轉(zhuǎn)換器讀卡器、磁帶或紙帶讀取器、寫字板、輸入筆、聲音或手寫識別器、生物測定讀取器,或者其他計算機(jī)。可選地,CPU922可以利用網(wǎng)絡(luò)接口940耦接到另一計算機(jī)或遠(yuǎn)程通信網(wǎng)絡(luò)。利用這種網(wǎng)絡(luò)接口,能夠想到,在執(zhí)行上述方法步驟的過程中,CPU可以接收來自網(wǎng)絡(luò)的信息,或者可以輸出信息到網(wǎng)絡(luò)。另外,本發(fā)明的方法實施例可以僅僅在CPU922上執(zhí)行,或者可以結(jié)合共享處理的一部分的遠(yuǎn)程CPU—起在諸如因特網(wǎng)的網(wǎng)絡(luò)上執(zhí)行。此外,本發(fā)明的實施例還涉及一種具有計算機(jī)可讀介質(zhì)的計算機(jī)存儲器產(chǎn)品,該計算機(jī)可讀介質(zhì)上具有用于執(zhí)行各種由計算機(jī)實現(xiàn)的操作的計算機(jī)代碼。介質(zhì)和計算機(jī)代碼可以是那些為了本發(fā)明的目的而特別設(shè)計和構(gòu)建的,或者它們可以是為計算機(jī)軟件領(lǐng)域的技術(shù)人員所眾所周知并可利用的類型。計算機(jī)可讀介質(zhì)的示例包括但不限于諸如硬盤、軟盤和磁帶的磁性介質(zhì);諸如CD-ROM和全息照相裝置的光學(xué)介質(zhì);諸如軟式光盤的磁光介質(zhì);以及特別構(gòu)造成存儲和執(zhí)行程序代碼的硬件設(shè)備,如專用集成電路(ASIC)、可編程邏輯設(shè)備(PLD)以及ROM和RAM設(shè)備。計算機(jī)代碼的示例包括機(jī)器代碼,如編譯器產(chǎn)生的代碼、以及包含由使用譯碼器的計算機(jī)執(zhí)行的較高級代碼的文件。盡管已經(jīng)出于清楚理解的目的以一定的細(xì)節(jié)描述了上面的發(fā)明,但是顯然,某些改變和修改可以在所附權(quán)利要求的范圍內(nèi)實施。因此,所描述的實施例應(yīng)當(dāng)認(rèn)作是示例性而非限制性的,并且本發(fā)明不應(yīng)限于此處給出的細(xì)節(jié),而是應(yīng)當(dāng)由后面的權(quán)利要求及其等同設(shè)置的全部范圍來限定。權(quán)利要求1.一種將計算機(jī)文件添加到存儲集群的方法,所述方法包括接收識別計算機(jī)文件的第一路徑名稱,所述計算機(jī)文件使用客戶端軟件應(yīng)用的第一路徑名稱方案;通過所述客戶端應(yīng)用將所述第一路徑名稱解析成其構(gòu)成名稱部分,每個名稱部分包括一般性方向和分隔符;調(diào)用名稱空間應(yīng)用的函數(shù)并傳遞所述名稱部分,每個被傳遞的名稱部分包括每個名稱部分的所述一般性方向和所述分隔符;利用所述名稱部分以及所述一般性方向和分隔符在識別所述計算機(jī)文件的所述第一路徑名稱的所述名稱空間應(yīng)用中構(gòu)建表示;將所述計算機(jī)文件傳遞到所述存儲集群并接收唯一標(biāo)識符,所述唯一標(biāo)識符唯一地識別存儲在所述存儲集群內(nèi)的所述計算機(jī)文件;以及將所述唯一標(biāo)識符連同所述第一路徑名稱的所述表示的端存儲在所述名稱空間應(yīng)用中,由此,所述計算機(jī)文件通過所述表示被唯一地表示在所述名稱空間應(yīng)用中。2.如權(quán)利要求1所述的方法,其中,所述唯一標(biāo)識符是通用唯一標(biāo)識符。3.如權(quán)利要求1所述的方法,其中,所述表示通過綁定表中的綁定來體現(xiàn)。4.一種從存儲集群中檢索計算機(jī)文件的方法,所述方法包括從客戶端軟件應(yīng)用接收識別計算機(jī)文件的完全解析的路徑名稱,所述路徑名稱由名稱空間應(yīng)用接收;將所述路徑名稱解析成其構(gòu)成名稱部分,每個名稱部分包括分隔符;在所述名稱空間應(yīng)用的綁定數(shù)據(jù)庫中引用所述名稱部分中的每一個的一般性方向;利用所述名稱部分和所述一般性方向遍歷所述名稱空間應(yīng)用中的路徑,以到達(dá)唯一地表示所述名稱空間應(yīng)用內(nèi)的所述計算機(jī)文件的軟件對象;返回與所述軟件對象相關(guān)聯(lián)的唯一標(biāo)識符,所述唯一標(biāo)識符唯一地識別所述存儲集群內(nèi)的所述計算機(jī)文件;以及將所述唯一的標(biāo)識符傳遞到所述存儲集群并作為回報接收所述計算機(jī)文件。5.如權(quán)利要求4所述的方法,其中,所述唯一標(biāo)識符是通用唯一標(biāo)識符。6.一種將計算機(jī)文件添加到存儲集群的方法,所述方法包括接收識別計算機(jī)文件的第一路徑名稱,所述計算機(jī)文件使用第一客戶端軟件應(yīng)用的第一路徑名稱方案;調(diào)用名稱空間應(yīng)用的函數(shù)并傳遞所述第一路徑名稱,所述第一路徑名稱包括第一路徑名稱部分;利用所述第一路徑名稱部分在識別所述計算機(jī)文件的所述第一路徑名稱的所述名稱空間應(yīng)用中構(gòu)建第一表示;將所述計算機(jī)文件存儲在所述存儲集群中并且接收來自所述存儲集群的唯一標(biāo)識符,所述唯一標(biāo)識符唯一地識別存儲在所述存儲集群內(nèi)的所述計算機(jī)文件;接收識別所述計算機(jī)文件的第二路徑名稱,所述計算機(jī)文件使用第二客戶端軟件應(yīng)用的第二路徑名稱方案;調(diào)用所述名稱空間應(yīng)用的所述函數(shù)并傳遞所述第二路徑名稱,所述第二路徑名稱包括第二路徑名稱部分;利用所述第二路徑名稱部分在識別所述計算機(jī)文件的所述第二路徑名稱的所述名稱空間應(yīng)用中構(gòu)建第二表示;將所述唯一標(biāo)識符連同所述第一路徑名稱的所述表示和所述第二路徑名稱的所述表示的末端存儲在所述名稱空間應(yīng)用中,由此,所述計算機(jī)文件通過兩個所述表示被唯一地表示在所述名稱空間應(yīng)用中。7.如權(quán)利要求6所述的方法,還包括通過所述客戶端應(yīng)用將所述第一路徑名稱解析成其所述構(gòu)成名稱部分,每個名稱部分包括一般性方向和分隔符。8.如權(quán)利要求6所述的方法,還包括使用所述名稱部分中的每一個的所述一般性方向和分隔符來執(zhí)行所述構(gòu)建第一表示的步驟。9.如權(quán)利要求6所述的方法,其中,所述唯一標(biāo)識符是通用唯一標(biāo)識符。10.一種利用名稱空間應(yīng)用讀計算機(jī)文件的屬性的方法,所述方法包括將計算機(jī)文件存儲在存儲集群中;在所述名稱空間應(yīng)用中限定第一表示,所述第一表示識別使用第一客戶端軟件應(yīng)用的第一路徑名稱的所述計算機(jī)文件;設(shè)置使用所述第一路徑名稱的所述計算機(jī)文件的屬性的值;利用所述名稱空間應(yīng)用遍歷同樣識別所述計算機(jī)文件的第二表示,其中所述第二表示使用第二客戶端軟件應(yīng)用的第二路徑名稱,所述第二路徑名稱與所述第一路徑名稱不同;經(jīng)由所述第二路徑名稱讀所述屬性的所述值;以及將所述屬性的所述值返回給所述第二客戶端軟件應(yīng)用。11.如權(quán)利要求10所述的方法,還包括接收來自所述存儲集群的唯一標(biāo)識符,所述唯一標(biāo)識符唯一地識別存儲在所述存儲集群內(nèi)的所述計算機(jī)文件;以及利用所述名稱空間應(yīng)用將所述唯一標(biāo)識符存儲為所述計算機(jī)文件的屬性。12.一種利用名稱空間應(yīng)用讀存儲在存儲集群中的計算機(jī)文件的屬性的方法,所述方法包括接收來自所述存儲集群的唯一標(biāo)識符,所述唯一標(biāo)識符唯一地識別存儲在所述存儲集群內(nèi)的所述計算機(jī)文件;在所述名稱空間應(yīng)用中限定第一表示,所述第一表示識別使用第一客戶端軟件應(yīng)用的第一路徑名稱的所述計算機(jī)文件,所述第一表示包括所述計算機(jī)文件的唯一標(biāo)識符的屬性;修改所述存儲集群中的所述計算機(jī)文件并接收新的唯一標(biāo)識符;利用所述第一表示將所述新的唯一標(biāo)識符設(shè)置為所述計算機(jī)文件的屬性;遍歷同樣識別所述計算機(jī)文件的所述名稱空間應(yīng)用的第二表示,其中所述第二表示使用第二客戶端軟件應(yīng)用的第二路徑名稱,所述第二路徑名稱與所述第一路徑名稱不同;以及經(jīng)由所述第二路徑名稱將所述新的唯一標(biāo)識符的所述值返回給所述第二客戶端軟件應(yīng)用。13.一種刪除文件的方法,所述方法包括將計算機(jī)文件存儲在存儲集群中;限定識別軟件對象的名稱空間應(yīng)用中的表示,所述軟件對象唯一地表示所述名稱空間應(yīng)用內(nèi)的所述計算機(jī)文件,所述表示使用客戶端軟件應(yīng)用的路徑名稱;接收來自所述客戶端軟件應(yīng)用的在時間T刪除所述計算機(jī)文件的請求;識別執(zhí)行所述試驗(temptation)的所述名稱空間應(yīng)用中的一組綁定;以及向所述一組綁定中的指向所述軟件對象的最后綁定分配時間T的終止日期,由此,所述客戶端軟件應(yīng)用在時間T之后的任何時間都不能使用所述路徑名稱訪問所述計算機(jī)文件。14.如權(quán)利要求13所述的方法,還包括接收來自所述存儲集群的唯一標(biāo)識符,所述唯一標(biāo)識符唯一地識別存儲在所述存儲集群內(nèi)的所述計算機(jī)文件;以及將所述唯一標(biāo)識符存儲為所述軟件對象的屬性。15.一種從備份中檢索文件的方法,所述方法包括接收來自客戶端軟件應(yīng)用的請求,以從存儲集群中檢索在時間T時存在的計算機(jī)文件,所述時間T是過去的時間;利用識別所述計算機(jī)文件的所述客戶端軟件應(yīng)用的路徑名稱訪問名稱空間應(yīng)用,所述路徑名稱的每個部分由所述名稱空間應(yīng)用中的綁定表示;遍歷所述名稱空間并將所述時間T與所述綁定中的每一個的開始日期和終止日期作比較;識別唯一地識別所述計算機(jī)文件的所述名稱空間的軟件對象;檢索所述軟件對象的唯一標(biāo)識符屬性,對于所述軟件對象,所述時間T落在所述唯一標(biāo)識符的屬性的開始日期和終止日期之間;以及利用所述唯一標(biāo)識符的屬性從所述存儲集群檢索所述計算機(jī)文件。16.一種改變計算機(jī)文件的屬性的方法,所述方法包括接收來自客戶端軟件應(yīng)用的在時間T將該計算機(jī)文件的屬性改變?yōu)樾轮档恼埱?;利用識別所述計算機(jī)文件的所述客戶端軟件應(yīng)用的路徑名稱訪問名稱空間應(yīng)用;利用所述路徑名稱遍歷所述名稱空間,并識別唯一地識別所述計算機(jī)文件的所述名稱空間的軟件對象;復(fù)制與所述屬性相關(guān)聯(lián)的原始數(shù)據(jù),以創(chuàng)建與所述屬性相關(guān)聯(lián)的新數(shù)據(jù);將所述原始數(shù)據(jù)的終止日期設(shè)為等于時間T;將所述新數(shù)據(jù)的開始日期設(shè)為等于時間T;以及將用于所述屬性的所述新數(shù)據(jù)的值設(shè)為等于所述新值,由此,所述計算機(jī)文件的所述屬性具有為時間T的所述新值的值。17.如權(quán)利要求16所述的方法,其中,所述計算機(jī)文件存儲在存儲集群中。18.如權(quán)利要求17所述的方法,還包括修改所述計算機(jī)存儲器中的所述計算機(jī)文件;接收來自所述計算機(jī)存儲器的對應(yīng)于所述修改的計算機(jī)文件的新的唯一標(biāo)識符;以及接收來自所述客戶端軟件應(yīng)用的請求,以將所述屬性改變?yōu)樗鲂碌奈ㄒ粯?biāo)識符。19.一種檢索計算機(jī)文件的舊的屬性的方法,所述方法包括接收來自客戶端軟件應(yīng)用的請求,以從存儲集群中檢索在時間T時存在的計算機(jī)文件,所述時間T為過去的時間;利用識別所述計算機(jī)文件的所述客戶端軟件應(yīng)用的路徑名稱訪問名稱空間應(yīng)用;利用所述路徑名稱遍歷所述名稱空間,并識別唯一地識別所述計算機(jī)文件的所述名稱空間的軟件對象;對于所述舊的屬性,檢索所述軟件對象的屬性值,對于所述舊的屬性,所述時間T落在所述舊的屬性的開始日期和終止日期之間;以及將所述屬性值返回給所述客戶端軟件應(yīng)用。全文摘要客戶端應(yīng)用使用名稱空間應(yīng)用來解析用來引用文件的路徑名稱。文件存儲在固定內(nèi)容集群中,通過檢索唯一標(biāo)識符而被訪問。任何路徑名稱方案都被名稱空間支持。名稱空間應(yīng)用使用綁定表來記錄對象之間的綁定,所述綁定包括用于每個綁定的開始日期和終止日期以及在路徑名稱方案中使用的方向和分隔符數(shù)據(jù)。名稱空間屬性表追蹤用于每個對象的屬性/值,其中各對象包括每個屬性的開始日期和終止日期。名稱空間提供語法一般性——任何路徑名稱方案可被解析以識別唯一的文件。名稱空間可以在應(yīng)用之間共享;當(dāng)一個應(yīng)用修改文件/屬性時,使用不同路徑名稱方案的另一個應(yīng)用能夠訪問相同的數(shù)據(jù)/修改。名稱空間由于用于綁定和屬性的開始和終止日期而提供集群中的文件的幾乎即刻的連續(xù)備份。文檔編號G06F12/00GK102239476SQ200980143713公開日2011年11月9日申請日期2009年8月26日優(yōu)先權(quán)日2008年8月26日發(fā)明者J·B·小凱西,J·E·杜頓,J·M·莫里森,L·阿比拉申請人:卡林戈公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
大田县| 根河市| 永清县| 湖北省| 巨鹿县| 河西区| 华蓥市| 荆门市| 和政县| 六安市| 平顺县| 崇信县| 信丰县| 铜鼓县| 张家口市| 星子县| 慈利县| 都昌县| 阿鲁科尔沁旗| 宿州市| 汉阴县| 富宁县| 井冈山市| 商都县| 化德县| 突泉县| 呼和浩特市| 泽普县| 德格县| 沧州市| 仪征市| 全南县| 新和县| 岳阳市| 乾安县| 白水县| 南通市| 红安县| 萍乡市| 永年县| 上杭县|