專利名稱:增加數(shù)據(jù)存儲容量的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及數(shù)據(jù)存儲,特別是涉及用以增加數(shù)據(jù)存儲容量的方法和裝置。
背景技術(shù):
數(shù)據(jù)存儲系統(tǒng)的容量和性能依賴于存儲系統(tǒng)的物質(zhì)資源。例如,存儲系統(tǒng)能夠存儲的數(shù)據(jù)量依賴于存儲系統(tǒng)擁有的物理存儲設(shè)備的數(shù)量和容量。由于存儲在存儲系統(tǒng)上的數(shù)據(jù)量接近存儲系統(tǒng)的存儲容量,因而可能希望通過向存儲系統(tǒng)添加另外的物理存儲設(shè)備而增加存儲系統(tǒng)容量。然而,有由存儲系統(tǒng)的硬件結(jié)構(gòu)強加在存儲系統(tǒng)可具有的存儲設(shè)備數(shù)量上的物理限制。因而,當(dāng)存儲系統(tǒng)接近其存儲容量時,則不再可能或合乎需要地添加更多的物理存儲設(shè)備到存儲系統(tǒng),而是,如果希望增加存儲容量,則使用一個或多個另外的存儲系統(tǒng)。
發(fā)明內(nèi)容
一說明性的實施例致力于保存在存儲環(huán)境中的數(shù)據(jù)單位的存取方法,存儲環(huán)境包括多個存儲簇。該方法包括從主機(jī)接收請求以查找先前存儲在存儲環(huán)境中的數(shù)據(jù)單位;及響應(yīng)于請求的接收,確定數(shù)據(jù)單位存儲在多個存儲簇的哪一個上。另一說明性的實施例致力于至少一編碼以指令的計算機(jī)可讀的介質(zhì),當(dāng)其在計算機(jī)系統(tǒng)上運行時,執(zhí)行上述方法。
另一說明性的實施例致力于用于存儲數(shù)據(jù)的裝置。該裝置包括輸入設(shè)備,其從主機(jī)接收請求以查找存儲環(huán)境中的多個存儲簇中的至少之一上的數(shù)據(jù)單位;及至少一連接到輸入設(shè)備的控制器,其從輸入設(shè)備接收請求,并響應(yīng)于請求的接收,確定數(shù)據(jù)單位存儲在多個存儲簇的哪一個上。
另一說明性的實施例致力于保存在存儲環(huán)境中的數(shù)據(jù)單位的存取方法,存儲環(huán)境包括多個存儲簇,存儲環(huán)境存儲用于主機(jī)的數(shù)據(jù)。該方法包括從在主機(jī)上運行的應(yīng)用程序接收請求以存儲數(shù)據(jù)單位;及響應(yīng)于請求的接收,選擇多個存儲簇之一保存數(shù)據(jù)單位,其以對應(yīng)用程序透明的方式保存,使得應(yīng)用程序不會被使得意識到所選擇的多個存儲簇之一保存數(shù)據(jù)單位。另一說明性的實施例致力于至少一編碼以指令的計算機(jī)可讀的介質(zhì),當(dāng)其在計算機(jī)系統(tǒng)上運行時,執(zhí)行上述方法。
另一說明性的實施例致力于存儲數(shù)據(jù)的裝置。該裝置包括輸入設(shè)備,其從在主機(jī)上運行的應(yīng)用程序接收請求以將數(shù)據(jù)單位保存在存儲環(huán)境中的多個存儲簇中的至少之一上;及至少一連接到輸入設(shè)備的控制器,其從輸入設(shè)備接收請求,并響應(yīng)于請求的接收,選擇多個存儲簇之一來保存數(shù)據(jù)單位,其以對應(yīng)用程序透明的方式保存,使得應(yīng)用程序不會被使得意識到所選擇的多個存儲簇之一保存數(shù)據(jù)單位。
另一說明性的實施例致力于保存在存儲環(huán)境中的數(shù)據(jù)單位的存取方法,存儲環(huán)境包括多個存儲簇,存儲環(huán)境存儲用于主機(jī)的數(shù)據(jù)。該方法包括從在主機(jī)上運行的應(yīng)用程序接收請求以存儲數(shù)據(jù)單位;選擇多個存儲簇之一來保存數(shù)據(jù)單位;將數(shù)據(jù)單位保存在多個存儲簇中所選擇的那個簇上,且不保存標(biāo)識所選擇簇的信息。另一說明性的實施例致力于至少一編碼以指令的計算機(jī)可讀的介質(zhì),當(dāng)其在計算機(jī)系統(tǒng)上運行時,執(zhí)行上述方法。
另一說明性的實施例致力于存儲數(shù)據(jù)的裝置,包括輸入設(shè)備,其從在主機(jī)上運行的應(yīng)用程序接收請求以將數(shù)據(jù)單位保存在存儲環(huán)境中的多個存儲簇中的至少之一上;及至少一連接到輸入設(shè)備的控制器,其從輸入設(shè)備接收請求,選擇多個存儲簇之一來保存數(shù)據(jù)單位,將數(shù)據(jù)單位保存在多個存儲簇中所選擇的那個簇上,且不保存標(biāo)識所選擇簇的信息。
圖1為本發(fā)明的實施例可實施于其上的分布式存儲環(huán)境的框圖。
圖2為根據(jù)本發(fā)明的一實施例,主機(jī)經(jīng)API與多個存儲環(huán)境或簇交互作用的框圖。
圖3為根據(jù)本發(fā)明另一實施例,主機(jī)經(jīng)外部設(shè)備與多個存儲簇交互作用的框圖。
圖4為根據(jù)本發(fā)明另一實施例,主機(jī)與包括多個存儲簇的存儲環(huán)境交互作用的框圖。
圖5為根據(jù)本發(fā)明一實施例,數(shù)據(jù)可被保存在存儲環(huán)境上的示例性方式的框圖。
圖6為根據(jù)本發(fā)明一實施例,使用固有位置來確定數(shù)據(jù)單位在多個簇之間的存儲位置的框圖。
圖7為可用于存取根據(jù)本發(fā)明一實施例保存的數(shù)據(jù)的內(nèi)容地址的示意圖。
圖8為根據(jù)本發(fā)明一實施例,產(chǎn)生用于查找保存在多個簇之一中的數(shù)據(jù)的位置標(biāo)識符的示意圖。
圖9為根據(jù)本發(fā)明一實施例,定位多個二進(jìn)制大對象(blob)的內(nèi)容描述符文件(CDF)的示意圖,其可使用于本發(fā)明的各方面可使用在其上的可內(nèi)容尋址的環(huán)境中。及圖10為根據(jù)本發(fā)明一實施例,可用于追蹤用于將數(shù)據(jù)保存在多個存儲簇中的存儲算法的示例性記錄的示意圖。
具體實施例方式
在此描述的本發(fā)明的各方面的一個應(yīng)用涉及分布式存儲環(huán)境中的可內(nèi)容尋址的存儲,存儲環(huán)境包括多個互聯(lián)的獨立節(jié)點。這樣的環(huán)境在表1中所示的美國申請中有所描述,其中每一個均通過引用的方式全部組合于此。表1中所列的申請在此被整體稱為相關(guān)申請。
表1
圖1所示為分布式存儲環(huán)境100的例子。分布式存儲環(huán)境100包括多個存取節(jié)點101a-101c和多個存儲節(jié)點103a-103e。存取節(jié)點可接收并響應(yīng)于來自主機(jī)105的存取請求,存儲節(jié)點103可保存由主機(jī)105發(fā)送到存儲環(huán)境100的數(shù)據(jù)。存取節(jié)點101和存儲節(jié)點103可通過網(wǎng)絡(luò)(未示出)連接并在網(wǎng)絡(luò)上通信,使得每一節(jié)點可使其出現(xiàn)在網(wǎng)絡(luò)上為其它節(jié)點知道。如此,節(jié)點可一起工作以處理存取請求并為主機(jī)105保存數(shù)據(jù)。
每一節(jié)點可包括處理資源(如處理器及存儲器)及存儲設(shè)備。節(jié)點相互通信以保存數(shù)據(jù)、響應(yīng)于存取請求、及執(zhí)行其它環(huán)境功能。對存儲環(huán)境的用戶(如主機(jī)105或運行于其上的應(yīng)用程序),存儲環(huán)境可表現(xiàn)為單個實體。即,用戶不需要意識到存儲環(huán)境包括多個分開的節(jié)點或某一數(shù)據(jù)單位保存或鏡像在哪一存儲節(jié)點上。
要增加存儲環(huán)境100的存儲容量,可添加或連接更多的存儲節(jié)點到網(wǎng)絡(luò)。這些另外的存儲節(jié)點可使其存在在網(wǎng)絡(luò)上公知,因而允許存取節(jié)點101在保存數(shù)據(jù)時使用這些另外的存儲器。添加更多的存儲節(jié)點到存儲網(wǎng)絡(luò)而不增加存取節(jié)點的數(shù)量可導(dǎo)致存取節(jié)點成為存儲環(huán)境的瓶頸并使得性能降級。因此,可能希望在增加存儲節(jié)點的數(shù)量的同時也增加存取節(jié)點的數(shù)量。
存儲環(huán)境100可執(zhí)行在上面引用的相關(guān)申請中描述的多個功能,如響應(yīng)于來自主機(jī)105的寫請求確定將數(shù)據(jù)保存在哪一存儲節(jié)點103上、響應(yīng)于來自主機(jī)105的讀請求確定數(shù)據(jù)保存在哪一存儲節(jié)點103上、執(zhí)行可能從存儲環(huán)境刪除的數(shù)據(jù)的無用存儲單元的收集、實施指明數(shù)據(jù)不應(yīng)被從存儲環(huán)境刪除的時間段的保持周期、鏡像數(shù)據(jù)(即,在存儲環(huán)境的不同節(jié)點上創(chuàng)建一個或多個鏡像拷貝)、自愈以補償一個或多個節(jié)點的失效、及其它功能。這樣的功能可由存儲節(jié)點、存取節(jié)點、或二者一起執(zhí)行,且執(zhí)行這樣的功能可導(dǎo)致節(jié)點間的網(wǎng)絡(luò)流通量。
例如,要執(zhí)行自愈功能,當(dāng)節(jié)點失效時,其它節(jié)點可檢測到該失效。作為響應(yīng),環(huán)境100可將對保存在失效節(jié)點上的數(shù)據(jù)的存取請求重新指引到保存有該數(shù)據(jù)的鏡像拷貝的其它節(jié)點,并可建立另一鏡像以用于連續(xù)的容錯。節(jié)點可在網(wǎng)絡(luò)上傳播其存續(xù)的消息以表明其是運行的且尚未失效。如果來自該節(jié)點的存續(xù)消息未被其它節(jié)點接收到,則其它節(jié)點可確定該節(jié)點已失效。添加更多的節(jié)點到存儲環(huán)境導(dǎo)致更多的存續(xù)消息在網(wǎng)絡(luò)上傳輸,因而導(dǎo)致更多的網(wǎng)絡(luò)流通量。
作為另一例子,存儲環(huán)境100可保持索引,如在相關(guān)中請中描述的二進(jìn)制大對象位置索引(BLI),以幫助查找數(shù)據(jù)。BLI可指明數(shù)據(jù)單位保存在哪一存儲節(jié)點上。網(wǎng)絡(luò)中的每一存取或存儲節(jié)點可負(fù)責(zé)管理BLI的一部分。由于BLI可跨存取和/或存儲節(jié)點分布,當(dāng)數(shù)據(jù)單位寫到存儲環(huán)境或從存儲環(huán)境刪除時維護(hù)和更新BLI可導(dǎo)致在節(jié)點間產(chǎn)生網(wǎng)絡(luò)流通量。添加更多的節(jié)點可導(dǎo)致BLI的管理責(zé)任在大量節(jié)點之間共享,從而導(dǎo)致大量網(wǎng)絡(luò)流通量產(chǎn)生。
其它功能,包括相關(guān)申請中描述的部分功能,如執(zhí)行無用存儲單元收集、查找存儲環(huán)境上的內(nèi)容(如經(jīng)發(fā)向所有節(jié)點的廣播消息)、重新排列BLI(即,當(dāng)添加或從存儲環(huán)境去除節(jié)點時),均可因添加節(jié)點到存儲環(huán)境而導(dǎo)致大量網(wǎng)絡(luò)流通量。該增加的網(wǎng)絡(luò)流通量可導(dǎo)致存儲環(huán)境的性能降級。
如上所述,存儲節(jié)點103可被添加到存儲環(huán)境以增加存儲環(huán)境的存儲容量。另外,可添加存取節(jié)點101以抵消因添加額外的存儲節(jié)點而導(dǎo)致的性能降級。然而,申請人已意識到,因為添加存取節(jié)點和存儲節(jié)點導(dǎo)致網(wǎng)絡(luò)流通量增加,一旦存儲環(huán)境中的節(jié)點數(shù)達(dá)到某一數(shù)量,通過添加另外的節(jié)點獲得的性能好處至少部分被存儲環(huán)境中的節(jié)點產(chǎn)生的網(wǎng)絡(luò)流通量增量及用在執(zhí)行支撐存儲環(huán)境的體系結(jié)構(gòu)功能(如上述的)中的處理資源增量抵消。因而,當(dāng)另外的節(jié)點添加到存儲環(huán)境以增加存儲容量和/或性能時,存儲環(huán)境的整個性能的增長可能少于預(yù)期,在某些情況下甚至可能降低。該性能影響在下面被稱為性能降級,該術(shù)語使用于此不僅指實際的性能降低,還指少于預(yù)期的性能改善,其中性能改善是通過另外的存儲資源的添加而獲得。
本發(fā)明的一實施例致力于提供另外的存儲簇,其一起工作以提供組合的存儲器,但這些存儲簇是相互獨立的,從而在一簇中添加另外的存儲節(jié)點不會對其它簇產(chǎn)生上述的性能降級問題。如在此所使用的,術(shù)語存儲簇指一組一個或多個互聯(lián)的節(jié)點,它們共享至少一邏輯上連接它們的軟件實用程序。例如,存儲簇的節(jié)點可共享自愈軟件實用程序,使得簇中的節(jié)點監(jiān)控由該簇中其它節(jié)點傳輸?shù)拇胬m(xù)消息,但不監(jiān)控該簇外的節(jié)點傳輸?shù)南ⅰ9?jié)點還可共享共用的BLI,使得一存儲簇的節(jié)點還可或另外共享其它實用程序,如無用存儲單元收集實用程序和/或追蹤保存在簇中的數(shù)據(jù)被鏡像在哪里的數(shù)據(jù)鏡像實用程序。在一實施例中,簇中的每一節(jié)點知道簇中的每一其它節(jié)點的地址(如IP地址),盡管本發(fā)明不限于該方面。
由于存儲簇中的節(jié)點不與簇外的節(jié)點(如不同的存儲簇中的節(jié)點)共享軟件實用程序,在一存儲簇內(nèi)的內(nèi)部網(wǎng)絡(luò)流通量和節(jié)點處理資源的使用不會影響任何其它存儲簇的性能。因此,另外的存儲簇可被添加到存儲環(huán)境以增加存儲容量,但不經(jīng)受上述的性能降級問題。
應(yīng)意識到的是,可在簇中的節(jié)點間共享(但不在不同的簇中的節(jié)點之間共享)的軟件實用程序的類型的描述僅提供用于闡述的目的,且在此描述的本發(fā)明的各方面不限于在存儲環(huán)境中使用,其中存儲簇中的節(jié)點共享上述的特定類型的軟件實用程序或任何其它特定類型的軟件實用程序。類似地,具有如相關(guān)申請中描述的那些特征的存儲環(huán)境的例子在此被描述僅用于說明目的,應(yīng)該意識到的是,在此描述的本發(fā)明的各方面并不限于該方面,且可被使用在具有多種其它結(jié)構(gòu)的存儲環(huán)境中。例如,提及包括一個或多個互聯(lián)節(jié)點的存儲簇并不僅限于結(jié)合相關(guān)申請描述的存取節(jié)點和存儲節(jié)點結(jié)構(gòu),節(jié)點可指任何設(shè)備或作為統(tǒng)一體一起運行的設(shè)備集合。
在本發(fā)明的一實施例中,多個存儲簇以對存儲環(huán)境的用戶(如主機(jī)或運行于其上的應(yīng)用程序)透明的方式安排,使得用戶不需要知道特定的數(shù)據(jù)單位保存在哪一存儲簇上以存取該數(shù)據(jù)單位。因而,保存數(shù)據(jù)到存儲環(huán)境及從存儲環(huán)境檢索數(shù)據(jù)的應(yīng)用程序可將多個存儲簇當(dāng)成一個存儲環(huán)境,而不知道寫到存儲環(huán)境的數(shù)據(jù)被保存在哪一簇上。因此,在本發(fā)明的一實施例中,當(dāng)應(yīng)用程序(如主機(jī)上的)將數(shù)據(jù)單位的寫請求發(fā)給存儲環(huán)境時,確定數(shù)據(jù)單位將被寫到哪一存儲簇上;當(dāng)應(yīng)用程序發(fā)出讀請求時,確定數(shù)據(jù)保存在哪一存儲簇上,二者皆以對應(yīng)用程序透明的方式進(jìn)行。
對于確定將數(shù)據(jù)單位保存在哪一存儲簇上及從適當(dāng)?shù)拇貦z索先前寫入的數(shù)據(jù)單位的計算機(jī)系統(tǒng)的各方面的實施,本發(fā)明不限于任何特定的實施技術(shù)。在一實施例中,這些功能可由主機(jī)上的應(yīng)用程序接口(API)執(zhí)行。該實施將在下面結(jié)合圖2進(jìn)行描述。
圖2示出了與包括兩個存儲簇207a和207b的存儲環(huán)境206進(jìn)行通信的主機(jī)201。主機(jī)201運行讀和寫數(shù)據(jù)單位的應(yīng)用程序203,應(yīng)用程序接口(API)205適于與存儲環(huán)境206接口。例如,主機(jī)201可以是提供資源(如數(shù)據(jù)存儲、電子郵件、及其它服務(wù))的服務(wù)器、客戶端(如由用戶操作的一般目的的計算機(jī)環(huán)境)、網(wǎng)絡(luò)組件(如交換機(jī))或任何其它類型的計算機(jī)。主機(jī)201通過通信鏈路213a和213b連接到存儲環(huán)境206的存儲簇207a和207b,從而主機(jī)201可使用存儲環(huán)境206保存和檢索數(shù)據(jù)。鏈路213a和213b可以是任何類型的通信鏈路,包括任何類型的網(wǎng)絡(luò)或直接連接。
應(yīng)用程序203可以是任何計算機(jī)應(yīng)用程序,其為主機(jī)201的用戶或管理員使用并將數(shù)據(jù)保存到存儲環(huán)境206和/或從存儲環(huán)境206檢索數(shù)據(jù)。應(yīng)用程序203與API205連接,從而應(yīng)用程序203可使用API205與存儲簇207進(jìn)行通信。在一實施例中,應(yīng)用程序203不需意識到存儲環(huán)境206包括多個存儲簇,因為簇207之間的數(shù)據(jù)存儲的管理以對應(yīng)用程序203透明的方式完成。
API205可以任何適當(dāng)?shù)姆绞綄嵤?。例如,API205可包括提供給應(yīng)用程序203的程序員的計算機(jī)目標(biāo)代碼。計算機(jī)目標(biāo)代碼包括可用于與存儲環(huán)境通信的例程。當(dāng)與API205連接時,應(yīng)用程序可調(diào)用這些例程以與存儲環(huán)境206通信。API205可與任何數(shù)量的應(yīng)用程序連接,并將應(yīng)用程序203的程序員擋在存儲環(huán)境206借以通信的內(nèi)部協(xié)議之外。
當(dāng)應(yīng)用程序203調(diào)用API205的例程以寫數(shù)據(jù)到存儲環(huán)境206時,API205可選擇存儲簇保存數(shù)據(jù)并將包括數(shù)據(jù)的寫請求209發(fā)送給適當(dāng)?shù)拇鎯Υ?。存儲簇的選擇可通過使用任何適當(dāng)?shù)募夹g(shù)實現(xiàn)。例如,API205可采用循環(huán)(round-robin)方案,存儲環(huán)境中的簇借此而被順序選擇以用于每一寫請求。在圖2的例子中,為處理寫請求,API205可在存儲簇207a和存儲簇207b的選擇之間交替?;蛘?,API205可基于每一存儲簇上的可用存儲容量、每一存儲簇上的負(fù)荷、將要保存的數(shù)據(jù)的大小或類型、或任何其它適當(dāng)?shù)臉?biāo)準(zhǔn)來選擇存儲簇保存數(shù)據(jù)。存儲簇上的負(fù)荷可基于下述因素確定有多少對象(如二進(jìn)制大對象或CDF)正由存儲簇處理、存儲簇的CPU有多忙、存儲簇的磁盤有多忙、和/或任何其它適當(dāng)?shù)囊蛩亍?br>
當(dāng)應(yīng)用程序203調(diào)用API205的例程以從存儲環(huán)境讀先前保存的數(shù)據(jù)單位時,API205可確定所請求的數(shù)據(jù)單位被保存在哪一存儲簇上。這可以任何適當(dāng)?shù)姆绞酵瓿?。例如,API205可保存指明每一數(shù)據(jù)單位保存在哪一簇上的信息。當(dāng)然,在另一實施例中,沒有這樣的信息被保存,且API205響應(yīng)于讀請求確定數(shù)據(jù)保存在哪里。
在一實施例中,API205發(fā)送識別所請求的數(shù)據(jù)單位的指令給存儲環(huán)境中的每一存儲簇并請求存儲簇確定所指明的數(shù)據(jù)單位是否保存在該簇上。指令可以是讀指令、或不尋求讀數(shù)據(jù)單位但僅確定其保存在哪一簇上的指令(在此稱為“存在指令”)。
指令可串行或并行發(fā)送給存儲簇,因為本發(fā)明并不限制這方面。例如,如果串行發(fā)送指令,API205可首先發(fā)送存在指令211給存儲簇207a。如果簇207a做出數(shù)據(jù)單位保存于其中的響應(yīng),API205接著將對該數(shù)據(jù)單位的讀請求發(fā)送給存儲簇207a且不需要發(fā)送任何另外的存在指令給其它簇。如果簇207a做出數(shù)據(jù)單位未被保存于其中的響應(yīng),則API205發(fā)送另一存在指令215給簇207b。如果簇207b做出所指明的數(shù)據(jù)單位保存于其中的響應(yīng),API205可發(fā)送對數(shù)據(jù)單位的讀請求給簇207b。如果API205以并行方式發(fā)送存在指令,則存在指令211和存在指令213可在大約相同的時間分別發(fā)送給簇207a和207b。當(dāng)存儲簇之一響應(yīng)于API205確認(rèn)所指明的數(shù)據(jù)單位保存于其中時,則API205可發(fā)送數(shù)據(jù)單位的讀請求給該存儲簇。如上所述,代替采用存在指令之后為讀請求的方式,API205可以串行或并行方式僅發(fā)出讀請求給存儲簇(即不發(fā)出存在指令)。
以并行方式發(fā)送存在指令或讀請求提供下述優(yōu)點在查找數(shù)據(jù)單位方面所花的時間得以減少,因為每一簇同時執(zhí)行數(shù)據(jù)單位的搜索。然而,這些同時發(fā)生的搜索消耗每一簇上的處理資源(因而影響性能),即使這樣的搜索在大多數(shù)存儲簇上會失敗。相反,串行發(fā)送存在或讀指令可增加查找數(shù)據(jù)單位所花的時間,因為存在指令在前一存儲簇上的搜索未完成之前不會發(fā)送給下一存儲簇,但存儲環(huán)境的性能不會受到很大影響,因為部分簇在存在指令或讀指令發(fā)送給這些簇之前將不需要執(zhí)行已發(fā)現(xiàn)的數(shù)據(jù)單位的搜索。每一簇內(nèi)的搜索可以任何適當(dāng)?shù)姆绞竭M(jìn)行,因為本發(fā)明不限制該方面。搜索技術(shù)的例子在上面提及的相關(guān)申請中有所描述。
為減少在搜索數(shù)據(jù)單位時由存儲簇引起的整個處理負(fù)荷,API205可配合分層搜索方法,其中簇在初始執(zhí)行相對粗略的(且非計算集中的)搜索,僅在必要時(如,在所有簇之間的粗略搜索均未導(dǎo)致成功搜索時)才執(zhí)行更徹底的搜索。
例如,如相關(guān)申請中所述,每一簇可包括識別保存在簇上的部分?jǐn)?shù)據(jù)單位的BLI。相對粗略的搜索可包括,在開始僅搜索簇中的BLI,其相對較快且比較廉價。如果環(huán)境中的所有簇的BLI搜索(或串行或并行)均失敗,則執(zhí)行更徹底的搜索。應(yīng)該意識到的是,BLI搜索僅是實現(xiàn)相對粗略的搜索的技術(shù)的一個例子,也可使用其它技術(shù),因為采用分層搜索方法的本發(fā)明的各方面并不限制在這方面。另外,應(yīng)意識到的是,在此描述的本發(fā)明的各方面不限于與具有相關(guān)申請中所示的結(jié)構(gòu)的存儲環(huán)境一起使用,且不限于采用BLI的存儲簇。
在圖2的例子中,存儲環(huán)境206被展示為具有兩個存儲簇。應(yīng)該意識到的是,這僅作為例子給出,因為存儲環(huán)境206可包括三個或更多存儲簇,因為本發(fā)明并不限制在該方面。類似地,圖2僅示出了一個主機(jī)201,其發(fā)送數(shù)據(jù)給存儲環(huán)境206并從存儲環(huán)境206接收數(shù)據(jù)。然而,應(yīng)該意識到的是,存儲環(huán)境206可與許多主機(jī)一起工作,因為本發(fā)明不限制在該方面。
在上述的環(huán)境中,涉及存儲簇的選擇以保存數(shù)據(jù)、和/或確定哪一簇保存有先前寫入的數(shù)據(jù)單位的本發(fā)明的各方面均通過API實施。然而,應(yīng)該意識到的是,該闡述僅提供用于說明性的目的,因為本發(fā)明不限制在該方面。如上所提及的,本發(fā)明的一說明性的實施例的優(yōu)點在于多個簇之間的存儲環(huán)境的實施對主機(jī)上運行的應(yīng)用程序是透明的,使得應(yīng)用程序甚至不需要意識到多個簇的存在。然而,本發(fā)明的其它方面并不限制在該方面,即多個簇的管理也可以對應(yīng)用程序不透明的方式實施。另外,無論多個簇的管理對應(yīng)用程序是透明還是不透明,這樣的管理不必須以上述的方式在API中實施,因為其也可在計算機(jī)系統(tǒng)的其它位置中實施。例如,在本發(fā)明的一實施例中,多個簇的管理可在簇自身內(nèi)實施。在該實施例中,API僅可看見一個簇,但簇能夠在它們自己之間通信以管理多個簇之間的數(shù)據(jù)分布。或者,API可看見所有簇的所有存取節(jié)點,但并不意識到這些節(jié)點被分開在兩個或更多簇之間,使得API可發(fā)送任何存取請求給任何存取節(jié)點,不管存取節(jié)點形成哪一簇的一部分。在本發(fā)明的另一實施例中,多個簇的管理可在獨立于任何簇并獨立于主機(jī)的設(shè)備中實施。設(shè)備可采用多種形式之一,且可以是形成用于使主機(jī)與存儲簇互聯(lián)的網(wǎng)絡(luò)的一部分的網(wǎng)絡(luò)組件(如路由器)。
圖3提供了實施例的一例示性表示,其中確定將數(shù)據(jù)單位保存在哪一存儲簇上(寫請求的情況)及確定先前寫入的數(shù)據(jù)單位保存在哪一存儲簇上(讀請求的情況)是由設(shè)備303進(jìn)行。設(shè)備303接收從主機(jī)301到存儲環(huán)境305的存取請求。設(shè)備303接著將存取請求發(fā)送給適當(dāng)?shù)拇鎯Υ?。設(shè)備303可以是連接(如經(jīng)網(wǎng)絡(luò))到主機(jī)301和存儲環(huán)境305的計算機(jī),其執(zhí)行功能允許在主機(jī)301上運行的應(yīng)用程序訪問作為單一存儲環(huán)境的存儲簇?;蛘?,設(shè)備303可被包括在存儲環(huán)境305內(nèi)。
設(shè)備303可使用任何適當(dāng)?shù)募夹g(shù)來確定將數(shù)據(jù)單位保存在哪一存儲簇上,及確定先前寫入的數(shù)據(jù)單位保存在哪一存儲簇上,因為本發(fā)明在該方面不限制。
從前述內(nèi)容應(yīng)該意識到的是,在圖3的實施例中,在主機(jī)301上運行的應(yīng)用程序或API甚至不必意識到存儲環(huán)境305包括多個存儲簇。另外,應(yīng)用程序或API可將數(shù)據(jù)單位寫到存儲環(huán)境305或從存儲環(huán)境305檢索數(shù)據(jù)單位,無須知道特定的數(shù)據(jù)單位保存在哪里。主機(jī)可簡單地發(fā)送存取請求給設(shè)備303,其接著確定將數(shù)據(jù)單位寫在哪里或先前寫入的數(shù)據(jù)單位保存在哪里。
在圖3的例子中,存儲環(huán)境305被展示為具有兩個存儲簇。應(yīng)該意識到的是,這僅作為例子給出,因為存儲環(huán)境305可包括三個或更多存儲簇,因為本發(fā)明并不限制在該方面。類似地,圖3僅示出了一個主機(jī)301,其發(fā)送數(shù)據(jù)給存儲環(huán)境305并從存儲環(huán)境305接收數(shù)據(jù)。然而,應(yīng)該意識到的是,存儲環(huán)境305可與許多主機(jī)一起工作,因為本發(fā)明不限制在該方面。另外,盡管圖3僅描繪了一個設(shè)備303工作于主機(jī)301和存儲環(huán)境305之間,也可使用多個設(shè)備。如此,可避免這樣的瓶頸,其中到存儲環(huán)境的所有存取請求均由一個設(shè)備處理。另外,盡管在圖2的例子中,API被采用來在主機(jī)和存儲環(huán)境之間通信,本發(fā)明的一些實施例不要求使用API并可允許應(yīng)用程序與存儲環(huán)境直接通信。
圖4提供了實施例的一例示性表示,其中存儲簇自身可確定將數(shù)據(jù)單位保存在哪一存儲簇上(寫請求的情況)及確定先前寫入的數(shù)據(jù)單位保存在哪一存儲簇上(讀請求或刪除請求的情況)。在圖4的例子中,主機(jī)401與包括兩個存儲簇405a和405b的存儲環(huán)境403通信。存儲簇405a包括多個存取節(jié)點407a-c和多個存儲節(jié)點411a-d,存儲簇405b包括多個存取節(jié)點409a-c和多個存儲節(jié)點413a-c,與上面結(jié)合圖1所述的方式大致相同。在本發(fā)明的該實施例中,至少一存儲簇知道存儲環(huán)境中其它存儲簇的存在,但每一簇均是獨立的簇(如每一簇具有獨立的軟件實用程序)。如圖4中標(biāo)記421處所示,在簇405a和405b之間有通信路徑以使它們能夠通信。該通信路徑可以任何適當(dāng)?shù)姆绞綄嵤驗楸景l(fā)明在該方面不限制。
當(dāng)存取節(jié)點407或409接收檢索數(shù)據(jù)單位的請求時,存取節(jié)點可確定所請求的數(shù)據(jù)單位是否保存在其自己的簇中。如果沒有,存取節(jié)點可發(fā)送存在指令和/或讀指令給存儲環(huán)境中的其它存儲簇,或串行或并行,以與上述大致一樣的方式。
在主機(jī)401上運行的應(yīng)用程序可發(fā)送(如經(jīng)API)存取請求給存儲簇405a和405b的存取節(jié)點407和409。在一實施例中,應(yīng)用程序和/或API不知道存取節(jié)點407和409屬于不同的存儲簇。根據(jù)應(yīng)用程序和/或API,存取節(jié)點407和409可接收存取請求,不管哪一存儲簇保存所請求的數(shù)據(jù)單位。實際上,應(yīng)用程序和/或API甚至不必知道存儲環(huán)境包括多個存儲簇,因為,在本發(fā)明的一實施例中,數(shù)據(jù)保存在存儲環(huán)境上的哪里對應(yīng)用程序和/或API是透明的。
當(dāng)存取節(jié)點407或409從主機(jī)401接收寫數(shù)據(jù)單位的請求時,存取節(jié)點可確定是否將數(shù)據(jù)單位保存在其自己的簇上或發(fā)送數(shù)據(jù)單位給另一簇用于保存。這樣的確定可基于任何適當(dāng)?shù)囊蛩剡M(jìn)行,這些因素的例子已在上面給出(如循環(huán)方案、將要保存的數(shù)據(jù)的大小或類型、每一存儲簇上的可用容量、每一存儲簇上的當(dāng)前處理負(fù)荷)。
或者,代替允許應(yīng)用程序和/或API發(fā)送請求給存儲環(huán)境中的任何存取節(jié)點,應(yīng)用程序和/或API可僅被允許發(fā)送存取請求給一個存儲簇(如簇405a)的存取節(jié)點。該存儲簇的存取節(jié)點接著負(fù)責(zé)將數(shù)據(jù)寫到存儲簇或從存儲簇檢索數(shù)據(jù),和/或存儲環(huán)境中的其它存儲簇,其中存取節(jié)點不是該存儲簇的一部分。
在一實施例中,本發(fā)明的各方面可用于相關(guān)申請中所述的可內(nèi)容尋址的存儲(CAS)環(huán)境。在可內(nèi)容尋址的存儲環(huán)境中,數(shù)據(jù)通過使用基于數(shù)據(jù)自身的內(nèi)容而產(chǎn)生的內(nèi)容地址保存。內(nèi)容地址可通過對將被保存的數(shù)據(jù)應(yīng)用散列函數(shù)而產(chǎn)生。散列函數(shù)的輸出可用作內(nèi)容地址的至少一部分,其用在主機(jī)和存儲環(huán)境之間的通信以指引數(shù)據(jù)。內(nèi)容地址可被映射(如存儲環(huán)境內(nèi))到存儲環(huán)境內(nèi)的一個或多個物理存儲位置。
在CAS應(yīng)用程序定義的體系結(jié)構(gòu)中的數(shù)據(jù)單位被稱為二進(jìn)制大對象。如圖5中所示,二進(jìn)制大對象503可以是將由主機(jī)保存在存儲環(huán)境(如存儲環(huán)境105)上的二進(jìn)制數(shù)據(jù)單位,如病人x光照片、公司財務(wù)記錄、或任何其它類型的數(shù)據(jù)。當(dāng)二進(jìn)制大對象503被保存到可內(nèi)容尋址的存儲環(huán)境時,基于其內(nèi)容可產(chǎn)生二進(jìn)制大對象503的唯一地址。
每一二進(jìn)制大對象503具有至少一與其關(guān)聯(lián)的內(nèi)容描述符文件(CDF)501。CDF501可包括元數(shù)據(jù)505和多個索引507a、507b、…、507n。CDF可索引一個或多個二進(jìn)制大對象或其它CDF。因此,索引507可以索引二進(jìn)制大對象和/或由CDF501索引的CDF。元數(shù)據(jù)505可包括CDF501的創(chuàng)建日期(如CDF501被保存在存儲環(huán)境上的日期)、二進(jìn)制大對象503的內(nèi)容的描述、和/或其它信息。
如上所述,存儲環(huán)境可采用無用存儲單元收集實用程序清除可刪除的二進(jìn)制大對象及CDF。在相關(guān)申請中描述的系統(tǒng)的一種實施方式中,二進(jìn)制大對象或CDF在其未被任何CDF索引時即可以刪除。
二進(jìn)制大對象及它們對應(yīng)的CDF可分開寫到存儲環(huán)境。根據(jù)本發(fā)明的一實施例,二進(jìn)制大對象及索引其的CDF可被保存在不同的存儲簇上。當(dāng)用在采用無用存儲單元收集實用程序的系統(tǒng)上時這可能帶來挑戰(zhàn),其中無用存儲單元收集程序依賴于指向二進(jìn)制大對象的CDF不存在以刪除二進(jìn)制大對象,且響應(yīng)于CDF的刪除而更新任何先前索引的二進(jìn)制大對象從而刪除指向CDF的指針。例如,當(dāng)CDF被刪除且其索引的任何二進(jìn)制大對象保存在不同的存儲簇上時,無用存儲單元收集實用程序可首先搜索所索引的二進(jìn)制大對象的CDF保存于其上的存儲簇。當(dāng)在該存儲簇上沒有發(fā)現(xiàn)所索引的二進(jìn)制大對象時,可在其它存儲簇上查找二進(jìn)制大對象(如經(jīng)存在指令和/或讀請求),并向保存二進(jìn)制大對象的存儲簇指示被刪除的CDF的索引應(yīng)被去除。在簇之間通信方面,該過程可導(dǎo)致很高的額外開銷。此外,在某些實施例中,可能希望每一存儲簇不知道存儲環(huán)境中還有其它相關(guān)的存儲簇,使得在CDF被刪除時,對于索引的二進(jìn)制大對象,簇不知道指望其它簇。
在本發(fā)明的一實施例中,上述挑戰(zhàn)通過將二進(jìn)制大對象和索引二進(jìn)制大對象的CDF保存在同一存儲簇上而得以減輕。這可以任何適當(dāng)?shù)姆绞綄崿F(xiàn)。例如,可使用上面結(jié)合附圖2-4所述的相同布局算法,但二進(jìn)制大對象及索引二進(jìn)制大對象的CDF在單獨寫事務(wù)處理時可被寫到存儲環(huán)境,使得二進(jìn)制大對象及CDF可被寫到同一存儲簇。在隨后的時間,如果索引二進(jìn)制大對象的另外的CDF被寫到存儲環(huán)境,確定用于保存另外的CDF的位置的實體(如API、設(shè)備或存儲簇)可首先確定哪一存儲簇保存二進(jìn)制大對象,并接著將另外的CDF保存在相同的存儲簇上。
在本發(fā)明的一實施例中,設(shè)備程序通過僅保存CDF的內(nèi)容地址而追蹤先前保存的數(shù)據(jù),但不追蹤其索引的二進(jìn)制大對象的內(nèi)容地址,因為該信息可從對應(yīng)的CDF檢索。因而,要存取二進(jìn)制大對象,應(yīng)用程序可請求索引二進(jìn)制大對象的CDF的檢索。應(yīng)用程序可接收所請求的CDF并確定由CDF索引的二進(jìn)制大對象的內(nèi)容地址。應(yīng)用程序接著可使用該內(nèi)容地址發(fā)送用于二進(jìn)制大對象的讀請求。在本發(fā)明的一實施例中,因為二進(jìn)制大對象和CDF均被保存在相同的存儲簇上,發(fā)送CDF的讀請求的實體可將二進(jìn)制大對象的讀請求發(fā)送給相同的存儲簇,無須執(zhí)行搜索來確定哪一存儲簇保存二進(jìn)制大對象。
在本發(fā)明的另一實施例中,代替使用搜索技術(shù)來查找保存在存儲環(huán)境上的數(shù)據(jù),可使用公知的固有位置尋址的概念。固有位置尋址涉及基于數(shù)據(jù)單位的內(nèi)容地址將數(shù)據(jù)單位放置在特定的存儲簇上。因而,當(dāng)數(shù)據(jù)單位隨后被讀取時,不必執(zhí)行搜索來確定數(shù)據(jù)單位保存在哪一存儲簇上。而是,保存數(shù)據(jù)單位的存儲簇可基于數(shù)據(jù)單位的內(nèi)容地址而再次被確定。
例如,選擇的內(nèi)容地址位可用于將數(shù)據(jù)單位保存在哪一存儲簇上。每一存儲簇可被分配以將要保存的地址范圍。例如,數(shù)據(jù)單位的內(nèi)容地址的第一字符可確定數(shù)據(jù)單位將被保存在哪一存儲簇上。圖6的存儲環(huán)境包括三個存儲簇。當(dāng)?shù)谝蛔址恰癆”-“I”時,數(shù)據(jù)單位可被保存在存儲簇601上,當(dāng)?shù)谝蛔址恰癑”-“R”時,保存在存儲簇603上,當(dāng)?shù)谝蛔址恰癝”-“Z”時,保存在存儲簇605上。應(yīng)該意識到的是,該例子是說明性的,并不是限制性的。例如,不必須是第一字符被檢查以確定存儲簇,范圍可不同于所示的范圍,使得它們不必是大約相同的大小且不必鄰接。
如上所述,數(shù)據(jù)單位的內(nèi)容地址可基于,至少部分基于數(shù)據(jù)單位的內(nèi)容地址,并可以任何適當(dāng)?shù)姆绞疆a(chǎn)生,因為本發(fā)明在這方面不限制。例如,數(shù)據(jù)單位可使用散列算法如MD5而被散列,以產(chǎn)生內(nèi)容地址的一部分。內(nèi)容地址可包括其它信息如時間戳,其指明數(shù)據(jù)單位是何時被首次寫到存儲環(huán)境的,和/或保證的唯一標(biāo)識符(GUID),其確保內(nèi)容地址是唯一的,如相關(guān)申請中所述。因此,如圖7中所示,內(nèi)容地址701可包括散列值、時間戳、及GUID。
在某些情況下,將被寫入的數(shù)據(jù)單位可能太大而不能在希望選擇存儲簇上的存儲位置來保存數(shù)據(jù)單位之前計算散列值。例如,存儲環(huán)境可能不具有足夠大的緩沖器來在計算數(shù)據(jù)單位的散列的同時保存全部數(shù)據(jù)單位。因此,在本發(fā)明的一實施例中,采用技術(shù)來使能在內(nèi)容地址的散列值被計算以前選擇存儲簇之一中的存儲位置。
在某些情形下,因為散列值可能不可用于選擇保存數(shù)據(jù)單位的存儲簇,因而希望使用內(nèi)容地址的另一部分(如時間戳或GUID部分)來選擇適當(dāng)?shù)拇鎯Υ?。如相關(guān)申請中所述,使用時間戳信息在提供數(shù)據(jù)單位的索引的暫時位置方面可能是有利的,其在大致相同的時間內(nèi)被寫入存儲系統(tǒng)如一簇。然而,希望不使所有數(shù)據(jù)單位在大約相同的時間被寫到相同的簇,因為這將通過阻止簇并行處理寫請求而對性能產(chǎn)生負(fù)面影響。因此,如圖8中所示,為確保用于選擇存儲簇的內(nèi)容地址的部分(如時間戳)足夠隨機(jī),內(nèi)容地址的該部分可在標(biāo)記803處使用算法(MD5或任何其它適當(dāng)?shù)乃惴?而被散列以產(chǎn)生位置標(biāo)識符805。位置標(biāo)識符805的部分807(或所有)可用于確定哪一存儲簇應(yīng)被用于保存數(shù)據(jù)單位。如此,可采用散列算法的偽隨機(jī),使得部分807足夠隨機(jī)以具有用于同時被寫的數(shù)據(jù)單位的跨存儲簇的偶分布。
在一實施例中,位置標(biāo)識符805未被保存來幫助檢索數(shù)據(jù)單位。而是,當(dāng)希望讀數(shù)據(jù)單位時,內(nèi)容地址的部分801可被再次散列以產(chǎn)生位置標(biāo)識符805,且位置標(biāo)識符的部分807可用于確定數(shù)據(jù)單位保存在哪一存儲簇上。
應(yīng)該意識到的是,當(dāng)發(fā)出數(shù)據(jù)單位的讀請求時,用以選擇存儲簇來保存數(shù)據(jù)單位的固有位置尋址技術(shù)的使用避免了執(zhí)行搜索來查找數(shù)據(jù)單位的需要。
應(yīng)該意識到的是,當(dāng)與如上所述的采用二進(jìn)制大對象、CDF、及無用存儲單元收集使用程序的可內(nèi)容尋址的存儲系統(tǒng)一起使用時,固有位置尋址技術(shù)的使用可導(dǎo)致二進(jìn)制大對象及相應(yīng)的CDF保存在不同的簇上,其可帶來如上所述的挑戰(zhàn)。因此,本發(fā)明的一實施例致力于使用固有位置選擇存儲簇保存數(shù)據(jù)單位的技術(shù)與確保CDF及其索引的二進(jìn)制大對象保存在相同存儲簇上的技術(shù)的結(jié)合。在一實施例中,確保二進(jìn)制大對象及其CDF保存在相同簇上的技術(shù)包括在CDF及其索引的二進(jìn)制大對象的內(nèi)容地址中使用共同的標(biāo)識符,及使用該共同的標(biāo)識符確定將CDF及其索引的二進(jìn)制大對象保存在哪一存儲簇上。
例如,CDF及其索引的二進(jìn)制大對象在它們的內(nèi)容地址中可被提供以相同的GUID。該GUID的一部分(或GUID的散列的一部分)可用于確定將數(shù)據(jù)單位保存在哪一存儲簇上,使得具有相同的GUID的CDF及二進(jìn)制大對象將映射到相同的存儲簇。例如,圖9示出了索引兩二進(jìn)制大對象903和905的CDF901。根據(jù)本發(fā)明的一實施例,這三個數(shù)據(jù)單位按如下保存在相同的存儲簇上。首先,應(yīng)用程序(如圖2中的203)將二進(jìn)制大對象903發(fā)送給存儲環(huán)境。在主機(jī)201具有API以與存儲環(huán)境接口的那些實施例中,API可產(chǎn)生作為二進(jìn)制大對象903的內(nèi)容地址的一部分的GUID。用于選擇存儲簇的設(shè)備(如API205、設(shè)備303、或簇之一)可選擇將二進(jìn)制大對象903保存在哪一存儲簇上。應(yīng)用程序接著將二進(jìn)制大對象905發(fā)送給API。因為API尚未接收到CDF,API認(rèn)可二進(jìn)制大對象903和905是同一事務(wù)處理的一部分(即二者為同一CDF索引)并可在二進(jìn)制大對象905的內(nèi)容地址中使用相同的GUID。從而,二進(jìn)制大對象903和905將被保存在相同的存儲簇上。應(yīng)用程序接著將CDF901發(fā)送給API以保存在存儲環(huán)境上。API對CDF的接收向API指明CDF是事務(wù)處理中的最后數(shù)據(jù)單位。因而,API分配相同的GUID給CDF901的內(nèi)容地址,使得CDF901保存在與二進(jìn)制大對象903和905相同的存儲簇上。
在一實施例中,在沒有通過相應(yīng)的CDF存取二進(jìn)制大對象的情況下,其不能由應(yīng)用程序直接存取。因此,必須首先讀CDF。根據(jù)該實施例,GUID可被包括在CDF的內(nèi)容地址中并用于查找CDF保存在哪一存儲簇上以有助于讀CDF,但GUID不必被提供在二進(jìn)制大對象的內(nèi)容地址中,因為負(fù)責(zé)查找二進(jìn)制大對象被保存在哪一存儲簇上的實體將認(rèn)為二進(jìn)制大對象被保存在與先前讀取的CDF相同的存儲簇上。
當(dāng)新的存儲簇被添加到存儲環(huán)境時,可能希望改變用于確定數(shù)據(jù)單位被保存在哪一存儲簇上的選擇算法,使得得到跨所有存儲簇的數(shù)據(jù)單位的偶分布。例如,如果在存儲環(huán)境中有三個存儲簇,選擇算法如GUID(在內(nèi)容地址中)模數(shù)3可用于確定內(nèi)容保存在哪一存儲簇上。如果第四存儲簇被添加,則可能希望將算法改變?yōu)镚UID模數(shù)4。然而,如果在添加新的簇之后,在讀數(shù)據(jù)單位時,新算法被用于內(nèi)容地址,在算法中的改變之前,新算法可能不會正確地查找已保存在存儲環(huán)境上的數(shù)據(jù)單位。
因而,本發(fā)明的一實施例致力于保留指明什么樣的算法正進(jìn)行先前保存的數(shù)據(jù)單位的簇的選擇的信息。在一實施例中,該信息在某些時間段期間識別所使用的選擇算法。因為數(shù)據(jù)單位的內(nèi)容地址可包括時間戳,所以時間戳信息可用于索引到該信息,以確定在數(shù)據(jù)單位被保存時是什么算法在其位。該算法可被應(yīng)用于內(nèi)容地址的適當(dāng)部分以確定數(shù)據(jù)單位保存在哪一存儲簇上。
指明在某些時間段期間使用什么算法的信息的例子如圖10中所示。在圖10中,行1001指明特定選擇算法的時間幀,并指明算法從時間“-1”到時間“1019922093021”被使用。值-1指明存儲環(huán)境存在的開始。行1003指明在行1001指明的時間幀期間什么算法有效,且在圖10的例子中,指正使用稱為快速二進(jìn)制大對象命名(Fast BlobNaming)或FBN的算法。在FBN算法中,內(nèi)容地址的散列值和時間戳的模數(shù)被用于確定數(shù)據(jù)單位應(yīng)保存在哪一存儲簇上?!癿od”指示符指明在FBN算法中使用的模數(shù)值。因而,例如,在行1003,散列值和時間戳模數(shù)1的算法被使用。結(jié)果字段指明算法的哪一結(jié)果對應(yīng)于哪一存儲簇。在行1003的例子中,當(dāng)使用模數(shù)1時,唯一可能的結(jié)果是0。因此,當(dāng)結(jié)果是0時,數(shù)據(jù)單位保存在存儲簇C1上。
行1005指明在時間段“101992093021”和“101998383838”之間是新的算法有效。如行1007和1009所示,在該時間段期間FBN算法與模數(shù)2一起使用,使得當(dāng)模數(shù)運算的結(jié)果是0時,數(shù)據(jù)單位保存在簇C1上,當(dāng)模數(shù)運算的結(jié)果是1時,數(shù)據(jù)單位保存的簇C2上。
數(shù)據(jù)單位的內(nèi)容地址的時間戳可用于確定在查找數(shù)據(jù)單位時使用哪一算法。例如,如果數(shù)據(jù)單位的時間戳為10199209566,該時間戳落在行1005指明的時間段內(nèi)。因此,由行1007和行1009指明的算法可被用于確定哪一存儲簇保存該數(shù)據(jù)單位。
行1011指在時間“101998383838”時是新的算法有效,結(jié)束時間“-1”指算法在當(dāng)前有效。行1013、1015、1017、1019、和1021指在FBN算法中使用了模數(shù)值5,且在當(dāng)前使用三個簇(即簇C1、C2、C3)。行1013指,如果散列值和時間戳模數(shù)5的結(jié)果是0,則數(shù)據(jù)單位保存在簇C1上。如果結(jié)果是1或2,則數(shù)據(jù)單位保存在簇C2上。如果結(jié)果是3或4,則數(shù)據(jù)單位保存在簇C3上。因此,行1013-1021提供了在存儲環(huán)境中存儲簇可怎樣被加權(quán)的例子,使得一些存儲簇較其它存儲簇保存更多的數(shù)據(jù)單位。如此,如果在存儲環(huán)境中一存儲簇具有較另一存儲簇小的可用容量,或用于任何其它想要的目的,加權(quán)簇是令人滿意的。
因此,在圖10的例子中,在計算散列值和時間戳模數(shù)5的5個可能結(jié)果中,只有一個結(jié)果(即0)可導(dǎo)致數(shù)據(jù)單位保存在簇C1上,兩個結(jié)果(即1和2)導(dǎo)致數(shù)據(jù)單位保存在簇C2上,剩下的兩個結(jié)果(即3和4)導(dǎo)致數(shù)據(jù)單位保存在簇C3上。因此,使用該算法處理的數(shù)據(jù)單位的大約五分之一保存在簇C1上,大約五分之二保存在簇C2上,及五分之二保存在簇C3上。
應(yīng)該意識到的是,在此描述的用于選擇特定存儲簇的各種技術(shù)可與用于在簇內(nèi)選擇存儲位置的任何適當(dāng)技術(shù)一起使用,因為本發(fā)明在該方面不限制。例如,固有位置尋址技術(shù)可用于選擇存儲簇,而不是簇內(nèi)的存儲位置;或者,反之亦然,因為任何成對的選擇技術(shù)均可使用。
本發(fā)明的上述實施例可以多種方式實施。例如,實施例可使用硬件、軟件或其結(jié)合實現(xiàn)。當(dāng)實施為軟件時,軟件代碼可在任何適當(dāng)?shù)奶幚砥骰蛱幚砥鹘M上運行,無論是提供在單一計算機(jī)中還是分布在多個計算機(jī)之間。應(yīng)該意識到的是,實現(xiàn)上述功能的任何組件或組件集合可在種屬上被當(dāng)作一個或多個控制在此論述的功能的控制器。一個或多個控制器可以多種方式實現(xiàn),如使用專用硬件,或使用通用硬件(如一個或多個處理器),其被使用微代碼或軟件編程以執(zhí)行上述功能。
在這方面,應(yīng)意識到的是,本發(fā)明的實施例的一實施方式包括至少一計算機(jī)可讀的介質(zhì)(如計算機(jī)存儲器、軟盤、光盤、帶等),其被編碼以計算機(jī)程序(即多個指令),當(dāng)程序在處理器上運行時,執(zhí)行本發(fā)明的實施例的上述功能。計算機(jī)可讀介質(zhì)可被移動,使得保存于其上的程序可被裝載到任何計算機(jī)環(huán)境資源上以實施在此論述的本發(fā)明的各個方面。此外,應(yīng)意識到的是,運行時執(zhí)行上述功能的計算機(jī)程序并不限于主機(jī)上運行的應(yīng)用程序。而是,術(shù)語計算機(jī)程序以一般意義使用于此,指可被用于編程處理器以執(zhí)行本發(fā)明的上述各方面的任何類型的計算機(jī)代碼(如軟件或微代碼)。
應(yīng)意識到的是,根據(jù)本發(fā)明的幾個實施例,其中過程在計算機(jī)可讀介質(zhì)中實施,在計算機(jī)實施的過程的運行期間,其可接收人工輸入(如從用戶)。
在上述的各個例子中,內(nèi)容地址被描述為包括文字字符“A”-“Z”。應(yīng)理解的是,這些內(nèi)容地址近作為例子給出,內(nèi)容地址可包括任何文字?jǐn)?shù)字字符、位串、或任何其它適當(dāng)?shù)淖址?,因為本發(fā)明在該方面不限制。
在此使用的措辭和術(shù)語僅用于描述的目的,不應(yīng)被認(rèn)為是限制?!鞍ā?、“包含”、“具有”、“含有”、“包含”的使用及其各種變化意為包含其后列出的項目及另外的項目。
已詳細(xì)描述了本發(fā)明的幾個實施例,對于本領(lǐng)域的技術(shù)人員,各種修改和改進(jìn)將很容易進(jìn)行。這樣的修改和改進(jìn)應(yīng)被認(rèn)為是在本發(fā)明的實質(zhì)和范圍之內(nèi)。因而,前述描述僅是示例性的,并不是限制。本發(fā)明僅限定為權(quán)利要求及其等價物確定的范圍。
權(quán)利要求
1.編碼以指令的至少一計算機(jī)可讀介質(zhì),當(dāng)指令在計算機(jī)系統(tǒng)上執(zhí)行時,實現(xiàn)對保存在包括多個存儲簇的存儲環(huán)境中的數(shù)據(jù)單位進(jìn)行存取的方法,其中計算機(jī)系統(tǒng)包括存儲環(huán)境及將數(shù)據(jù)保存在存儲環(huán)境上的主機(jī),且其中該方法包括行為從主機(jī)接收請求以查找先前保存在存儲環(huán)境中的數(shù)據(jù)單位;及響應(yīng)于請求的接收,確定數(shù)據(jù)單位保存在多個存儲簇中的哪一個上。
2.根據(jù)權(quán)利要求1所述的至少一計算機(jī)可讀介質(zhì),其中主機(jī)運行將數(shù)據(jù)保存到存儲環(huán)境及從存儲環(huán)境檢索數(shù)據(jù)的應(yīng)用程序,其中主機(jī)運行應(yīng)用程序編程接口程序以將應(yīng)用程序?qū)拥酱鎯Νh(huán)境,且其中接收行為由應(yīng)用程序編程接口程序完成。
3.根據(jù)權(quán)利要求1所述的至少一計算機(jī)可讀介質(zhì),其中計算機(jī)系統(tǒng)還包括至少一將存儲環(huán)境連接到主機(jī)的通信鏈路及監(jiān)控從主機(jī)到存儲環(huán)境的存取請求的設(shè)備,且其中接收請求的行為還包括在設(shè)備處從應(yīng)用程序接收請求的行為。
4.根據(jù)權(quán)利要求3所述的至少一計算機(jī)可讀介質(zhì),其中檢測行為由設(shè)備執(zhí)行。
5.根據(jù)權(quán)利要求3所述的至少一計算機(jī)可讀介質(zhì),其中接收請求的行為還包括在多個存儲簇的至少之一處接收請求的行為。
6.根據(jù)權(quán)利要求5所述的至少一計算機(jī)可讀介質(zhì),其中多個存儲簇中的至少之一包括至少一接收和處理存取請求的存取節(jié)點,且其中在多個存儲簇的至少之一處從應(yīng)用程序接收請求的行為還包括在至少一存取節(jié)點處的接收行為。
7.根據(jù)權(quán)利要求1所述的至少一計算機(jī)可讀介質(zhì),其中確定行為包括在多個存儲簇上執(zhí)行搜索數(shù)據(jù)單位的行為。
8.根據(jù)權(quán)利要求1所述的至少一計算機(jī)可讀介質(zhì),其中確定行為由多個存儲簇中的至少之一執(zhí)行。
9.根據(jù)權(quán)利要求1所述的至少一計算機(jī)可讀介質(zhì),其中確定行為包括在多個存儲簇中的至少之一上查找數(shù)據(jù)單位,但不執(zhí)行搜索。
10.根據(jù)權(quán)利要求1所述的至少一計算機(jī)可讀介質(zhì),其中存儲環(huán)境是可內(nèi)容尋址的存儲環(huán)境,其中保存在存儲環(huán)境中的數(shù)據(jù)單位通過內(nèi)容地址可存取,內(nèi)容地址至少部分基于數(shù)據(jù)單位的內(nèi)容的至少一部分,且其中確定行為還包括基于數(shù)據(jù)單位的內(nèi)容地址確定數(shù)據(jù)單位保存在多個存儲簇的哪一個上。
11.根據(jù)權(quán)利要求10所述的至少一計算機(jī)可讀介質(zhì),其中內(nèi)容地址包括基于數(shù)據(jù)單位是何時保存在存儲環(huán)境中的時間信息,且確定行為包括至少部分基于數(shù)據(jù)單位的內(nèi)容地址的時間信息確定數(shù)據(jù)單位保存在多個存儲簇的哪一個上的行為。
12.根據(jù)權(quán)利要求11所述的至少一計算機(jī)可讀介質(zhì),其中確定行為還包括至少部分基于數(shù)據(jù)單位的內(nèi)容地址的時間信息的散列值確定數(shù)據(jù)單位保存在多個存儲簇的哪一個上的行為。
13.根據(jù)權(quán)利要求10所述的至少一計算機(jī)可讀介質(zhì),其中確定行為還包括行為存取指定算法的信息,該算法被用于基于數(shù)據(jù)單位的內(nèi)容地址選擇數(shù)據(jù)單位保存在多個存儲簇中的哪一個上;及將算法應(yīng)用到數(shù)據(jù)單位的內(nèi)容地址以確定數(shù)據(jù)單位保存在多個存儲簇中的哪一個上。
14.根據(jù)權(quán)利要求13所述的至少一計算機(jī)可讀介質(zhì),其中所述信息指明由存儲環(huán)境使用的多個算法,且在其時間段期間,多個算法中的每一個被用于保存數(shù)據(jù)單位。
15.根據(jù)權(quán)利要求14所述的至少一計算機(jī)可讀介質(zhì),其中在多個算法之一有效時,所述信息還為多個算法的每一個指定在時間段期間在存儲環(huán)境中的至少一存儲簇。
16.編碼以指令的至少一計算機(jī)可讀介質(zhì),當(dāng)指令在計算機(jī)系統(tǒng)上執(zhí)行時,實現(xiàn)對保存在包括多個存儲簇的存儲環(huán)境中的數(shù)據(jù)單位進(jìn)行存取的方法,其中計算機(jī)系統(tǒng)包括存儲環(huán)境及將數(shù)據(jù)保存在存儲環(huán)境上的主機(jī),且其中該方法包括行為從在主機(jī)上運行的應(yīng)用程序接收請求以保存數(shù)據(jù)單位;及響應(yīng)于請求的接收,選擇多個存儲簇之一以保存數(shù)據(jù)單位,其中保存是以對應(yīng)用程序透明的方式進(jìn)行,使得應(yīng)用程序不被使得知道是多個存儲簇中的所選擇的簇保存數(shù)據(jù)單位。
17.根據(jù)權(quán)利要求16所述的至少一計算機(jī)可讀介質(zhì),其中主機(jī)還運行應(yīng)用程序編程接口程序以將應(yīng)用程序?qū)拥酱鎯Νh(huán)境,且其中接收行為由應(yīng)用程序編程接口程序完成。
18.根據(jù)權(quán)利要求16所述的至少一計算機(jī)可讀介質(zhì),其中計算機(jī)系統(tǒng)還包括至少一將存儲環(huán)境連接到主機(jī)、連接到存儲環(huán)境的通信鏈路及監(jiān)控來自主機(jī)的存取請求的設(shè)備,且其中接收請求的行為還包括在設(shè)備處從應(yīng)用程序接收請求的行為。
19.根據(jù)權(quán)利要求16所述的至少一計算機(jī)可讀介質(zhì),其中接收請求的行為還包括直接從應(yīng)用程序接收請求的行為。
20.根據(jù)權(quán)利要求19所述的至少一計算機(jī)可讀介質(zhì),其中從應(yīng)用程序接收請求的行為還包括在多個存儲簇的至少之一處接收請求的行為。
21.根據(jù)權(quán)利要求16所述的至少一計算機(jī)可讀介質(zhì),其中選擇行為還包括使用循環(huán)技術(shù)選擇多個存儲簇之一來保存數(shù)據(jù)單位是行為。
22.根據(jù)權(quán)利要求16所述的至少一計算機(jī)可讀介質(zhì),其中選擇行為還包括至少部分基于多個存儲簇的每一個的可用存儲容量選擇多個存儲簇之一保存數(shù)據(jù)單位的行為。
23.根據(jù)權(quán)利要求16所述的至少一計算機(jī)可讀介質(zhì),其中選擇行為還包括基于多個存儲簇中的至少之一的負(fù)荷選擇多個存儲簇之一來保存數(shù)據(jù)單位的行為。
24.根據(jù)權(quán)利要求16所述的至少一計算機(jī)可讀介質(zhì),其中選擇行為還包括基于數(shù)據(jù)單位的大小選擇多個存儲簇之一保存數(shù)據(jù)單位的行為。
25.根據(jù)權(quán)利要求16所述的至少一計算機(jī)可讀介質(zhì),其中存儲環(huán)境是可內(nèi)容尋址的存儲環(huán)境,其中保存在存儲環(huán)境中的數(shù)據(jù)單位通過內(nèi)容地址可存取,內(nèi)容地址至少部分基于數(shù)據(jù)單位的內(nèi)容的至少一部分,且其中選擇行為還包括基于數(shù)據(jù)單位的內(nèi)容地址選擇多個存儲簇之一來保存數(shù)據(jù)單位的行為。
26.根據(jù)權(quán)利要求25所述的至少一計算機(jī)可讀介質(zhì),其中內(nèi)容地址包括基于數(shù)據(jù)單位是何時保存在存儲環(huán)境中的時間信息,且選擇行為包括至少部分基于數(shù)據(jù)單位的內(nèi)容地址的時間信息選擇多個存儲簇之一來保存數(shù)據(jù)單位的行為。
27.根據(jù)權(quán)利要求26所述的至少一計算機(jī)可讀介質(zhì),其中選擇行為還包括至少部分基于數(shù)據(jù)單位的內(nèi)容地址的時間信息的散列值選擇多個存儲簇之一來數(shù)據(jù)單位的行為。
28.根據(jù)權(quán)利要求27所述的至少一計算機(jī)可讀介質(zhì),其中選擇行為還包括至少部分基于GUID的散列選擇多個存儲簇之一來保存數(shù)據(jù)單位的行為。
29.根據(jù)權(quán)利要求25所述的至少一計算機(jī)可讀介質(zhì),其中選擇行為還包括行為將算法應(yīng)用到數(shù)據(jù)單位的內(nèi)容地址以確定將數(shù)據(jù)單位保存在多個存儲簇中的哪一個上;將算法保存在記錄中,其指明算法在使用的時間幀。
30.根據(jù)權(quán)利要求29所述的至少一計算機(jī)可讀介質(zhì),其中記錄指明由存儲環(huán)境使用的多個算法,且在其時間段期間,多個算法中的每一個被用于保存數(shù)據(jù)單位。
全文摘要
本發(fā)明提供了用于增加數(shù)據(jù)存儲環(huán)境的存儲容量的環(huán)境及方法。在不影響每一單個存儲簇的性能的情況下可添加另外的存儲簇到存儲環(huán)境。當(dāng)數(shù)據(jù)被寫到存儲環(huán)境時,可進(jìn)行哪一存儲簇用以保存數(shù)據(jù)的選擇。當(dāng)從存儲環(huán)境讀數(shù)據(jù)時,可確定哪一存儲簇在保存數(shù)據(jù)且可從該存儲簇檢索數(shù)據(jù)。
文檔編號G06F17/30GK1664790SQ200510051119
公開日2005年9月7日 申請日期2005年2月28日 優(yōu)先權(quán)日2004年2月26日
發(fā)明者斯蒂芬·托德, 邁克爾·基利恩, 湯姆·特格爾斯, 簡·范里爾, 卡爾·達(dá)哈魯因, 克里斯托弗·布昂 申請人:伊姆西公司