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