用于管理存儲器中的數(shù)據(jù)的系統(tǒng)和方法
【專利摘要】本發(fā)明涉及一種用于管理存儲器中的數(shù)據(jù)的系統(tǒng)和方法。提供一種用于處理將記錄添加到日志的命令的失敗的計算機程序產(chǎn)品、系統(tǒng)和方法。所述日志在日志地址處具有記錄。所述日志中的每個記錄具有鍵和值,并且所述日志地址映射到所述存儲器中的物理地址。發(fā)送用于所述日志中指定日志地址處的記錄的要添加到所述日志中選定日志地址的鍵和值對的第一命令。響應(yīng)于未接收到所述選定日志地址,發(fā)送設(shè)置了重發(fā)參數(shù)的用于所述指定日志地址處的所述記錄的所述鍵和值對的第二命令。響應(yīng)于接收設(shè)置了所述重發(fā)參數(shù)的所述第二命令,掃描所述日志以確定具有所述鍵和值對的日志地址。返回所確定的日志地址。
【專利說明】
用于管理存儲器中的數(shù)據(jù)的系統(tǒng)和方法
技術(shù)領(lǐng)域
[0001 ]本發(fā)明涉及一種用于處理將記錄添加到日志的命令的失敗的計算機程序產(chǎn)品、系統(tǒng)和方法。
【背景技術(shù)】
[0002]在日志結(jié)構(gòu)化存儲系統(tǒng)中,對數(shù)據(jù)的更新未被就地寫入,而是被寫入到新的邏輯和物理地址。數(shù)據(jù)可以存儲在鍵-值存儲庫中,其中數(shù)據(jù)存儲在非結(jié)構(gòu)化記錄中,非結(jié)構(gòu)化記錄包括與該記錄關(guān)聯(lián)的鍵加上值。日志中具有記錄的鍵和日志地址的索引可以用于針對該記錄在日志中查找日志地址。每個索引條目具有在命名空間或數(shù)據(jù)集中唯一的索引鍵以及日志中的數(shù)據(jù)的地址。
[0003]在日志結(jié)構(gòu)化存儲器中,更新被寫入日志的一端,并且保持日志中的記錄的先前版本。當(dāng)日志中的日志地址處的條目不再具有標(biāo)識該日志地址的對應(yīng)索引條目時,日志中的條目被認為未使用并且可以被執(zhí)行垃圾收集。
【發(fā)明內(nèi)容】
[0004]提供一種用于處理將記錄添加到日志的命令的失敗的計算機程序產(chǎn)品、系統(tǒng)和方法。所述日志在日志地址處具有記錄。所述日志中的每個記錄具有鍵和值,并且所述日志地址映射到存儲器中的物理地址。發(fā)送用于所述日志中指定日志地址處的記錄的要添加到所述日志中選定日志地址的鍵和值對的第一命令。響應(yīng)于未接收到所述選定日志地址,發(fā)送設(shè)置了重發(fā)參數(shù)的用于所述指定日志地址處的所述記錄的所述鍵和值對的第二命令。響應(yīng)于接收設(shè)置了所述重發(fā)參數(shù)的所述第二命令,掃描所述日志以判定在所述指定日志地址之后是否存在具有所述第二命令的所述鍵和值對的已確定的日志地址。響應(yīng)于判定所述已確定的日志地址具有所述第二命令的所述鍵和值對,返回所述已確定的日志地址。
【附圖說明】
[0005]圖1示出存儲環(huán)境的一個實施例;
[0006]圖2示出索引條目的一個實施例;
[0007]圖3示出日志存儲器中的記錄的一個實施例;
[0008]圖4示出邏輯到物理映射的一個實施例;
[0009]圖5示出PUT命令的一個實施例;
[0010]圖6示出用于發(fā)送將記錄添加到日志的命令的操作的一個實施例;
[0011 ]圖7示出用于處理將記錄添加到日志的命令的操作的一個實施例;以及
[0012]圖8示出可以應(yīng)用本發(fā)明的實施例的計算系統(tǒng)的框圖。
【具體實施方式】
[0013]如果從一個系統(tǒng)發(fā)送將記錄添加到在另一個系統(tǒng)上維護的日志的命令,則可能可以將記錄添加到日志,但發(fā)送命令的系統(tǒng)并未接收記錄被成功添加到日志的確認。如果發(fā)送系統(tǒng)只是重發(fā)命令,并且如果接收命令的系統(tǒng)在首次發(fā)送命令時成功將記錄添加到日志并且然后針對重發(fā)的命令再次將重發(fā)的相同記錄添加到日志,則可能在日志中兩次定位相同記錄。如果系統(tǒng)僅將記錄的一個重復(fù)副本識別為記錄的當(dāng)前或?qū)崟r版本,則在具有垃圾收集的系統(tǒng)中的崩潰恢復(fù)之后,這些重復(fù)的日志條目可能導(dǎo)致錯誤狀態(tài)。因此在刪除重發(fā)的記錄的情況下,如果未刪除兩個副本(包括初始失敗嘗試和重新嘗試的記錄添加),則數(shù)據(jù)可能錯誤地重新出現(xiàn)。
[0014]所描述的實施例通過以下操作解決上面的問題:使系統(tǒng)重發(fā)具有重發(fā)參數(shù)的用于添加記錄的命令,該重發(fā)參數(shù)指示該命令包括先前發(fā)送的命令(針對其未接收到完成確認)的重發(fā)。響應(yīng)于接收具有設(shè)置的重發(fā)參數(shù)的命令,管理日志的接收系統(tǒng)然后可以掃描日志,以便查看是否存在具有重發(fā)的命令中的相同鍵和值的記錄。日志管理器可以將記錄所在的日志地址返回給命令發(fā)送者,而不是響應(yīng)于重發(fā)的命令將記錄添加到日志,以便避免針對重發(fā)的命令將記錄的重復(fù)副本添加到日志。
[0015]圖1示出存儲環(huán)境,其具有管理數(shù)據(jù)在一個或多個存儲設(shè)備102上的存儲的存儲管理器環(huán)境100。主機系統(tǒng)(未示出)可以將輸入/輸出(I/O)請求傳送到存儲管理器100以便訪問存儲設(shè)備102中的數(shù)據(jù)。存儲管理器100可以包括存儲服務(wù)系統(tǒng)104和索引服務(wù)系統(tǒng)106,它們通過連接108通信。系統(tǒng)104和106可以包括在相同或不同機殼中的不同物理或虛擬系統(tǒng)。
[0016]存儲服務(wù)系統(tǒng)104包括存儲服務(wù)110組件,其用于管理具有記錄的日志112,這些記錄標(biāo)識存儲在存儲設(shè)備102中的各位置處的數(shù)據(jù)。存儲服務(wù)110維護邏輯到物理映射400,其將日志112中的記錄的日志地址映射到存儲設(shè)備102中的物理地址。索引服務(wù)系統(tǒng)106包括索引服務(wù)116,其維護允許在日志112中進行鍵-日志地址查找的索引200。索引服務(wù)116指示具有記錄的當(dāng)前版本的日志地址,這些當(dāng)前版本具有日志地址的指示鍵。日志112可以包括連續(xù)日志,其中將新記錄添加到該日志的一端,即,最近使用端,在圖1中示出為條目112e。存儲服務(wù)110使用索引200在日志112中查找記錄,以便判定日志112中的日志地址處的記錄是具有記錄的當(dāng)前版本還是實時版本。如果未在索引200中指示日志地址,則該日志地址將沒有記錄的當(dāng)前版本或?qū)崟r版本。
[0017]在接收對與具有提供的鍵和值的記錄關(guān)聯(lián)的數(shù)據(jù)的請求時,存儲服務(wù)110可以調(diào)用索引服務(wù)116以便在索引200中查找具有該指定鍵的記錄的日志地址。通過從索引返回的這些日志地址,存儲服務(wù)110可以從返回的日志地址確定具有被請求記錄的鍵和值的日志地址記錄。從日志112中的日志地址,存儲服務(wù)110可以使用邏輯到物理映射400確定存儲設(shè)備102之一中的物理地址,在該物理地址處存儲了邏輯地址處的記錄的數(shù)據(jù)。進一步,可以將來自主機的寫入請求定向到索引服務(wù)116以便確定要更新的被請求地址在索引200中的索引條目。
[0018]存儲服務(wù)系統(tǒng)104可以經(jīng)由連接120與存儲設(shè)備102通信。連接108和120可以包括一個或多個網(wǎng)絡(luò),例如局域網(wǎng)(LAN)、存儲區(qū)域網(wǎng)絡(luò)(SAN)、廣域網(wǎng)(WAN)、對等網(wǎng)絡(luò)、無線網(wǎng)絡(luò)、因特網(wǎng)、內(nèi)聯(lián)網(wǎng)等。備選地,連接120可以包括總線接口,例如外圍組件互連(PCI)總線或串行接口。
[0019]存儲設(shè)備102可以包括不同類型或類別的存儲設(shè)備,例如包括固態(tài)電子設(shè)備的固態(tài)存儲設(shè)備(SSD)、EEPROM(電可擦式可編程只讀存儲器)、閃存、閃存盤、隨機存取存儲器(RAM)驅(qū)動器、存儲級存儲器(SCM)、相變存儲器(PCM)、電阻隨機存取存儲器(RRAM)、自旋轉(zhuǎn)移力矩存儲器(STM-RAM)、導(dǎo)電橋接RAM(CBRAM)、硬磁盤驅(qū)動器、光盤、磁帶等。存儲設(shè)備102可以進一步被配置成設(shè)備陣列,例如簡單磁盤捆綁(JBOD)、直接存取存儲設(shè)備(DASD)、獨立磁盤冗余陣列(RAID)陣列、虛擬化設(shè)備等。進一步,存儲設(shè)備102可以包括來自不同供應(yīng)商或來自同一供應(yīng)商的異構(gòu)存儲設(shè)備。
[0020]圖1將存儲服務(wù)110和索引服務(wù)116示為可以具有不同操作系統(tǒng)的單獨系統(tǒng)104和106中的組件。備選地,存儲服務(wù)110和索引服務(wù)116可以在由同一操作系統(tǒng)管理的同一系統(tǒng)中。存儲服務(wù)110和索引服務(wù)116可以在操作系統(tǒng)內(nèi)核空間或用戶空間中執(zhí)行。
[0021]圖2示出在索引200中并且包括鍵202和日志地址204對的索引條目200i的實例的一個實施例,其中日志地址204標(biāo)識由索引條目200,標(biāo)識的記錄在日志112中的位置。盡管可以在日志112中具有記錄(S卩,唯一鍵-值對)的多個版本,但索引200將針對一個鍵和日志地址僅包括一個索引條目200,,以便提供具有記錄的當(dāng)前版本的日志地址。日志112中其日志地址未被包括在索引200中的鍵-值對的其它記錄包括記錄的非活動或先前版本,這些版本映射到存儲設(shè)備102中不具有由該記錄標(biāo)識的數(shù)據(jù)的最新版本的物理地址。
[0022]圖3示出包括在日志112中并且包括鍵302和值304對的記錄300i的實例的一個實施例。記錄300i可以包括指向日志112中的記錄的先前版本(如果有)的指針。在由于失敗而未被記錄的PUT命令的情況下,反向鏈將跳過未被記錄的記錄。日志112可以按連續(xù)順序存儲記錄,因此將新記錄添加到日志的一端,例如圖1中所示的條目112e。記錄300,可以進一步指示鍵大小和值大小。
[0023]圖4示出在邏輯到物理映射400中并且包括邏輯地址402和存儲設(shè)備102之一中的對應(yīng)設(shè)備物理地址404的條目400i的一個實施例。設(shè)備物理地址404可以包括網(wǎng)絡(luò)地址(例如,網(wǎng)際協(xié)議地址、MAC地址)、唯一設(shè)備ID和存儲設(shè)備102中的物理位置。這樣,映射400根據(jù)具體情況將日志112中的日志112地址或條目映射到跨多個存儲設(shè)備102或單個存儲設(shè)備102中的物理地址。例如,如果具有兩個存儲設(shè)備,則日志112可以包括這樣的抽象:其規(guī)定將數(shù)據(jù)存儲在第一存儲設(shè)備中的連續(xù)地址中,然后將數(shù)據(jù)存儲在第二存儲設(shè)備中的地址中。在備選實施例中,邏輯到物理映射400可以根據(jù)在邏輯到物理映射400中實現(xiàn)的預(yù)定義序列,提供在存儲設(shè)備之間交替的連續(xù)日志地址映射,以便在不同存儲設(shè)備中交錯存儲數(shù)據(jù)。
[0024]圖5示出索引服務(wù)108用于將新記錄添加到日志112e的一端或者是日志112的最近使用端的任何位置的PUT命令500的一個實施例。PUT命令500包括PUT命令碼502、鍵504、鍵值506、由鍵504和值506更新的記錄的日志地址508以及重發(fā)參數(shù)510,重發(fā)參數(shù)510指示該PUT命令是否正在重發(fā)具有相同鍵504、值506和指定日志地址508的先前發(fā)送的HJT命令500 ο如果針對先前發(fā)送的HJT命令500未接收到響應(yīng),則重發(fā)HJT命令500。
[0025]PUT命令500導(dǎo)致存儲服務(wù)110將具有鍵504和值506的記錄添加到日志112e的最近使用端。存儲服務(wù)110可以返回日志112^中向其中添加日志地址508的記錄的位置的日志地址。在使用日志地址112e之后,遞增日志地址112e以便指向下一個日志地址。
[0026]在圖5的實施例中,可以在PUT命令本身500中包括要包括在新記錄中的鍵504和值506,以便替換指定日志地址508處的記錄300i。在備選實施例中,鍵504和值506可以不包括在命令500中,但從另一個位置存取以便在日志地址112e處添加到日志112。這樣,添加到日志地址112e的記錄替換指定日志地址508,因此使得指定日志地址成為記錄的非當(dāng)前或較舊版本。
[0027]索引服務(wù)116可以針對日志中的地址從主機接收鍵和新值,并且然后使用PUT命令500將該鍵和新值添加到日志。進一步,索引服務(wù)116可以使用PUT命令將記錄從日志112中的當(dāng)前日志地址移動到MRU端112e,以便用于更新數(shù)據(jù)之外的目的,例如回收日志地址以實現(xiàn)垃圾收集。
[0028]當(dāng)將記錄添加到日志112(例如日志地址112e)時,可以將該記錄的數(shù)據(jù)復(fù)制到存儲設(shè)備102中的位置,該位置根據(jù)用于已使用的日志地址112e的邏輯到物理映射條目^(^而映射到最近使用的日志地址112e。進一步,索引服務(wù)116針對指定日志508地址更新索引條目200,以便指示向其中添加記錄的新日志地址112e,以使得該索引指示日志112中具有記錄的當(dāng)前版本的日志地址。
[0029]圖6示出由存儲管理器100組件(例如索引服務(wù)116)執(zhí)行的用于發(fā)送命令(例如PUT命令500)以便將記錄添加到日志112的操作的一個實施例??刂崎_始(在方框600)于索引服務(wù)116發(fā)送具有針對日志中指定日志地址添加鍵和值對的命令類型的第一命令(例如,PUT命令500)。如果(在方框602)響應(yīng)于該命令而接收向其中寫入記錄的返回的日志地址,則索引服務(wù)116更新(在方框604)索引200以便使用用于返回的日志地址和鍵的條目200替換用于指定日志地址506的條目200,。可以通過更新指定日志地址506的當(dāng)前索引條目200,替換指定日志地址506的條目,以便指示返回的日志地址或者刪除指定日志地址506的條目或使其無效,并且針對返回的日志地址添加新的索引條目200。如果(在方框602)例如在超時時段之后未接收到對發(fā)送的命令的響應(yīng),則索引服務(wù)116重發(fā)(在方框606)具有先前發(fā)送的鍵504、值506和當(dāng)前日志地址508的該命令類型的進一步命令,該命令具有設(shè)置的重發(fā)參數(shù)510以便指示這是重發(fā)命令500。如果在超時時段內(nèi)未接收到響應(yīng),則索引服務(wù)116可以將命令500重發(fā)多次或重發(fā)有限次數(shù)。
[0030]圖7示出由存儲管理器100(例如存儲服務(wù)110)執(zhí)行的用于處理從索引服務(wù)116或其它組件發(fā)送的命令500的操作的一個實施例。在接收(在方框700)命令500時,存儲服務(wù)110判定(在方框702)該命令是否具有設(shè)置的重發(fā)參數(shù)510。如果是,則這是命令500的重發(fā),并且存儲服務(wù)110從指定日志地址508或者從檢查點掃描(在方框704)日志112,該檢查點指示這樣的點:已驗證日志地址,直到該點為止。掃描日志112以便判定是否存在具有命令500中指示的重發(fā)的鍵504和值506對的日志地址。如果(在方框706)存在已經(jīng)具有該重發(fā)命令中的重發(fā)的鍵504和值506的已確定的日志地址,則響應(yīng)于先前發(fā)送的命令500而先前已將該記錄添加到日志,但由于某種原因索引服務(wù)116未從存儲服務(wù)110接收到命令500已完成的確認。沒有確認的原因可以是由于網(wǎng)絡(luò)通信故障、錯誤或某個其它計算錯誤。如果(在方框706)掃描未導(dǎo)致定位具有重發(fā)的鍵504和值506的已確定的日志地址,則存儲服務(wù)110可能無法執(zhí)行或完成處理先前發(fā)送的命令500。
[0031]如果(在方框706)重發(fā)的鍵504和值506對已經(jīng)存在于日志112中,則將已確定的日志地址返回(在方框708)到命令發(fā)送者,因為先前已將重發(fā)的鍵504和值506對添加到日志
112。否則,如果掃描日志112未定位先前發(fā)送的鍵504和值506或者如果(從方框702的否分支)未設(shè)置重發(fā)參數(shù)510,則存儲服務(wù)110將重發(fā)的鍵504和值506對添加(在方框710)到日志112中選定日志地址處(例如日志112的MRU端112e處)的記錄。將選定日志地址返回(在方框712)到接收的命令。
[0032]在圖6和7的所描述的實施例中,由分別位于單獨系統(tǒng)104和106上的存儲服務(wù)110和索引服務(wù)116執(zhí)行操作,其中在系統(tǒng)之間可能具有通信故障,該故障阻止存儲服務(wù)110將向其中添加記錄的選定日志地址返回給索引服務(wù)116。在一個備選實施例中,可以由同一或不同系統(tǒng)上的不同組件執(zhí)行這些操作。進一步,在圖6和7的實施例中,命令500包括PUT命令500。在備選實施例中,可以針對PUT命令之外的命令類型執(zhí)行命令處理。
[0033]本發(fā)明可以是系統(tǒng)、方法和/或計算機程序產(chǎn)品。計算機程序產(chǎn)品可以包括計算機可讀存儲介質(zhì),其上載有用于使處理器實現(xiàn)本發(fā)明的各個方面的計算機可讀程序指令。
[0034]計算機可讀存儲介質(zhì)可以是可以保持和存儲由指令執(zhí)行設(shè)備使用的指令的有形設(shè)備。計算機可讀存儲介質(zhì)例如可以是一但不限于一電存儲設(shè)備、磁存儲設(shè)備、光存儲設(shè)備、電磁存儲設(shè)備、半導(dǎo)體存儲設(shè)備或者上述的任意合適的組合。計算機可讀存儲介質(zhì)的更具體的例子(非窮舉的列表)包括:便攜式計算機盤、硬盤、隨機存取存儲器(RAM)、只讀存儲器(ROM)、可擦式可編程只讀存儲器(EPROMS閃存)、靜態(tài)隨機存取存儲器(SRAM)、便攜式壓縮盤只讀存儲器(CD-ROM)、數(shù)字多功能盤(DVD)、記憶棒、軟盤、機械編碼設(shè)備、例如其上存儲有指令的打孔卡或凹槽內(nèi)凸起結(jié)構(gòu)、以及上述的任意合適的組合。這里所使用的計算機可讀存儲介質(zhì)不被解釋為瞬時信號本身,諸如無線電波或者其它自由傳播的電磁波、通過波導(dǎo)或其它傳輸介質(zhì)傳播的電磁波(例如,通過光纖電纜的光脈沖)、或者通過電線傳輸?shù)碾娦盘枴?br>[0035]這里所描述的計算機可讀程序指令可以從計算機可讀存儲介質(zhì)下載到各個計算/處理設(shè)備,或者通過網(wǎng)絡(luò)、例如因特網(wǎng)、局域網(wǎng)、廣域網(wǎng)和/或無線網(wǎng)下載到外部計算機或外部存儲設(shè)備。網(wǎng)絡(luò)可以包括銅傳輸電纜、光纖傳輸、無線傳輸、路由器、防火墻、交換機、網(wǎng)關(guān)計算機和/或邊緣服務(wù)器。每個計算/處理設(shè)備中的網(wǎng)絡(luò)適配卡或者網(wǎng)絡(luò)接口從網(wǎng)絡(luò)接收計算機可讀程序指令,并轉(zhuǎn)發(fā)該計算機可讀程序指令,以供存儲在各個計算/處理設(shè)備中的計算機可讀存儲介質(zhì)中。
[0036]用于執(zhí)行本發(fā)明操作的計算機可讀程序指令可以是匯編指令、指令集架構(gòu)(ISA)指令、機器指令、機器相關(guān)指令、微代碼、固件指令、狀態(tài)設(shè)置數(shù)據(jù)、或者以一種或多種編程語言的任意組合編寫的源代碼或目標(biāo)代碼,所述編程語言包括面向?qū)ο蟮木幊陶Z言一諸如Ja va、Sma Iltalk、C++等,以及常規(guī)的過程式編程語言一諸如“(Γ語言或類似的編程語言。計算機可讀程序指令可以完全地在用戶計算機上執(zhí)行、部分地在用戶計算機上執(zhí)行、作為一個獨立的軟件包執(zhí)行、部分在用戶計算機上部分在遠程計算機上執(zhí)行、或者完全在遠程計算機或服務(wù)器上執(zhí)行。在涉及遠程計算機的情形中,遠程計算機可以通過任意種類的網(wǎng)絡(luò)一包括局域網(wǎng)(LAN)或廣域網(wǎng)(WAN)—連接到用戶計算機,或者,可以連接到外部計算機(例如利用因特網(wǎng)服務(wù)提供商來通過因特網(wǎng)連接)。在一些實施例中,通過利用計算機可讀程序指令的狀態(tài)信息來個性化電子電路,例如可編程邏輯電路、現(xiàn)場可編程門陣列(FPGA)或可編程邏輯陣列(PLA),該電子電路可以執(zhí)行計算機可讀程序指令,從而實現(xiàn)本發(fā)明的各個方面。
[0037]這里參照根據(jù)本發(fā)明實施例的方法、裝置(系統(tǒng))和計算機程序產(chǎn)品的流程圖和/或框圖描述了本發(fā)明的各個方面。應(yīng)當(dāng)理解,流程圖和/或框圖的每個方框以及流程圖和/或框圖中各方框的組合,都可以由計算機可讀程序指令實現(xiàn)。
[0038]這些計算機可讀程序指令可以提供給通用計算機、專用計算機或其它可編程數(shù)據(jù)處理裝置的處理器,從而生產(chǎn)出一種機器,使得這些指令在通過計算機或其它可編程數(shù)據(jù)處理裝置的處理器執(zhí)行時,產(chǎn)生了實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的裝置。也可以把這些計算機可讀程序指令存儲在計算機可讀存儲介質(zhì)中,這些指令使得計算機、可編程數(shù)據(jù)處理裝置和/或其它設(shè)備以特定方式工作,從而,存儲有指令的計算機可讀存儲介質(zhì)則包括一個制造品,其包括實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作的各個方面的指令。
[0039]也可以把計算機可讀程序指令加載到計算機、其它可編程數(shù)據(jù)處理裝置、或其它設(shè)備上,使得在計算機、其它可編程裝置或其它設(shè)備上執(zhí)行一系列操作步驟,以產(chǎn)生計算機實現(xiàn)的過程,從而使得在計算機、其它可編程裝置、或其它設(shè)備上執(zhí)行的指令實現(xiàn)流程圖和/或框圖中的一個或多個方框中規(guī)定的功能/動作。
[0040]附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的不同實施例的系統(tǒng)、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或指令的一部分,所述模塊、程序段或指令的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。在有些作為替換的實現(xiàn)中,方框中所標(biāo)注的功能可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
[0041]圖8示出可以應(yīng)用本發(fā)明的實施例的計算系統(tǒng)的框圖。存儲管理器100組件(例如圖1的系統(tǒng)104和106)可以在一個或多個計算機系統(tǒng)(例如圖8中所示的計算機系統(tǒng)802)中實現(xiàn)。計算機系統(tǒng)/服務(wù)器802可以在由計算機系統(tǒng)執(zhí)行的計算機系統(tǒng)可執(zhí)行指令(諸如程序模塊)的一般語境下描述。通常,程序模塊可以包括執(zhí)行特定的資源或者實現(xiàn)特定的抽象數(shù)據(jù)類型的例程、程序、目標(biāo)程序、組件、邏輯、數(shù)據(jù)結(jié)構(gòu)等。計算機系統(tǒng)/服務(wù)器802可以在通過通信網(wǎng)絡(luò)鏈接的遠程處理設(shè)備執(zhí)行資源的分布式云計算環(huán)境中實施。在分布式云計算環(huán)境中,程序模塊可以位于包括存儲設(shè)備的本地和遠程計算機系統(tǒng)存儲介質(zhì)兩者上。
[0042]如圖8所示,計算機系統(tǒng)/服務(wù)器802以通用計算設(shè)備的形式表現(xiàn)。計算機系統(tǒng)/月艮務(wù)器802的組件可以包括但不限于:一個或者多個處理器或者處理單元804,系統(tǒng)存儲器806,連接不同系統(tǒng)組件(包括系統(tǒng)存儲器806和處理器804)的總線808。總線808表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲器總線或者存儲器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉例來說,這些體系架構(gòu)包括但不限于工業(yè)標(biāo)準(zhǔn)體系架構(gòu)(ISA)總線,微通道體系架構(gòu)(MCA)總線,增強型ISA(EISA)總線、視頻電子標(biāo)準(zhǔn)協(xié)會(VESA)局域總線以及外圍組件互連(PCI)總線。
[0043]計算機系統(tǒng)/服務(wù)器802典型地包括多種計算機系統(tǒng)可讀介質(zhì)。這些介質(zhì)可以是能夠被計算機系統(tǒng)/服務(wù)器802訪問的任意可獲得的介質(zhì),包括易失性和非易失性介質(zhì),可移動的和不可移動的介質(zhì)。
[0044]系統(tǒng)存儲器806可以包括易失性存儲器形式的計算機系統(tǒng)可讀介質(zhì),例如隨機存取存儲器(RAM)810和/或高速緩沖存儲器812。計算機系統(tǒng)/服務(wù)器802可以進一步包括其它可移動/不可移動的、易失性/非易失性計算機系統(tǒng)存儲介質(zhì)。僅作為舉例,存儲系統(tǒng)813可以用于讀寫不可移動的、非易失性磁介質(zhì)(圖8未顯示,通常稱為“硬盤驅(qū)動器”)。盡管圖8中未示出,可以提供用于對可移動非易失性磁盤(例如“軟盤”)讀寫的磁盤驅(qū)動器,以及對可移動非易失性光盤(例如CD-ROM、DVD-ROM或者其它光介質(zhì))讀寫的光盤驅(qū)動器。在一些情況下,每個組件可以通過一個或者多個數(shù)據(jù)介質(zhì)接口與總線808相連。如下面進一步示出和描述的,存儲器806可以包括至少一個程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個)程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明實施例的功能。
[0045]具有一組(至少一個)程序模塊816的程序/實用工具814,可以存儲在存儲器806中,這樣的程序模塊816包括但不限于操作系統(tǒng)、一個或者多個應(yīng)用程序、其它程序模塊以及程序數(shù)據(jù),這些示例中的每一個或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實現(xiàn)。計算機802的組件可以實現(xiàn)為程序模塊816,這些程序模塊通常執(zhí)行在此描述的本發(fā)明實施例的功能和/或方法。
[0046]計算機系統(tǒng)/服務(wù)器802也可以與一個或多個外部設(shè)備818(例如鍵盤、指向設(shè)備、顯示器820等)通信,還可與一個或者多個使得用戶能與該計算機系統(tǒng)/服務(wù)器802交互的設(shè)備通信,和/或與使得該計算機系統(tǒng)/服務(wù)器802能與一個或多個其它計算設(shè)備進行通信的任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過輸入/輸出(I/O)接口 822進行。并且,計算機系統(tǒng)/服務(wù)器802還可以通過網(wǎng)絡(luò)適配器824與一個或者多個網(wǎng)絡(luò)(例如局域網(wǎng)(LAN),廣域網(wǎng)(WAN)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器824通過總線808與計算機系統(tǒng)/服務(wù)器802的其它組件通信。應(yīng)當(dāng)明白,盡管圖中未示出,其它硬件和/或軟件組件可以與計算機系統(tǒng)/服務(wù)器802—起操作,包括但不限于:微代碼、設(shè)備驅(qū)動器、冗余處理單元、外部磁盤驅(qū)動陣列、RAID系統(tǒng)、磁帶驅(qū)動器以及數(shù)據(jù)備份存儲系統(tǒng)等。
[0047]出于示例和說明目的提供了本發(fā)明的各個實施例的上述說明。其并非旨在是窮舉的或?qū)⒈景l(fā)明限于所公開的精確形式。根據(jù)上述教導(dǎo),許多修改和變化都是可能的。其旨在本發(fā)明的范圍并非由此詳細說明來限制,而是由此后所附的權(quán)利要求來限制。以上說明、實例和數(shù)據(jù)提供了對本發(fā)明的組成部分的制造和使用的完整說明。由于可以在不偏離本發(fā)明的精神和范圍的情況下做出本發(fā)明的許多實施例,所以本發(fā)明存在于此后所附的權(quán)利要求之內(nèi)。
【主權(quán)項】
1.一種用于管理存儲器中的數(shù)據(jù)的系統(tǒng),包括: 處理器;以及 計算機可讀存儲介質(zhì),其具有包含在其中的計算機可讀程序代碼,當(dāng)所述計算機可讀程序代碼被執(zhí)行時執(zhí)行操作,所述操作包括: 提供在日志地址處具有記錄的日志,其中所述日志中的每個記錄包括鍵和值,并且其中所述日志地址映射到所述存儲器中的物理地址; 發(fā)送用于所述日志中指定日志地址處的記錄的要添加到所述日志中選定日志地址的鍵和值對的第一命令; 響應(yīng)于未接收到所述選定日志地址,發(fā)送設(shè)置了重發(fā)參數(shù)的用于所述指定日志地址處的所述記錄的所述鍵和值對的第二命令; 響應(yīng)于接收設(shè)置了所述重發(fā)參數(shù)的所述第二命令,掃描所述日志以便判定在所述指定日志地址之后是否存在具有所述第二命令的所述鍵和值對的已確定的日志地址;以及響應(yīng)于判定所述已確定的日志地址具有所述第二命令的所述鍵和值對,返回所述已確定的日志地址。2.如權(quán)利要求1所述的系統(tǒng),其中所述第一和第二命令具有相同命令類型,其中所述操作進一步包括: 判定具有所述命令類型的任何接收的命令是否包括所設(shè)置的重發(fā)參數(shù); 響應(yīng)于判定所接收的命令不包括所述重發(fā)參數(shù),將所接收的命令的所述鍵和值添加到所述日志中的選定日志地址;以及 將所述選定日志地址返回給所接收的未設(shè)置所述重發(fā)參數(shù)的命令。3.如權(quán)利要求1所述的系統(tǒng),其中所述操作進一步包括: 響應(yīng)于當(dāng)掃描所述日志時,在所述指定日志地址之后未定位具有所述第二命令的所述鍵和值對的日志地址,將所述第二命令的所述記錄的所述鍵和值添加到所述日志中的選定日志地址;以及 將所述選定日志地址返回給所述第二命令。4.如權(quán)利要求1所述的系統(tǒng),其中所述操作進一步包括: 在第一系統(tǒng)上提供存儲服務(wù)以管理所述日志; 在與所述第一系統(tǒng)通信的第二系統(tǒng)上提供索引服務(wù)以管理對所述日志中的記錄的索弓I,其中所述索引中的每個索引條目標(biāo)識所述記錄中的一個記錄在所述日志中的日志地址; 其中所述索引服務(wù)執(zhí)行發(fā)送所述第一和所述第二命令的操作,并且其中所述存儲服務(wù)執(zhí)行掃描所述日志以及返回所述已確定的日志地址的操作。5.如權(quán)利要求4所述的系統(tǒng),其中所述操作進一步包括: 響應(yīng)于分別發(fā)送所述第一命令或所述第二命令,由所述索引服務(wù)接收具有所述第一或所述第二命令的所述鍵和值的所述記錄在所述日志中的返回的日志地址;以及 由所述索引服務(wù)將所述返回的日志地址添加到對所述日志中的記錄的索引,其中所述索引中的每個索引條目標(biāo)識所述記錄中具有當(dāng)前鍵和值對的一個記錄在所述日志中的日志地址。6.如權(quán)利要求4中所述的系統(tǒng),其中所述第一和第二命令包括第一PUT命令和第二HJT命令,其中所述索引服務(wù)包括所述鍵、所述鍵的值、所述指定日志地址和未在所述第一 PUT命令中設(shè)置的所述重發(fā)參數(shù),以及其中所述索引服務(wù)包括所述鍵、所述鍵的所述值、所述指定日志地址和在所述第二 PUT命令中設(shè)置的所述重發(fā)參數(shù)。7.—種用于管理存儲器中的數(shù)據(jù)的方法,包括: 提供在日志地址處具有記錄的日志,其中所述日志中的每個記錄包括鍵和值,并且其中所述日志地址映射到所述存儲器中的物理地址; 發(fā)送用于所述日志中指定日志地址處的記錄的要添加到所述日志中選定日志地址的鍵和值對的第一命令; 響應(yīng)于未接收到所述選定日志地址,發(fā)送設(shè)置了重發(fā)參數(shù)的用于所述指定日志地址處的所述記錄的所述鍵和值對的第二命令; 響應(yīng)于接收設(shè)置了所述重發(fā)參數(shù)的所述第二命令,掃描所述日志以便判定在所述指定日志地址之后是否存在具有所述第二命令的所述鍵和值對的已確定的日志地址;以及響應(yīng)于判定所述已確定的日志地址具有所述第二命令的所述鍵和值對,返回所述已確定的日志地址。8.如權(quán)利要求7所述的方法,進一步包括: 提供對日志中的記錄的索引,其中所述索引中的每個索引條目標(biāo)識所述記錄中的一個記錄在所述日志中的日志地址; 響應(yīng)于分別發(fā)送所述第一命令或所述第二命令,接收具有所述第一或所述第二命令的所述鍵和值的所述記錄在所述日志中的返回的日志地址,其中將具有所述第一或所述第二命令的所述鍵和值的所述記錄添加到所述日志中在所述返回的日志地址處的記錄;以及更新所述索引以便使用用于所述返回的日志地址的索引條目替換用于所述指定日志地址的所述索引條目。9.如權(quán)利要求7所述的方法,其中在所述日志中的檢查點日志地址之后掃描所述日志,其中在所述檢查點之前的日志地址已被驗證為在所述索引中被建立索引,并且其中在所述檢查點之后的日志地址未被驗證。10.如權(quán)利要求7所述的方法,其中所述第一和第二命令具有相同命令類型,所述方法進一步包括: 判定具有所述命令類型的任何接收的命令是否包括所設(shè)置的重發(fā)參數(shù); 響應(yīng)于判定所接收的命令不包括所述重發(fā)參數(shù),將所接收的命令的所述鍵和值添加到所述日志中的選定日志地址;以及 將所述選定日志地址返回給所接收的未設(shè)置所述重發(fā)參數(shù)的命令。11.如權(quán)利要求7所述的方法,進一步包括: 響應(yīng)于當(dāng)掃描所述日志時,在所述指定日志地址之后未定位具有所述第二命令的所述鍵和值對的日志地址,將所述第二命令的所述記錄的所述鍵和值添加到所述日志中的選定日志地址;以及 將所述選定日志地址返回給所述第二命令。12.如權(quán)利要求7所述的方法,其中所述選定日志地址位于所述日志的新條目被添加到的最近使用端處。13.如權(quán)利要求7所述的方法,其中所述存儲器包括多個存儲設(shè)備,其中所述日志地址映射到所述多個存儲設(shè)備中的物理地址,并且其中所述日志中的所述記錄的數(shù)據(jù)被存儲在所述存儲設(shè)備中映射到標(biāo)識所述記錄的所述日志地址的所述物理地址處。14.如權(quán)利要求7所述的方法,進一步包括: 在第一系統(tǒng)上提供存儲服務(wù)以管理所述日志; 在與所述第一系統(tǒng)通信的第二系統(tǒng)上提供索引服務(wù)以管理對所述日志中的記錄的索弓I,其中所述索引中的每個索引條目標(biāo)識所述記錄中的一個記錄在所述日志中的日志地址; 其中所述索引服務(wù)執(zhí)行發(fā)送所述第一和所述第二命令的操作,并且其中所述存儲服務(wù)執(zhí)行掃描所述日志以及返回所述已確定的日志地址的操作。15.如權(quán)利要求14所述的方法,進一步包括: 響應(yīng)于分別發(fā)送所述第一命令或所述第二命令,由所述索引服務(wù)接收具有所述第一或所述第二命令的所述鍵和值的所述記錄在所述日志中的返回的日志地址;以及 由所述索引服務(wù)將所述返回的日志地址添加到對所述日志中的記錄的索引,其中所述索引中的每個索引條目標(biāo)識所述記錄中具有當(dāng)前鍵和值對的一個記錄在所述日志中的日志地址。16.如權(quán)利要求14所述的方法,其中所述第一和第二命令包括第一PUT命令和第二 HJT命令,其中所述索引服務(wù)包括所述鍵、所述鍵的值、所述指定日志地址和未在所述第一 PUT命令中設(shè)置的所述重發(fā)參數(shù),以及其中所述索引服務(wù)包括所述鍵、所述鍵的所述值、所述指定日志地址和在所述第二 PUT命令中設(shè)置的所述重發(fā)參數(shù)。17.如權(quán)利要求15所述的方法,其中所述存儲服務(wù)進一步執(zhí)行: 響應(yīng)于判定所接收的命令不包括所述重發(fā)參數(shù),或響應(yīng)于當(dāng)掃描所述日志時未定位所述指定日志地址之外的具有所述第二命令中的所述鍵和值對的日志地址,將具有用于所述第一或第二命令的所述鍵和值的記錄添加到所述日志中的選定日志地址;以及 將所述選定日志地址返回給所述第一或第二命令,從而導(dǎo)致將具有分別用于所述第一或第二命令的所述鍵和值的所述記錄添加到所述選定日志地址。18.如權(quán)利要求17所述的方法,其中所述存儲服務(wù)進一步執(zhí)行: 響應(yīng)于將所述鍵和值添加到所述選定日志地址,刪除所述存儲器中所述指定日志地址映射到的物理地址處的記錄。
【文檔編號】G06F17/30GK105912557SQ201610090390
【公開日】2016年8月31日
【申請日】2016年2月18日
【發(fā)明人】L·Y·基烏, P·H·明奇, S·瑟哈德里
【申請人】國際商業(yè)機器公司