一種數(shù)據(jù)存儲的方法、裝置和系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲技術(shù)領(lǐng)域,尤其涉及一種數(shù)據(jù)存儲的方法、裝置和系統(tǒng)。
【背景技術(shù)】
[0002]新興的大規(guī)模分布式存儲系統(tǒng)正面臨的問題一將PB級的數(shù)據(jù)分散到成千上萬個存儲設(shè)備?,F(xiàn)有的存儲結(jié)構(gòu)包括樹形的分層拓?fù)?,由虛擬的根節(jié)點(diǎn)開始,向下依次為機(jī)架、控制設(shè)備和磁盤,最終將數(shù)據(jù)放到磁盤中。當(dāng)存儲元數(shù)據(jù)時(shí),往往采用基于副本的存儲模式,當(dāng)存儲普通數(shù)據(jù)時(shí),通常采用基于PT組的存儲模式。通過分區(qū)算法將海量的數(shù)據(jù)分布到這些存儲設(shè)備上,并保證分配數(shù)據(jù)的安全性、均衡性、類型均衡性和分散性。
[0003]在基于PT組的存儲模式中,PT組中包括多個PT AT組中PT個數(shù)相同則為同一規(guī)模,由多個同一規(guī)模的PT組形成分區(qū)信息表。通過選擇由不同規(guī)模的PT組形成的分區(qū)信息表,以及從選定的分區(qū)信息表中選擇不同的PT組,進(jìn)而根據(jù)選定的PT組中包括的磁盤信息,將數(shù)據(jù)存儲在相應(yīng)的磁盤中。
[0004]分區(qū)信息表中保存每個PT組中的每個PT排布的磁盤編號的元數(shù)據(jù),每個PT需要4個Byte的空間保存其位于的磁盤編號,所以整個分區(qū)表的大小是Μ(ΡΤ組個數(shù))*Ν(每個PT組中的PT個數(shù))*4Byte。
[0005]但是,存儲系統(tǒng)是一個動態(tài)的系統(tǒng),系統(tǒng)有可能發(fā)生存儲擴(kuò)容一增加機(jī)架、控制設(shè)備和磁盤,也有可能發(fā)生減容一規(guī)模減小或設(shè)備損壞而減少存儲設(shè)備。如果PT組規(guī)模很大,或者PT組個數(shù)是不斷增長的,則存儲分區(qū)信息表需要的存儲空間也隨之增長。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲方法、裝置和系統(tǒng),可以實(shí)現(xiàn)根據(jù)基準(zhǔn)分區(qū)表確定存儲待存儲數(shù)據(jù)所需的分區(qū)信息。
[0007]—方面,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲的方法,所述方法應(yīng)用于存儲系統(tǒng)。存儲系統(tǒng)包括控制設(shè)備和至少兩個外存儲設(shè)備,控制設(shè)備用于接收用戶設(shè)備發(fā)送的待存儲數(shù)據(jù),并通過外存儲設(shè)備對待存儲數(shù)據(jù)進(jìn)行存儲。所述方法包括所述控制設(shè)備獲取基準(zhǔn)分區(qū)表?;鶞?zhǔn)分區(qū)表中包括了St個PT組,每個PT組中包括L個PT,基準(zhǔn)分區(qū)表中存儲了每個PT對應(yīng)的分區(qū)信息,每個PT對應(yīng)的分區(qū)信息包括存儲該P(yáng)T的外存儲設(shè)備的編號。其中,St為預(yù)設(shè)的值,具體可以根據(jù)用戶的需求自行設(shè)定,L為存儲系統(tǒng)中PT數(shù)量最多的PT組的PT的數(shù)量??刂圃O(shè)備接收第一待存儲數(shù)據(jù),并將接收的第一待存儲數(shù)據(jù)分為N個待存儲數(shù)據(jù)塊,具體的,控制設(shè)備中預(yù)設(shè)有分塊規(guī)則,根據(jù)分塊規(guī)則可知N的取值。通過基準(zhǔn)分區(qū)表,為每個待存儲數(shù)據(jù)塊確定一個PT組。其中,每個PT組中包括i個PT,所述i為正整數(shù)且I < i SL,具體的,第一待存儲數(shù)據(jù)中會攜帶第一待存儲數(shù)據(jù)的安全信息等內(nèi)容,控制設(shè)備根據(jù)這些內(nèi)容可以確定每個待存儲數(shù)據(jù)塊對應(yīng)的PT組中有幾個PT,也即i的取值。獲取每個待存儲數(shù)據(jù)塊對應(yīng)的PT組的每個PT的分區(qū)信息。根據(jù)每個待存儲數(shù)據(jù)塊對應(yīng)的PT組的每個PT的分區(qū)信息,將每個待存儲數(shù)據(jù)塊對應(yīng)的PT組的每個PT存儲至對應(yīng)的外存儲設(shè)備中??刂圃O(shè)備中僅通過基準(zhǔn)分區(qū)表就可以獲取各個PT組的PT的分區(qū)信息,從而解決了在內(nèi)存和磁盤中存儲多種不同規(guī)模的分區(qū)表的問題,釋放了磁盤和內(nèi)存的存儲空間。
[0008]在一個可能的設(shè)計(jì)中,每個待存儲數(shù)據(jù)塊對應(yīng)的PT組的每個PT的分區(qū)信息通過Dni=MT[n%St] [i] + (n/St) %D確定。其中,I < η < N,所述MT指示所述基準(zhǔn)分區(qū)表,所述D為所述存儲系統(tǒng)中外存儲設(shè)備的總數(shù),所述Dni指示所述第一待存儲數(shù)據(jù)的第η個待存儲數(shù)據(jù)塊對應(yīng)的分區(qū)組的第i個分區(qū)的分區(qū)信息。從而通過上述公式,確定待存儲數(shù)據(jù)的每個PT組中的每個PT的分區(qū)信息。
[0009]在一個可能的設(shè)計(jì)中,控制設(shè)備中存儲有存儲系統(tǒng)中每個外存儲設(shè)備的元數(shù)據(jù)信息。每個外存儲設(shè)備的元數(shù)據(jù)信息包括該外存儲設(shè)備的編號和該外存儲設(shè)備的狀態(tài)信息。外存儲設(shè)備的狀態(tài)信息指示外存儲設(shè)備添加至所述存儲系統(tǒng)或外存儲設(shè)備從所述存儲系統(tǒng)刪除??刂圃O(shè)備通過控制設(shè)備中存儲的每個外存儲設(shè)備的元數(shù)據(jù)信息來確定基準(zhǔn)分區(qū)表。從而在無須存儲基準(zhǔn)分區(qū)表,可以通過元數(shù)據(jù)信息獲取基準(zhǔn)分區(qū)表,節(jié)省了控制設(shè)備的存儲空間。
[0010]在一個可能的設(shè)計(jì)中,控制設(shè)備內(nèi)存儲的外存儲設(shè)備的元數(shù)據(jù)信息包括外存儲設(shè)備的狀態(tài)信息和外存儲設(shè)備編號。當(dāng)存儲系統(tǒng)中增加新的外存儲設(shè)備時(shí),控制設(shè)備將新增加的外存儲設(shè)備的編號,以及新增加的外存儲設(shè)備的狀態(tài)信息存儲至元數(shù)據(jù)信息中??刂圃O(shè)備將根據(jù)新增加的外存儲設(shè)備的元數(shù)據(jù)信息對基準(zhǔn)分區(qū)表進(jìn)行更新,并根據(jù)更新后的基準(zhǔn)分區(qū)表,將存儲系統(tǒng)中的數(shù)據(jù)向新增加的外存儲設(shè)備迀移。從而在增加存儲系統(tǒng)的存儲空間的同時(shí),保證存儲系統(tǒng)中數(shù)據(jù)的均衡性。
[0011]在一個可能的設(shè)計(jì)中,控制設(shè)備內(nèi)存儲的外存儲設(shè)備的元數(shù)據(jù)信息包括外存儲設(shè)備的狀態(tài)信息和外存儲設(shè)備編號。當(dāng)存儲系統(tǒng)中刪除部分外存儲設(shè)備或部分外存儲設(shè)備故障時(shí),需要修改外存儲設(shè)備的元數(shù)據(jù)的狀態(tài)信息??刂圃O(shè)備還需要將基準(zhǔn)分區(qū)表中故障或刪除的外存儲設(shè)備所對應(yīng)的PT刪除,以更新基準(zhǔn)分區(qū)表,并為刪除的PT更換外存儲設(shè)備。從而保證存儲系統(tǒng)中,數(shù)據(jù)的安全。
[0012]另一方面,本發(fā)明實(shí)施例還提供了一種存儲介質(zhì),該存儲介質(zhì)中存儲了用于執(zhí)行前述方面中數(shù)據(jù)存儲的方法或其各個可能的設(shè)計(jì)的程序代碼。
【附圖說明】
[0013]圖1為本發(fā)明實(shí)施例提供的一種存儲系統(tǒng)結(jié)構(gòu)圖;
[0014]圖2為本發(fā)明實(shí)施例提供的一種PT組基準(zhǔn)分區(qū)表;
[0015]圖3為本發(fā)明實(shí)施例提供的一種通過基準(zhǔn)分區(qū)表確定的分區(qū)信息。;
[0016]圖4為本發(fā)明實(shí)施例提供的一種分區(qū)算法流程圖;
[0017]圖5為本發(fā)明實(shí)施例提供的一種分區(qū)算法中確定PT中包括的外存儲設(shè)備編號的方法流程圖;
[0018]圖6為本發(fā)明實(shí)施例提供的在同一層級下的所有節(jié)點(diǎn)進(jìn)行比較的方法;
[0019]圖7為本發(fā)明實(shí)施例提供的控制設(shè)備中存儲的外存儲設(shè)備的元數(shù)據(jù);
[0020]圖8為本發(fā)明實(shí)施例提供的一種元數(shù)據(jù)存儲方法;
[0021]圖9為本發(fā)明實(shí)施例提供的一種控制裝置;
[0022]圖10為本發(fā)明實(shí)施例提供的一種控制設(shè)備示意圖。
【具體實(shí)施方式】
[0023]下面通過附圖和實(shí)施例,對本發(fā)明實(shí)施例的技術(shù)方案做進(jìn)一步的詳細(xì)描述。
[0024]本申請中,分區(qū)(英文:parti t 1n,縮寫:PT)指代磁盤的基本存儲單位,多個分區(qū)可以組成一個PT組。
[0025]本發(fā)明實(shí)施例提供了一種數(shù)據(jù)存儲的方法、裝置和系統(tǒng)。該方法和系統(tǒng)中包括基準(zhǔn)分區(qū)表,通過基準(zhǔn)分區(qū)表,可以確定不同規(guī)模的各PT組的分區(qū)信息。根據(jù)確定的分區(qū)信息,獲取分區(qū)信息中的磁盤信息對數(shù)據(jù)進(jìn)行輸入/輸出(英文:input/output,縮寫:I/O)操作。
[0026]圖1為本發(fā)明實(shí)施例提供的一種存儲系統(tǒng)結(jié)構(gòu)圖。所述存儲系統(tǒng)包括控制設(shè)備和至少兩個外存儲設(shè)備,夕卜存儲設(shè)備可以是磁盤或固態(tài)硬盤(英文:Sol id State Drives,縮寫:SSD)。控制設(shè)備與用戶設(shè)備連接,用戶設(shè)備通過控制設(shè)備進(jìn)行數(shù)據(jù)的I/O操作。控制設(shè)備將用戶設(shè)備發(fā)送的數(shù)據(jù)經(jīng)過處理后,發(fā)送至第一磁盤至第三磁盤中的一個或多個進(jìn)行存儲。
[0027]在本發(fā)明的實(shí)施例中,實(shí)例性的,采用磁盤作為外存儲設(shè)備。
[0028]控制設(shè)備通過第一接口與用戶設(shè)備連接,從而接收用戶設(shè)備發(fā)出的請求,以及根據(jù)用戶設(shè)備發(fā)送的請求,將具體的操作請求發(fā)送至處理器等。控制設(shè)備還通過第二接口與第一磁盤、第二磁盤和第三磁盤連接,從而將處理過的數(shù)據(jù)發(fā)送至第一磁盤、第二磁盤或第三磁盤中的一個或多個進(jìn)行存儲??刂瓶刂圃O(shè)備與用戶設(shè)備連接的第一接口和控制控制設(shè)備與磁盤連接的第二接口的形式不限。例如,第一接口或第二接口可以是以太網(wǎng)接口。
[0029]在一個例子中,控制設(shè)備可以包括處理器、內(nèi)存和內(nèi)存儲設(shè)備。內(nèi)存用于緩存基準(zhǔn)分區(qū)表和供處理器調(diào)用的指令。
[0030]處理器用于接收用戶設(shè)備發(fā)送的待存儲數(shù)據(jù),將待存儲數(shù)據(jù)分為N個待存儲數(shù)據(jù)塊,每個待存儲數(shù)據(jù)塊對應(yīng)一個PT組。通過基準(zhǔn)分區(qū)表確定每個PT組中各個PT的分區(qū)信息,將每個待存儲數(shù)據(jù)塊存儲到PT組中各PT所對應(yīng)的磁盤。
[0031]內(nèi)存儲設(shè)備用于存儲外存儲設(shè)備的元數(shù)據(jù)信息,元數(shù)據(jù)信息包括外存儲設(shè)備編號和外存儲設(shè)備狀態(tài)信息。在本例子中即為第一磁盤、第二磁盤和第三磁盤的元數(shù)據(jù)信息,以及在第一磁盤、第二磁盤和第三磁盤的狀態(tài)發(fā)生變化時(shí),存儲外存儲設(shè)備的狀態(tài)變化信息。從而在控制設(shè)備掉電等情況下,內(nèi)存儲設(shè)備能夠?yàn)樘幚砥魈峁┑谝淮疟P、第二磁盤和第三磁盤的元數(shù)據(jù)。處理器根據(jù)獲得的外存儲設(shè)備的元數(shù)據(jù),構(gòu)建存儲系統(tǒng)的拓?fù)潢P(guān)系,根據(jù)拓?fù)潢P(guān)系,更新基準(zhǔn)分區(qū)表。
[0032]為了區(qū)分本發(fā)明實(shí)施例中外存儲設(shè)備的磁盤和內(nèi)存儲設(shè)備的磁盤,將內(nèi)存儲設(shè)備的磁盤命名為控制設(shè)備磁盤。
[0033]在本發(fā)明的實(shí)施例中,第一接口接收用戶設(shè)備發(fā)送的數(shù)據(jù)寫入的請求后,處理器將根據(jù)所能存儲的數(shù)據(jù)塊的大小對接收的數(shù)據(jù)進(jìn)行分塊。同時(shí),處理器還要根據(jù)用戶發(fā)送的數(shù)據(jù)中包括的安全信息,確定將數(shù)據(jù)塊存儲至PT個數(shù)不同的PT組中。例如,每個塊要求存儲至8個PT的PT組中,處理器將根據(jù)算法(例如輪詢算法或哈希算法)為該數(shù)據(jù)塊從基準(zhǔn)分區(qū)表中找到合適的PT組。獲取該P(yáng)T組中前8個PT的分區(qū)信息,獲取每個PT的分區(qū)信息中包括的外存儲設(shè)備信息。將數(shù)據(jù)塊存儲至8個PT的分區(qū)信息中對應(yīng)的外存儲設(shè)備。
[0034]在一個例子中,接收用戶設(shè)備發(fā)送的待存儲數(shù)據(jù),例如10M大小??刂圃O(shè)備通過對待存儲數(shù)據(jù)分塊后,獲取25個待存儲數(shù)據(jù)塊,每個待存儲數(shù)據(jù)塊的大小為4M。例如,待存儲數(shù)據(jù)的安全信息要求將每個待存儲數(shù)據(jù)塊存儲在有8個PT的PT組中,其中6個PT為待存儲數(shù)據(jù)塊中的數(shù)據(jù),2個PT為待存儲數(shù)據(jù)塊對應(yīng)的校驗(yàn)數(shù)據(jù)。從基準(zhǔn)分區(qū)表中選取25個PT組,用于該25個待存儲數(shù)據(jù)塊的存儲。從基準(zhǔn)分區(qū)表的PT組中選取需要存儲的PT組的方法可以有多種,本發(fā)明對此不作限定。在確定存儲待存儲數(shù)據(jù)塊的PT組后,確定各個PT組的前8個PT。根據(jù)獲取的每個PT組中前8個PT的分區(qū)信息將數(shù)據(jù)及校驗(yàn)數(shù)據(jù)存儲至控制設(shè)備磁盤。
[0035]其中,每個PT的分區(qū)信息包括了該P(yáng)T對應(yīng)的外存儲設(shè)備編號。若該P(yáng)T的分區(qū)信息對應(yīng)的外存儲設(shè)備編號為唯一,則該P(yáng)T的分區(qū)信息僅包括外存儲設(shè)備編號。若該P(yáng)T的分區(qū)信息對應(yīng)的外存儲設(shè)備編號不是唯一,則該P(yáng)T的分區(qū)信息包括了外存儲設(shè)備編號、服務(wù)器編號和機(jī)架編號。例如,當(dāng)不同的機(jī)架、服務(wù)器復(fù)用了外存儲設(shè)備編號,則不同PT需要通過機(jī)架編號、服務(wù)器編號以及外存儲設(shè)備編號來區(qū)別。
[0036]在一個例子中,每個PT的分區(qū)信息都需要4Byte(32bit)空間來記錄,其中前2個bi t用于記錄外存儲設(shè)備的狀態(tài)。例如,“00”代表初始添加外存儲設(shè)備,“01”代表新添加的夕卜存儲設(shè)備,“10”代表故障的外存儲設(shè)備,“11”代表刪除的外存儲設(shè)備。后30個bi t用于記錄外存儲設(shè)備編號、控制設(shè)備編號、機(jī)架編號等。
[0037]根據(jù)基準(zhǔn)分區(qū)表,獲取每個待存儲數(shù)據(jù)塊對應(yīng)的PT組的每個PT的分區(qū)信息包括:
[0038]Dn