一種數(shù)據(jù)寫入方法及存儲設(shè)備的制作方法
【專利摘要】本發(fā)明提供一種數(shù)據(jù)寫入方法及存儲設(shè)備,所述方法應(yīng)用于存儲設(shè)備中,所述存儲設(shè)備包括處理器、內(nèi)存和存儲介質(zhì),所述存儲介質(zhì)中的數(shù)據(jù)塊以樹結(jié)構(gòu)組織,所述樹的葉子節(jié)點(diǎn)用于保存數(shù)據(jù)塊,所述樹的父節(jié)點(diǎn)和根節(jié)點(diǎn)用于保存索引數(shù)據(jù),所述索引數(shù)據(jù)用于索引所述數(shù)據(jù)塊,所述方法由所述處理器執(zhí)行,包括:接收多個數(shù)據(jù)塊,寫入所述內(nèi)存;在所述內(nèi)存中修改所述多個數(shù)據(jù)塊;從所述修改后的多個數(shù)據(jù)塊中確定至少兩個數(shù)據(jù)塊,所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)相同;為所述至少兩個數(shù)據(jù)塊分配在所述存儲介質(zhì)中的存儲地址,根據(jù)所述分配的存儲地址,將所述至少兩個數(shù)據(jù)塊寫入所述存儲介質(zhì);修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
【專利說明】一種數(shù)據(jù)寫入方法及存儲設(shè)備
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及電子【技術(shù)領(lǐng)域】,尤其涉及一種數(shù)據(jù)寫入方法及存儲設(shè)備。
【背景技術(shù)】
[0002]SSD (英文:Solid State Drive ;中文:固態(tài)硬盤)相比于傳統(tǒng)的機(jī)械硬盤,具有讀寫速度快、防震、體積小,零噪音等優(yōu)點(diǎn),被人們廣泛使用。一般SSD的寫入次數(shù)有限。
[0003]現(xiàn)有技術(shù)中,修改SSD上的數(shù)據(jù)塊采用ROW(英文!Redirect1n On Write ;中文:寫時重定向)技術(shù)?,F(xiàn)有基于ROW技術(shù)在SSD上構(gòu)建文件系統(tǒng)一般會把整個文件系統(tǒng)組織成一棵樹狀結(jié)構(gòu)。樹狀結(jié)構(gòu)中的葉子節(jié)點(diǎn)用于保存數(shù)據(jù)塊,父節(jié)點(diǎn)及根為索引數(shù)據(jù),索引數(shù)據(jù)用于索引數(shù)據(jù)塊。
[0004]當(dāng)修改SSD上的數(shù)據(jù)塊時,首先在內(nèi)存中修改,然后為修改后的數(shù)據(jù)塊在SSD上分配存儲地址,為了能夠索引到修改后的數(shù)據(jù)塊,需要對修改后的數(shù)據(jù)塊的索引數(shù)據(jù)進(jìn)行更新。更新完畢后,文件系統(tǒng)會產(chǎn)生一個新的樹根,以替換掉舊的樹根。
[0005]現(xiàn)有技術(shù)中,每次修改數(shù)據(jù)塊,都會導(dǎo)致索引數(shù)據(jù)被改寫。當(dāng)修改的數(shù)據(jù)量大時,會導(dǎo)致大量索引數(shù)據(jù)被改寫,對于SSD來說會造成很大的寫開銷,導(dǎo)致SSD性能及壽命下降。并且現(xiàn)有技術(shù)中必須等文件系統(tǒng)產(chǎn)生新的樹根后才能將修改后的數(shù)據(jù)塊從內(nèi)存中刪除,內(nèi)存利用率低。
[0006]因此,現(xiàn)有技術(shù)存在的技術(shù)問題是:每次修改數(shù)據(jù)塊都會相應(yīng)地修改它的索引數(shù)據(jù),對SSD造成較大的寫開銷,導(dǎo)致SSD性能及壽命下降。
【發(fā)明內(nèi)容】
[0007]本發(fā)明實(shí)施例提供一種數(shù)據(jù)寫入方法及存儲設(shè)備,用于解決現(xiàn)有技術(shù)中存在的每次修改數(shù)據(jù)塊都會相應(yīng)地修改它的索引數(shù)據(jù),對SSD造成較大的寫開銷,導(dǎo)致SSD性能及壽命下降的技術(shù)問題,實(shí)現(xiàn)了減小修改數(shù)據(jù)塊對SSD造成的寫開銷,提高SSD性能,延長SSD的壽命的技術(shù)效果。
[0008]本發(fā)明實(shí)施例第一方面提供了一種數(shù)據(jù)寫入方法,所述方法應(yīng)用于存儲設(shè)備中,所述存儲設(shè)備包括處理器、內(nèi)存和存儲介質(zhì),所述存儲介質(zhì)中的數(shù)據(jù)塊以樹結(jié)構(gòu)組織,所述樹的葉子節(jié)點(diǎn)用于保存數(shù)據(jù)塊,所述樹的父節(jié)點(diǎn)和根節(jié)點(diǎn)用于保存索引數(shù)據(jù),所述索引數(shù)據(jù)用于索引所述數(shù)據(jù)塊,所述方法由所述處理器執(zhí)行,包括:
[0009]接收多個數(shù)據(jù)塊,寫入所述內(nèi)存;
[0010]在所述內(nèi)存中修改所述多個數(shù)據(jù)塊;
[0011]從所述修改后的多個數(shù)據(jù)塊中確定至少兩個數(shù)據(jù)塊,所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)相同;
[0012]為所述至少兩個數(shù)據(jù)塊分配在所述存儲介質(zhì)中的存儲地址,根據(jù)所述分配的存儲地址,將所述至少兩個數(shù)據(jù)塊寫入所述存儲介質(zhì);
[0013]修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
[0014]結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,在所述修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)之前,所述方法還包括:
[0015]將所述至少兩個數(shù)據(jù)塊從所述內(nèi)存中刪除。
[0016]結(jié)合第一方面,在第二種可能的實(shí)現(xiàn)方式中,所述修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù),具體包括:
[0017]為所述至少兩個數(shù)據(jù)塊創(chuàng)建記錄表,記錄所述至少兩個數(shù)據(jù)塊在所述存儲介質(zhì)中的存儲地址;
[0018]根據(jù)所述記錄表,在所述內(nèi)存中修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù),修改后的所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)指向所述至少兩個數(shù)據(jù)塊的存儲地址;
[0019]將所述修改后的所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)寫入所述存儲介質(zhì)。
[0020]本發(fā)明實(shí)施例第二方面提供了一種存儲設(shè)備,所述存儲設(shè)備包括處理器、內(nèi)存和存儲介質(zhì),所述存儲介質(zhì)中的數(shù)據(jù)塊以樹結(jié)構(gòu)組織,所述樹的葉子節(jié)點(diǎn)用于保存數(shù)據(jù)塊,所述樹的父節(jié)點(diǎn)和根節(jié)點(diǎn)用于保存索引數(shù)據(jù),所述索引數(shù)據(jù)用于索引所述數(shù)據(jù)塊,所述處理器用于:
[0021]接收多個數(shù)據(jù)塊,寫入所述內(nèi)存;
[0022]在所述內(nèi)存中修改所述多個數(shù)據(jù)塊;
[0023]從所述修改后的多個數(shù)據(jù)塊中確定至少兩個數(shù)據(jù)塊,所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)相同;
[0024]為所述至少兩個數(shù)據(jù)塊分配在所述存儲介質(zhì)中的存儲地址,根據(jù)所述分配的存儲地址,將所述至少兩個數(shù)據(jù)塊寫入所述存儲介質(zhì);
[0025]修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
[0026]結(jié)合第二方面,在第一種可能的實(shí)現(xiàn)方式中,所述處理器還用于:
[0027]在所述修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)之前,將所述至少兩個數(shù)據(jù)塊從所述內(nèi)存中刪除。
[0028]結(jié)合第二方面,在第二種可能的實(shí)現(xiàn)方式中,處理器具體用于:
[0029]為所述至少兩個數(shù)據(jù)塊創(chuàng)建記錄表,記錄所述至少兩個數(shù)據(jù)塊在所述存儲介質(zhì)中的存儲地址;
[0030]根據(jù)所述記錄表,在所述內(nèi)存中修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù),修改后的索引數(shù)據(jù)指向所述至少兩個數(shù)據(jù)塊的存儲地址;
[0031]將所述修改后的所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)寫入所述存儲介質(zhì)。
[0032]本發(fā)明實(shí)施例中提供的一個或多個技術(shù)方案,至少具有如下技術(shù)效果或優(yōu)點(diǎn):
[0033]本發(fā)明實(shí)施例中,首先在內(nèi)存中修改多個數(shù)據(jù)塊,然后從修改后的多個數(shù)據(jù)塊中確定索引數(shù)據(jù)相同的至少兩個數(shù)據(jù)塊,接著將至少兩個數(shù)據(jù)塊寫入到存儲介質(zhì),最后修改指向至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
[0034]相比現(xiàn)有技術(shù)中每次將修改后的數(shù)據(jù)塊從內(nèi)存寫入存儲介質(zhì)后,都要對修改后的數(shù)據(jù)塊的索引數(shù)據(jù)進(jìn)行更新的技術(shù)方案,本發(fā)明實(shí)施例中從修改后的數(shù)據(jù)塊中確定索引數(shù)據(jù)相同的至少兩個數(shù)據(jù)塊,將索引數(shù)據(jù)相同的至少兩個數(shù)據(jù)塊從內(nèi)存寫入存儲介質(zhì)后,對至少兩個數(shù)據(jù)塊共同的索引數(shù)據(jù)進(jìn)行批量更新,所以減小了對索引數(shù)據(jù)進(jìn)行更新的次數(shù),實(shí)現(xiàn)了減小修改數(shù)據(jù)塊對存儲設(shè)備造成的寫開銷。
【專利附圖】
【附圖說明】
[0035]為了更清楚地說明本發(fā)明或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對本發(fā)明或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其它的附圖。
[0036]圖1為本發(fā)明實(shí)施例提供的信息處理方法適用的文件系統(tǒng)的示意圖;
[0037]圖2為本發(fā)明實(shí)施例提供的信息處理方法的流程圖;
[0038]圖3為本發(fā)明實(shí)施例中更新索引數(shù)據(jù)的流程圖;
[0039]圖4為本發(fā)明實(shí)施例提供的存儲設(shè)備的硬件結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0040]本發(fā)明實(shí)施例提供一種數(shù)據(jù)寫入方法及存儲設(shè)備,用于解決現(xiàn)有技術(shù)中存在的每次修改數(shù)據(jù)塊都會相應(yīng)地修改它的索引數(shù)據(jù),對SSD造成較大的寫開銷,導(dǎo)致SSD性能及壽命下降的技術(shù)問題,實(shí)現(xiàn)了減小修改數(shù)據(jù)塊對SSD造成的寫開銷,提高SSD性能,延長SSD的壽命的技術(shù)效果。
[0041]本發(fā)明實(shí)施例中,首先在內(nèi)存中修改多個數(shù)據(jù)塊,然后從修改后的多個數(shù)據(jù)塊中確定索引數(shù)據(jù)相同的至少兩個數(shù)據(jù)塊,接著將至少兩個數(shù)據(jù)塊寫入到存儲介質(zhì),最后修改指向至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
[0042]相比現(xiàn)有技術(shù)中每次將修改后的數(shù)據(jù)塊從內(nèi)存寫入存儲介質(zhì)后,都要對修改后的數(shù)據(jù)塊的索引數(shù)據(jù)進(jìn)行更新的技術(shù)方案,本發(fā)明實(shí)施例中從修改后的數(shù)據(jù)塊中確定索引數(shù)據(jù)相同的至少兩個數(shù)據(jù)塊,將索引數(shù)據(jù)相同的至少兩個數(shù)據(jù)塊從內(nèi)存寫入存儲介質(zhì)后,對至少兩個數(shù)據(jù)塊共同的索引數(shù)據(jù)進(jìn)行批量更新,所以減小了對索引數(shù)據(jù)進(jìn)行更新的次數(shù),實(shí)現(xiàn)了減小修改數(shù)據(jù)塊對存儲設(shè)備造成的寫開銷。
[0043]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本申請保護(hù)的范圍。
[0044]本文中術(shù)語“和/或”,僅僅是一種描述關(guān)聯(lián)對象的關(guān)聯(lián)關(guān)系,表示可以存在三種關(guān)系,例如,A和/或B,可以表示:單獨(dú)存在A,同時存在A和B,單獨(dú)存在B這三種情況。另夕卜,本文中字符“/”,一般表示前后關(guān)聯(lián)對象是一種“或”的關(guān)系。
[0045]下面結(jié)合附圖對本發(fā)明的實(shí)施方式進(jìn)行詳細(xì)說明。
[0046]本發(fā)明實(shí)施例提供一種數(shù)據(jù)寫入方法,應(yīng)用于存儲設(shè)備中。請參考圖4,圖4為存儲設(shè)備40的硬件結(jié)構(gòu)示意圖。存儲設(shè)備40可以是SSD(英文:Solid State Drive ;中文:固態(tài)硬盤)包括:處理器41、內(nèi)存42和存儲介質(zhì)43,存儲介質(zhì)43可以為Flash顆粒或其他類型的硬盤。在存儲介質(zhì)43中可以存儲數(shù)據(jù)。具體地,存儲介質(zhì)43中的數(shù)據(jù)塊以樹結(jié)構(gòu)組織。請參考圖1,圖1為存儲介質(zhì)43中的樹結(jié)構(gòu)的示意圖。樹的葉子節(jié)點(diǎn)用于保存數(shù)據(jù)塊,樹的父節(jié)點(diǎn)和根節(jié)點(diǎn)用于保存索引數(shù)據(jù),索引數(shù)據(jù)用于索引數(shù)據(jù)塊。圖1中,樹根用于保存索引數(shù)據(jù)A,父節(jié)點(diǎn)用于保存索引數(shù)據(jù)B和索引數(shù)據(jù)C,葉子節(jié)點(diǎn)用于保存數(shù)據(jù)塊D、數(shù)據(jù)塊E、數(shù)據(jù)塊F、數(shù)據(jù)塊H。
[0047]如圖4所示,在實(shí)際應(yīng)用過程中,存儲設(shè)備40可以作為一個獨(dú)立的電子設(shè)備,與服務(wù)器400相連,存儲設(shè)備40還可以作為服務(wù)器400的一個元件,服務(wù)器400向存儲設(shè)備40發(fā)送寫入數(shù)據(jù)的請求,存儲設(shè)備40接收到寫入數(shù)據(jù)的請求后,響應(yīng)寫入數(shù)據(jù)的請求,存儲設(shè)備40的處理器41執(zhí)行本發(fā)明實(shí)施例提供的寫入方法。
[0048]請參考圖2,圖2為本發(fā)明實(shí)施例提供的數(shù)據(jù)寫入方法的流程圖。本發(fā)明實(shí)施例提供的數(shù)據(jù)寫入方法,所述方法可以應(yīng)用在圖4所述的存儲設(shè)備40中,由處理器41執(zhí)行,包括以下步驟:
[0049]步驟21:接收多個數(shù)據(jù)塊,寫入所述內(nèi)存;
[0050]步驟22:在所述內(nèi)存中修改所述多個數(shù)據(jù)塊;
[0051]步驟23:從所述修改后的多個數(shù)據(jù)塊中確定至少兩個數(shù)據(jù)塊,所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)相同;
[0052]步驟24:為所述至少兩個數(shù)據(jù)塊分配在所述存儲介質(zhì)中的存儲地址,根據(jù)所述分配的存儲地址,將所述至少兩個數(shù)據(jù)塊寫入所述存儲介質(zhì);
[0053]步驟25:修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
[0054]當(dāng)服務(wù)器400想要向存儲設(shè)備40中寫入數(shù)據(jù)時,會向存儲設(shè)備40發(fā)送寫入數(shù)據(jù)的請求,存儲設(shè)備40接收到寫入數(shù)據(jù)的請求后,存儲設(shè)備的處理器41響應(yīng)寫入數(shù)據(jù)的請求,接收服務(wù)器發(fā)送的多個數(shù)據(jù)塊,然后寫入內(nèi)存。如圖1所示,處理器41接收數(shù)據(jù)塊D、數(shù)據(jù)塊E、數(shù)據(jù)塊F、數(shù)據(jù)塊H,寫入內(nèi)存42中,分別保存在樹的葉子節(jié)點(diǎn)中。
[0055]當(dāng)服務(wù)器400想要修改存儲設(shè)備40中的數(shù)據(jù)塊時,會向存儲設(shè)備40發(fā)送修改數(shù)據(jù)的請求,存儲設(shè)備40接收到修改數(shù)據(jù)的請求后,存儲設(shè)備的處理器41響應(yīng)修改數(shù)據(jù)的請求,首先在內(nèi)存中修改數(shù)據(jù)塊,產(chǎn)生臟數(shù)據(jù)塊,其中臟數(shù)據(jù)塊即為在內(nèi)存中修改后的,且未寫入存儲介質(zhì)中的數(shù)據(jù)塊。
[0056]以對圖1中的數(shù)據(jù)塊D修改為例。在內(nèi)存中由樹根保存的索引數(shù)據(jù)A,經(jīng)父節(jié)點(diǎn)保存的索引數(shù)據(jù)B索引到數(shù)據(jù)塊D,然后將數(shù)據(jù)塊D修改為數(shù)據(jù)塊S,將數(shù)據(jù)塊S存儲在內(nèi)存中,由于數(shù)據(jù)塊S僅在內(nèi)存中修改,還未將數(shù)據(jù)塊S寫入存儲介質(zhì)中,所以數(shù)據(jù)塊S為臟數(shù)據(jù)塊,臟數(shù)據(jù)塊S的索引數(shù)據(jù)為:索引數(shù)據(jù)B。按照相同的修改方法,可以對數(shù)據(jù)塊E進(jìn)行修改,產(chǎn)生臟數(shù)據(jù)塊H,臟數(shù)據(jù)塊H的索引數(shù)據(jù)為:索引數(shù)據(jù)B。
[0057]本發(fā)明實(shí)施例為了避免每次在將臟數(shù)據(jù)塊從內(nèi)存中寫入到存儲介質(zhì)中后,都立即更新臟數(shù)據(jù)塊的索引數(shù)據(jù),提出了一種批量更新索引數(shù)據(jù)的方法,在為臟數(shù)據(jù)塊創(chuàng)建臟數(shù)據(jù)塊記錄之后,可以執(zhí)行步驟23,從修改后的多個數(shù)據(jù)塊中確定至少兩個數(shù)據(jù)塊,至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)相同。
[0058]繼續(xù)沿用上述例子,臟數(shù)據(jù)塊S的索引數(shù)據(jù)為:索引數(shù)據(jù)B,臟數(shù)據(jù)塊H的索引數(shù)據(jù)為:索引數(shù)據(jù)B,則可以確定臟數(shù)據(jù)塊S和臟數(shù)據(jù)塊H為兩個索引數(shù)據(jù)相同的數(shù)據(jù)塊。
[0059]接著可以執(zhí)行步驟24,將索引數(shù)據(jù)相同的至少兩個臟數(shù)據(jù)塊從內(nèi)存中寫入到存儲介質(zhì)中。
[0060]為了將臟數(shù)據(jù)塊從內(nèi)存寫入存儲介質(zhì)中,首先要為臟數(shù)據(jù)塊分配在存儲介質(zhì)中的存儲地址,存儲介質(zhì)中存儲地址與物理塊號相對應(yīng),通常用物理塊號表征存儲地址。只要一個臟數(shù)據(jù)塊產(chǎn)生,即可為產(chǎn)生的臟數(shù)據(jù)塊分配物理塊號。
[0061]繼續(xù)沿用上述例子,內(nèi)存中有臟數(shù)據(jù)塊S和臟數(shù)據(jù)塊H,則為臟數(shù)據(jù)塊S分配的物理塊號為01,為臟數(shù)據(jù)塊H分配的物理塊號為02,物理塊號01及物理塊號02分別表征存儲介質(zhì)的存儲地址為a和b。然后,將臟數(shù)據(jù)塊S從內(nèi)存中寫入到物理塊號01表征的存儲地址a,將臟數(shù)據(jù)塊H從內(nèi)存中寫入到物理塊號02表征的存儲地址b。
[0062]在將索引數(shù)據(jù)相同的至少兩個臟數(shù)據(jù)塊從內(nèi)存中寫入到存儲介質(zhì)中之后,就可以執(zhí)行步驟25:修改指向索引數(shù)據(jù)相同的至少兩個臟數(shù)據(jù)塊的索引數(shù)據(jù)。
[0063]請參考圖3,圖3為本發(fā)明實(shí)施例中更新索引數(shù)據(jù)的流程圖。更新索引數(shù)據(jù)具體包括以下步驟:
[0064]步驟31:為所述至少兩個數(shù)據(jù)塊創(chuàng)建記錄表,記錄所述至少兩個數(shù)據(jù)塊在所述存儲介質(zhì)中的存儲地址;
[0065]步驟32:根據(jù)所述記錄表,在所述內(nèi)存中修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù),修改后的索引數(shù)據(jù)指向所述至少兩個數(shù)據(jù)塊的存儲地址;
[0066]步驟33:將所述修改后的所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)寫入所述存儲介質(zhì)。
[0067]首先對步驟31進(jìn)行解釋說明。繼續(xù)沿用上述例子,在為臟數(shù)據(jù)塊分配物理塊號后,本發(fā)明實(shí)施例中,為了直接將臟數(shù)據(jù)塊從內(nèi)存中寫入到存儲介質(zhì)中后,能夠索引到臟數(shù)據(jù)塊,需要在內(nèi)存中存儲臟數(shù)據(jù)塊的索引數(shù)據(jù)及物理塊號的對應(yīng)關(guān)系。也就是為臟數(shù)據(jù)塊創(chuàng)建臟數(shù)據(jù)塊記錄,具體的,可以在非易失性內(nèi)存中為臟數(shù)據(jù)塊創(chuàng)建臟數(shù)據(jù)塊記錄。
[0068]由于臟數(shù)據(jù)塊記錄的作用是索引臟數(shù)據(jù)塊,所以為了避免斷電后臟數(shù)據(jù)塊記錄丟失,導(dǎo)致無法索引到臟數(shù)據(jù)塊,可以在非易失性內(nèi)存中存儲臟數(shù)據(jù)塊記錄,保證臟數(shù)據(jù)塊記錄的存儲安全性。
[0069]繼續(xù)沿用上述例子,在為臟數(shù)據(jù)塊S分配物理塊號01之后,為臟數(shù)據(jù)塊S創(chuàng)建臟數(shù)據(jù)塊記錄,記錄臟數(shù)據(jù)塊S的索引數(shù)據(jù)為:索引數(shù)據(jù)B,對應(yīng)的物理塊號為01。同樣的,在為臟數(shù)據(jù)塊H分配物理塊號02之后,為臟數(shù)據(jù)塊H創(chuàng)建臟數(shù)據(jù)塊記錄,記錄臟數(shù)據(jù)塊H的索引數(shù)據(jù)為:索引數(shù)據(jù)B,對應(yīng)的物理塊號為02。
[0070]本發(fā)明實(shí)施例中,在非易失性內(nèi)存中為臟數(shù)據(jù)塊創(chuàng)建臟數(shù)據(jù)塊記錄的同時,還可以在內(nèi)存中建立映射表,映射表用于記錄臟數(shù)據(jù)塊的邏輯塊號與物理塊號的映射關(guān)系,邏輯塊號可以根據(jù)索引數(shù)據(jù)獲得的。
[0071]由于臟數(shù)據(jù)塊記錄是在非易失性內(nèi)存中順序存儲的,所以如果要索引到一個臟數(shù)據(jù)塊,就必須在臟數(shù)據(jù)塊記錄形成的記錄表中順序查找,查找耗時。為了方便快速查找到臟數(shù)據(jù)塊,可以根據(jù)臟數(shù)據(jù)塊的索引數(shù)據(jù)獲得臟數(shù)據(jù)塊的邏輯塊號,然后建立邏輯塊號到物理塊號的映射。索引一個臟數(shù)據(jù)塊時,根據(jù)映射關(guān)系能夠迅速確定臟數(shù)據(jù)塊的物理塊號,方便快捷。
[0072]繼續(xù)沿用上述例子,臟數(shù)據(jù)塊S的索引數(shù)據(jù)為:索引數(shù)據(jù)B,臟數(shù)據(jù)塊H的索引數(shù)據(jù)為:索引數(shù)據(jù)B,原本索引數(shù)據(jù)B能夠索引到數(shù)據(jù)塊D和數(shù)據(jù)塊E,數(shù)據(jù)塊D的邏輯塊號為111,數(shù)據(jù)塊E的邏輯塊號為222,所以可以確定臟數(shù)據(jù)塊S的邏輯塊號為111,臟數(shù)據(jù)塊H的邏輯塊號為222,即原數(shù)據(jù)塊與修改后得到的臟數(shù)據(jù)塊的邏輯塊號相同。
[0073]然后建立映射表,表中邏輯塊號111映射到物理塊號01,邏輯塊號222映射到物理塊號02。索引邏輯塊號為111的臟數(shù)據(jù)塊時,根據(jù)映射表,能夠迅速確定對應(yīng)的物理塊號為Olo而如果根據(jù)多個臟數(shù)據(jù)塊記錄形成的記錄表,就需要在記錄表中順序查找,如果邏輯塊號為ill的臟數(shù)據(jù)塊的記錄位于記錄表的末端,則需要耗費(fèi)很長時間才能索引到邏輯塊號為111的臟數(shù)據(jù)塊。
[0074]雖然使用映射表索引臟數(shù)據(jù)塊方便快捷,但是因為映射表只存儲在內(nèi)存中,一旦斷電,映射表就會消失。所以可以在斷電之后,根據(jù)多個臟數(shù)據(jù)塊記錄形成的記錄表,再生成映射表。通常使用映射表來索引臟數(shù)據(jù)塊。
[0075]接著執(zhí)行步驟32及步驟33。繼續(xù)沿用上述例子,索引數(shù)據(jù)B原本記錄數(shù)據(jù)塊D的物理塊號03和數(shù)據(jù)塊E的物理塊號04,由于分別對數(shù)據(jù)塊D和數(shù)據(jù)塊E進(jìn)行修改,產(chǎn)生了臟數(shù)據(jù)塊S和臟數(shù)據(jù)塊H,所以,索引數(shù)據(jù)B要相應(yīng)的改為記錄臟數(shù)據(jù)塊S的物理塊號01和臟數(shù)據(jù)塊H的物理塊號02。因此,在內(nèi)存中修改索引數(shù)據(jù)B,產(chǎn)生了臟數(shù)據(jù)塊M,臟數(shù)據(jù)塊M記錄了臟數(shù)據(jù)塊S的物理塊號01和臟數(shù)據(jù)塊H的物理塊號02。
[0076]索引數(shù)據(jù)C原本記錄數(shù)據(jù)塊F的物理塊號05和數(shù)據(jù)塊K的物理塊號06,假設(shè)在對數(shù)據(jù)塊D和數(shù)據(jù)塊E進(jìn)行修改之后,還對數(shù)據(jù)塊F和數(shù)據(jù)塊K進(jìn)行修改,產(chǎn)生了臟數(shù)據(jù)塊W和臟數(shù)據(jù)塊R,為臟數(shù)據(jù)塊W和臟數(shù)據(jù)塊R分配的物理塊號為07和08,而臟數(shù)據(jù)塊W和臟數(shù)據(jù)塊R的索引數(shù)據(jù)為:索引數(shù)據(jù)C,兩者共同的索引數(shù)據(jù)為索引數(shù)據(jù)C。所以索引數(shù)據(jù)C要相應(yīng)的改為記錄臟數(shù)據(jù)塊W和臟數(shù)據(jù)塊R的物理塊號07和08。因此,在內(nèi)存中修改索引數(shù)據(jù)C,產(chǎn)生了臟數(shù)據(jù)塊N,臟數(shù)據(jù)塊N記錄了臟數(shù)據(jù)塊W的物理塊號07和臟數(shù)據(jù)塊R的物理塊號08。
[0077]具體更新索引數(shù)據(jù)B和索引數(shù)據(jù)C的過程為:在內(nèi)存中對索引數(shù)據(jù)B和索引數(shù)據(jù)C分別進(jìn)行修改,產(chǎn)生了臟數(shù)據(jù)塊M和臟數(shù)據(jù)塊W。然后為臟數(shù)據(jù)塊M和臟數(shù)據(jù)塊W分別分配在存儲介質(zhì)中的物理塊號為09和10,將臟數(shù)據(jù)塊M和臟數(shù)據(jù)塊W分別從內(nèi)存中寫入到物理塊號為09和10所代表的存儲地址中。
[0078]最后更新索引數(shù)據(jù)A。由于臟數(shù)據(jù)塊M的索引數(shù)據(jù)為:索引數(shù)據(jù)A,臟數(shù)據(jù)塊W的索引數(shù)據(jù)為:索引數(shù)據(jù)A。所以兩者共同對應(yīng)的索引數(shù)據(jù)為索引數(shù)據(jù)A。索引數(shù)據(jù)A原本記錄索引數(shù)據(jù)B的物理塊號11和索引數(shù)據(jù)C的物理塊號12,由于在內(nèi)存中對索引數(shù)據(jù)B和索引數(shù)據(jù)C分別進(jìn)行修改,產(chǎn)生了臟數(shù)據(jù)塊M和臟數(shù)據(jù)塊W。所以,索引數(shù)據(jù)A要相應(yīng)的改為記錄臟數(shù)據(jù)塊M的物理塊號09和臟數(shù)據(jù)塊W的物理塊號10。在內(nèi)存中對索引數(shù)據(jù)A進(jìn)行修改,產(chǎn)生了臟數(shù)據(jù)塊T。然后為臟數(shù)據(jù)塊T分配在存儲介質(zhì)中的物理塊號為13,將臟數(shù)據(jù)塊T從內(nèi)存中寫入到物理塊號為13所代表的存儲地址中。
[0079]本發(fā)明實(shí)施例中,在將修改后的索引數(shù)據(jù)從所述內(nèi)存中寫入所述存儲介質(zhì)中之后,所述方法還包括:
[0080]將非易失性內(nèi)存中的臟數(shù)據(jù)塊記錄表及內(nèi)存中的映射表刪除;
[0081 ] 將修改后的索引數(shù)據(jù)從所述內(nèi)存中刪除。
[0082]具體來講,在將修改后的索引數(shù)據(jù)從內(nèi)存中寫入到存儲介質(zhì)中后,可以在存儲介質(zhì)中索引到修改后的索引數(shù)據(jù),內(nèi)存中的修改后的數(shù)據(jù)就沒必要存儲了,所以可以為了提高內(nèi)存利用率,可以在將修改后的索引數(shù)據(jù)從內(nèi)存中寫入到存儲介質(zhì)中后,將修改后的索弓丨數(shù)據(jù)從內(nèi)存中刪除。
[0083]另外,在將臟數(shù)據(jù)塊及修改后的索引數(shù)據(jù)從內(nèi)存中寫入到存儲介質(zhì)中后,可以直接從存儲介質(zhì)中索引到臟數(shù)據(jù)塊及修改后的索引數(shù)據(jù),非易失性內(nèi)存中的臟數(shù)據(jù)塊記錄表及內(nèi)存中的映射表也沒必要存儲了,所以可以為了提高內(nèi)存利用率,可以在將修改后的索引數(shù)據(jù)從內(nèi)存中寫入到存儲介質(zhì)中后,將修改后的索引數(shù)據(jù)從內(nèi)存中刪除。
[0084]本發(fā)明實(shí)施例中,當(dāng)需要讀取指定臟數(shù)據(jù)塊時,所述方法還包括:
[0085]接收讀取指定臟數(shù)據(jù)塊的讀請求;
[0086]響應(yīng)所述讀請求,在所述內(nèi)存中查找所述指定臟數(shù)據(jù)塊;
[0087]若所述內(nèi)存中存在所述指定臟數(shù)據(jù)塊,則從所述內(nèi)存中讀出所述指定臟數(shù)據(jù)塊;
[0088]若所述內(nèi)存中不存在所述指定臟數(shù)據(jù)塊,根據(jù)所述指定臟數(shù)據(jù)塊的指定邏輯塊號,從所述映射表中查找到所述指定邏輯塊號對應(yīng)的指定物理塊號;
[0089]按照所述指定物理塊號從所述存儲介質(zhì)中讀出所述指定臟數(shù)據(jù)塊。
[0090]具體來講,當(dāng)讀取指定臟數(shù)據(jù)塊時,可以首先從內(nèi)存中查找指定臟數(shù)據(jù)塊,如果指定臟數(shù)據(jù)塊沒有從內(nèi)存中寫入到存儲介質(zhì)中,那么從內(nèi)存中可以直接查找到指定臟數(shù)據(jù)塊,然后從內(nèi)存中讀出指定臟數(shù)據(jù)塊。如果臟數(shù)據(jù)塊從內(nèi)存中寫入到存儲介質(zhì)中,那么臟數(shù)據(jù)塊就會從內(nèi)存中刪除,此時可以利用映射表,從映射表中查找到指定臟數(shù)據(jù)塊的邏輯塊號,進(jìn)而找到對應(yīng)的物理塊號,從物理塊號表征的存儲地址中讀出指定臟數(shù)據(jù)塊。
[0091]基于同一發(fā)明構(gòu)思,本發(fā)明實(shí)施例還提供了一種存儲設(shè)備。請參考圖4,圖4為存儲設(shè)備40的硬件結(jié)構(gòu)示意圖。存儲設(shè)備40可以是SSD(英文:Solid State Drive ;中文:固態(tài)硬盤)包括:處理器41、內(nèi)存42和存儲介質(zhì)43,存儲介質(zhì)43可以為Flash顆粒或其他類型的硬盤。存儲介質(zhì)43中的數(shù)據(jù)塊以樹結(jié)構(gòu)組織,樹的葉子節(jié)點(diǎn)用于保存數(shù)據(jù)塊,樹的父節(jié)點(diǎn)和根節(jié)點(diǎn)用于保存索引數(shù)據(jù),索引數(shù)據(jù)用于索引數(shù)據(jù)塊。圖4所示的存儲設(shè)備涉及到的術(shù)語的含義以及具體實(shí)現(xiàn),可以參考前述圖1至圖3以及實(shí)施例的相關(guān)描述。
[0092]如圖4所示,在實(shí)際應(yīng)用過程中,存儲設(shè)備40可以作為一個獨(dú)立的電子設(shè)備,與服務(wù)器400相連,存儲設(shè)備40還可以作為服務(wù)器400的一個元件,服務(wù)器400向存儲設(shè)備40發(fā)送寫入數(shù)據(jù)的請求,存儲設(shè)備40接收到寫入數(shù)據(jù)的請求后,響應(yīng)寫入數(shù)據(jù)的請求,存儲設(shè)備40的處理器41執(zhí)行本發(fā)明實(shí)施例提供的寫入方法。所述處理器41用于:
[0093]接收多個數(shù)據(jù)塊,寫入所述內(nèi)存;
[0094]在所述內(nèi)存中修改所述多個數(shù)據(jù)塊;
[0095]從所述修改后的多個數(shù)據(jù)塊中確定至少兩個數(shù)據(jù)塊,所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)相同;
[0096]為所述至少兩個數(shù)據(jù)塊分配在所述存儲介質(zhì)中的存儲地址,根據(jù)所述分配的存儲地址,將所述至少兩個數(shù)據(jù)塊寫入所述存儲介質(zhì);
[0097]修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
[0098]可選的,所述處理器41還用于:
[0099]在所述修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)之前,將所述至少兩個數(shù)據(jù)塊從所述內(nèi)存中刪除。
[0100]可選的,處理器41具體用于:
[0101]為所述至少兩個數(shù)據(jù)塊創(chuàng)建記錄表,記錄所述至少兩個數(shù)據(jù)塊在所述存儲介質(zhì)中的存儲地址;
[0102]根據(jù)所述記錄表,在所述內(nèi)存中修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù),修改后的索引數(shù)據(jù)指向所述至少兩個數(shù)據(jù)塊的存儲地址;
[0103]將所述修改后的所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)寫入所述存儲介質(zhì)。
[0104]前述圖1-圖3實(shí)施例中的數(shù)據(jù)寫入方法中的各種變化方式和具體實(shí)例同樣適用于本實(shí)施例的存儲設(shè)備,通過前述對數(shù)據(jù)寫入方法的詳細(xì)描述,本領(lǐng)域技術(shù)人員可以清楚的知道本實(shí)施例中存儲設(shè)備的實(shí)施方法,所以為了說明書的簡潔,在此不再詳述。
[0105]本發(fā)明實(shí)施例中提供的一個或多個技術(shù)方案,至少具有如下技術(shù)效果或優(yōu)點(diǎn):
[0106]本發(fā)明實(shí)施例中,首先在內(nèi)存中修改多個數(shù)據(jù)塊,然后從修改后的多個數(shù)據(jù)塊中確定索引數(shù)據(jù)相同的至少兩個數(shù)據(jù)塊,接著將至少兩個數(shù)據(jù)塊寫入到存儲介質(zhì),最后修改指向至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
[0107]相比現(xiàn)有技術(shù)中每次將修改后的數(shù)據(jù)塊從內(nèi)存寫入存儲介質(zhì)后,都要對修改后的數(shù)據(jù)塊的索引數(shù)據(jù)進(jìn)行更新的技術(shù)方案,本發(fā)明實(shí)施例中從修改后的數(shù)據(jù)塊中確定索引數(shù)據(jù)相同的至少兩個數(shù)據(jù)塊,將索引數(shù)據(jù)相同的至少兩個數(shù)據(jù)塊從內(nèi)存寫入存儲介質(zhì)后,對至少兩個數(shù)據(jù)塊共同的索引數(shù)據(jù)進(jìn)行批量更新,所以減小了對索引數(shù)據(jù)進(jìn)行更新的次數(shù),實(shí)現(xiàn)了減小修改數(shù)據(jù)塊對存儲設(shè)備造成的寫開銷。
[0108]本領(lǐng)域內(nèi)的技術(shù)人員應(yīng)明白,本發(fā)明的實(shí)施例可提供為方法、系統(tǒng)、或計算機(jī)程序產(chǎn)品。因此,本發(fā)明可采用完全硬件實(shí)施例、完全軟件實(shí)施例、或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本發(fā)明可采用在一個或多個其中包含有計算機(jī)可用程序代碼的計算機(jī)可用存儲介質(zhì)(包括但不限于磁盤存儲器和光學(xué)存儲器等)上實(shí)施的計算機(jī)程序產(chǎn)品的形式。
[0109]本發(fā)明是參照根據(jù)本發(fā)明實(shí)施例的方法、設(shè)備(系統(tǒng))、和計算機(jī)程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機(jī)程序指令實(shí)現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機(jī)程序指令到通用計算機(jī)、專用計算機(jī)、嵌入式處理機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機(jī)器,使得通過計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
[0110]這些計算機(jī)程序指令也可存儲在能引導(dǎo)計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機(jī)可讀存儲器中,使得存儲在該計算機(jī)可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
[0111]這些計算機(jī)程序指令也可裝載到計算機(jī)或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機(jī)或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機(jī)實(shí)現(xiàn)的處理,從而在計算機(jī)或其他可編程設(shè)備上執(zhí)行的指令提供用于實(shí)現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
[0112]顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進(jìn)行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。
【權(quán)利要求】
1.一種數(shù)據(jù)寫入方法,所述方法應(yīng)用于存儲設(shè)備中,所述存儲設(shè)備包括處理器、內(nèi)存和存儲介質(zhì),所述存儲介質(zhì)中的數(shù)據(jù)塊以樹結(jié)構(gòu)組織,所述樹的葉子節(jié)點(diǎn)用于保存數(shù)據(jù)塊,所述樹的父節(jié)點(diǎn)和根節(jié)點(diǎn)用于保存索引數(shù)據(jù),所述索引數(shù)據(jù)用于索引所述數(shù)據(jù)塊,所述方法由所述處理器執(zhí)行,包括: 接收多個數(shù)據(jù)塊,寫入所述內(nèi)存; 在所述內(nèi)存中修改所述多個數(shù)據(jù)塊; 從所述修改后的多個數(shù)據(jù)塊中確定至少兩個數(shù)據(jù)塊,所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)相同; 為所述至少兩個數(shù)據(jù)塊分配在所述存儲介質(zhì)中的存儲地址,根據(jù)所述分配的存儲地址,將所述至少兩個數(shù)據(jù)塊寫入所述存儲介質(zhì); 修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
2.如權(quán)利要求1所述的方法,其特征在于,在所述修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)之前,所述方法還包括: 將所述至少兩個數(shù)據(jù)塊從所述內(nèi)存中刪除。
3.如權(quán)利要求1所述的方法,其特征在于,所述修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù),包括: 為所述至少兩個數(shù)據(jù)塊創(chuàng)建記錄表,記錄所述至少兩個數(shù)據(jù)塊在所述存儲介質(zhì)中的存儲地址; 根據(jù)所述記錄表,在所述內(nèi)存中修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù),修改后的所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)指向所述至少兩個數(shù)據(jù)塊的存儲地址; 將所述修改后的所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)寫入所述存儲介質(zhì)。
4.一種存儲設(shè)備,所述存儲設(shè)備包括處理器、內(nèi)存和存儲介質(zhì),所述存儲介質(zhì)中的數(shù)據(jù)塊以樹結(jié)構(gòu)組織,所述樹的葉子節(jié)點(diǎn)用于保存數(shù)據(jù)塊,所述樹的父節(jié)點(diǎn)和根節(jié)點(diǎn)用于保存索引數(shù)據(jù),所述索引數(shù)據(jù)用于索引所述數(shù)據(jù)塊,所述處理器用于: 接收多個數(shù)據(jù)塊,寫入所述內(nèi)存; 在所述內(nèi)存中修改所述多個數(shù)據(jù)塊; 從所述修改后的多個數(shù)據(jù)塊中確定至少兩個數(shù)據(jù)塊,所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)相同; 為所述至少兩個數(shù)據(jù)塊分配在所述存儲介質(zhì)中的存儲地址,根據(jù)所述分配的存儲地址,將所述至少兩個數(shù)據(jù)塊寫入所述存儲介質(zhì); 修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)。
5.如權(quán)利要求4所述的存儲設(shè)備,其特征在于,所述處理器還用于: 在所述修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)之前,將所述至少兩個數(shù)據(jù)塊從所述內(nèi)存中刪除。
6.如權(quán)利要求4所述的存儲設(shè)備,其特征在于,處理器具體用于: 為所述至少兩個數(shù)據(jù)塊創(chuàng)建記錄表,記錄所述至少兩個數(shù)據(jù)塊在所述存儲介質(zhì)中的存儲地址; 根據(jù)所述記錄表,在所述內(nèi)存中修改指向所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù),修改后的索引數(shù)據(jù)指向所述至少兩個數(shù)據(jù)塊的存儲地址;將所述修改后的所述至少兩個數(shù)據(jù)塊的索引數(shù)據(jù)寫入所述存儲介質(zhì)。
【文檔編號】G06F12/02GK104461384SQ201410712344
【公開日】2015年3月25日 申請日期:2014年11月28日 優(yōu)先權(quán)日:2014年11月28日
【發(fā)明者】葉茂 申請人:華為技術(shù)有限公司