在存儲設備中存儲數(shù)據(jù)的方法和存儲控制器的制造方法
【技術領域】
[0001]本發(fā)明涉及計算機領域,尤其涉及在存儲設備中存儲數(shù)據(jù)的方法和存儲控制器。
【背景技術】
[0002]隨著網(wǎng)絡技術的不斷發(fā)展,數(shù)據(jù)的存儲方式也發(fā)生了很大的變化,在一種典型的存儲場景下,主機先通過網(wǎng)絡文件系統(tǒng)(Network Fi le System,NFS)協(xié)議或通用網(wǎng)絡文件系統(tǒng)(Common Internet Fi le System, CIFS)協(xié)議掛載到存儲陣列,然后再將文件寫入存儲陣列中,其中,主機將文件寫入存儲陣列中之前,文件中的數(shù)據(jù)會經(jīng)過緩存(cache)模塊緩存,當緩存中文件的數(shù)據(jù)達到向下寫盤條件時,先由該緩存模塊的下層模塊將文件中的數(shù)據(jù)按照固定大小分塊,重刪、壓縮等,再由變長分配器(grain)模塊分配空間,將數(shù)據(jù)下盤。
[0003]現(xiàn)有技術的數(shù)據(jù)存儲方法中,會打亂同一文件的數(shù)據(jù)的順序性,破壞同一文件的數(shù)據(jù)的局部性規(guī)則,導致數(shù)據(jù)的讀寫效率低;其中同一文件的數(shù)據(jù)的順序性是指同一文件的數(shù)據(jù)按照數(shù)據(jù)塊偏移量從小到大的順序在存儲介質(zhì)中連續(xù)存儲;同一文件的數(shù)據(jù)的局部性是指同一文件的數(shù)據(jù)在存儲介質(zhì)的一段連續(xù)存儲空間中存儲。
【發(fā)明內(nèi)容】
[0004]本發(fā)明實施例提供在存儲設備中存儲數(shù)據(jù)的方法和存儲控制器,可以提高數(shù)據(jù)的讀寫效率。
[0005]第一方面,提供了一種在存儲設備中存儲數(shù)據(jù)的方法,所述存儲設備包括存儲控制器和存儲介質(zhì),所述方法包括:
[0006]所述存儲控制器獲得多個數(shù)據(jù)塊;所述多個數(shù)據(jù)塊分別攜帶文件標識;
[0007]所述存儲控制器從所述多個數(shù)據(jù)塊中確定具有相同文件標識的數(shù)據(jù)塊;
[0008]根據(jù)所述具有相同文件標識的數(shù)據(jù)塊的偏移量從小到大的順序,將所述具有相同文件標識的數(shù)據(jù)塊寫入所述存儲介質(zhì)連續(xù)的存儲空間中。
[0009]結合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述根據(jù)所述具有相同文件標識的數(shù)據(jù)塊的偏移量從小到大的順序,將所述具有相同文件標識的數(shù)據(jù)塊寫入所述存儲介質(zhì)連續(xù)的存儲空間中,包括:
[0010]查詢所述存儲介質(zhì)中的未分配空間;
[0011]確定所述未分配空間包括的多個連續(xù)子空間中每個連續(xù)子空間的長度;
[0012]從所述多個連續(xù)子空間中選取所述長度大于所述具有相同文件標識的數(shù)據(jù)塊的數(shù)目的一個連續(xù)子空間;
[0013]根據(jù)所述具有相同文件標識的數(shù)據(jù)塊的偏移量從小到大的順序,將所述具有相同文件標識的數(shù)據(jù)塊寫入所述一個連續(xù)子空間中。
[0014]結合第一方面或第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,所述文件標識為存儲對象標識,所述存儲控制器為每個文件分配唯一的存儲對象標識,并在每個文件的數(shù)據(jù)塊的描述信息中添加存儲對象標識。
[0015]第二方面,提供了一種存儲控制器,所述存儲控制器構成存儲設備,所述存儲設備還包括存儲介質(zhì),所述存儲控制器包括:
[0016]獲取單元,用于獲得多個數(shù)據(jù)塊;所述多個數(shù)據(jù)塊分別攜帶文件標識;
[0017]確定單元,用于從所述獲取單元獲取的多個數(shù)據(jù)塊中確定具有相同文件標識的數(shù)據(jù)塊;
[0018]寫入單元,用于根據(jù)所述確定單元確定的具有相同文件標識的數(shù)據(jù)塊的偏移量從小到大的順序,將所述具有相同文件標識的數(shù)據(jù)塊寫入所述存儲介質(zhì)連續(xù)的存儲空間中。
[0019]結合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述寫入單元包括:
[0020]查詢子單元,用于查詢所述存儲介質(zhì)中的未分配空間;
[0021]確定子單元,用于確定所述查詢子單元查詢的未分配空間包括的多個連續(xù)子空間中每個連續(xù)子空間的長度;
[0022]選取子單元,用于從所述多個連續(xù)子空間中選取所述長度大于所述具有相同文件標識的數(shù)據(jù)塊的數(shù)目的一個連續(xù)子空間;
[0023]寫入子單元,用于根據(jù)所述具有相同文件標識的數(shù)據(jù)塊的偏移量從小到大的順序,將所述具有相同文件標識的數(shù)據(jù)塊寫入所述選取子單元選取的一個連續(xù)子空間中。
[0024]結合第二方面或第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,所述獲取單元獲取的數(shù)據(jù)塊中攜帶的文件標識為存儲對象標識,所述存儲控制器為每個文件分配唯一的存儲對象標識,并在每個文件的數(shù)據(jù)塊的描述信息中添加存儲對象標識。
[0025]第三方面,提供了一種存儲控制器,所述存儲控制器構成存儲設備,所述存儲設備還包括存儲介質(zhì),所述存儲控制器包括:
[0026]存儲器和處理器;
[0027]所述存儲器,用于存儲程序指令;
[0028]所述處理器,用于根據(jù)所述存儲器中存儲的程序指令執(zhí)行以下操作:
[0029]所述存儲控制器獲得多個數(shù)據(jù)塊;所述多個數(shù)據(jù)塊分別攜帶文件標識;
[0030]所述存儲控制器從所述多個數(shù)據(jù)塊中確定具有相同文件標識的數(shù)據(jù)塊;
[0031]根據(jù)所述具有相同文件標識的數(shù)據(jù)塊的偏移量從小到大的順序,將所述具有相同文件標識的數(shù)據(jù)塊寫入所述存儲介質(zhì)連續(xù)的存儲空間中。
[0032]結合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,所述處理器執(zhí)行所述根據(jù)所述具有相同文件標識的數(shù)據(jù)塊的偏移量從小到大的順序,將所述具有相同文件標識的數(shù)據(jù)塊寫入所述存儲介質(zhì)連續(xù)的存儲空間中的操作,包括:
[0033]查詢所述存儲介質(zhì)中的未分配空間;
[0034]確定所述未分配空間包括的多個連續(xù)子空間中每個連續(xù)子空間的長度;
[0035]從所述多個連續(xù)子空間中選取所述長度大于所述具有相同文件標識的數(shù)據(jù)塊的數(shù)目的一個連續(xù)子空間;
[0036]根據(jù)所述具有相同文件標識的數(shù)據(jù)塊的偏移量從小到大的順序,將所述具有相同文件標識的數(shù)據(jù)塊寫入所述一個連續(xù)子空間的連續(xù)的存儲空間中。
[0037]結合第三方面或第三方面的第一種可能的實現(xiàn)方式,在第三方面的第二種可能的實現(xiàn)方式中,所述文件標識為存儲對象標識,所述存儲控制器為每個文件分配唯一的存儲對象標識,并在每個文件的數(shù)據(jù)塊的描述信息中添加存儲對象標識。
[0038]本發(fā)明實施例提供了一種在存儲設備中存儲數(shù)據(jù)的方法,其中,存儲設備包括存儲控制器和存儲介質(zhì),存儲控制器獲得多個數(shù)據(jù)塊,多個數(shù)據(jù)塊分別攜帶文件標識,存儲控制器從多個數(shù)據(jù)塊中確定具有相同文件標識的數(shù)據(jù)塊,根據(jù)具有相同文件標識的數(shù)據(jù)塊的偏移量從小到大的順序,將具有相同文件標識的數(shù)據(jù)塊寫入存儲介質(zhì)連續(xù)的存儲空間中。由上可見,本發(fā)明實施例中,由于在存儲數(shù)據(jù)時,恢復了數(shù)據(jù)塊的順序性,保證了存儲數(shù)據(jù)的局部性規(guī)則,因此有效提高了數(shù)據(jù)的讀寫效率。
【附圖說明】
[0039]圖1為本發(fā)明實施例一提供的在存儲設備中存儲數(shù)據(jù)的方法流程圖;
[0040]圖2為本發(fā)明實施例二提供的在存儲設備中存儲數(shù)據(jù)的方法流程圖;
[0041]圖3為本發(fā)明實施例三提供的數(shù)據(jù)存儲方法示意圖;
[0042]圖4為本發(fā)明實施例四提供的存儲控制器結構圖;
[0043]圖5為本發(fā)明實施例五提供的存儲控制器結構圖。
【具體實施方式】
[0044]下面通過附圖和實施例,對本發(fā)明的技術方案做進一步的詳細描述。
[0045]為使本發(fā)明實施例的目的、技術方案和優(yōu)點更加清楚,下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚地描述。
[0046]圖1為本發(fā)明實施例一提供的在存儲設備中存儲數(shù)據(jù)的方法流程圖,其中,存儲設備包括存儲控制器和存儲介質(zhì),該方法的執(zhí)行主體為存儲控制器,該方法包括:
[0047]步驟101,存儲控制器獲得多個