一種存儲設(shè)備及其存儲數(shù)據(jù)的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)存儲技術(shù)領(lǐng)域,尤其涉及一種存儲設(shè)備及其存儲數(shù)據(jù)的方法。
【背景技術(shù)】
[0002]在現(xiàn)有技術(shù)中,將寫數(shù)據(jù)先寫入存儲設(shè)備的緩存(Cache)中,同時將寫數(shù)據(jù)寫入存儲設(shè)備的日志中,寫日志保障數(shù)據(jù)不因掉電丟失。當(dāng)Cache滿或日志寫滿數(shù)據(jù),將Cache中的數(shù)據(jù)全部寫入到持久化存儲介質(zhì)中,同時刪除日志,其中,將緩存中的數(shù)據(jù)寫到持久化存儲介質(zhì)中稱為刷盤。刷盤造成有些合并度比較小的數(shù)據(jù)寫入持久化存儲介質(zhì)中,寫放大率仍然較高。
【發(fā)明內(nèi)容】
[0003]本發(fā)明實施例提供了一種存儲設(shè)備及其存儲數(shù)據(jù)的方法。
[0004]—方面,本申請?zhí)岢隽艘环N存儲設(shè)備存儲數(shù)據(jù)的方法,該方法通過緩存控制器獲取每個數(shù)據(jù)塊的刷盤指數(shù)。數(shù)據(jù)塊的刷盤指數(shù)是通過緩存控制器根據(jù)多個數(shù)據(jù)塊中每一個數(shù)據(jù)塊的寫訪問次數(shù)AC以及同一個數(shù)據(jù)塊中寫訪問所訪問的地址的數(shù)量AN獲得。將多個數(shù)據(jù)塊中部分?jǐn)?shù)據(jù)塊中的數(shù)據(jù)存儲到所述持久化存儲介質(zhì)時,部分?jǐn)?shù)據(jù)塊中的每一個數(shù)據(jù)塊的刷盤指數(shù)在多個數(shù)據(jù)塊的刷盤指數(shù)從大到小的序列中的位置均大于序列閾值。從而同時根據(jù)一個數(shù)據(jù)塊中的所訪問的地址數(shù)量以及每個地址的訪問次數(shù)來確定刷盤指數(shù),減少數(shù)據(jù)的寫放大。
[0005]在一個可能的設(shè)計中,在將刷盤指數(shù)滿足閾值的數(shù)據(jù)塊中包括的數(shù)據(jù)寫入持久化存儲介質(zhì)后,還將刷盤指數(shù)不滿足閾值的數(shù)據(jù)塊中的數(shù)據(jù)寫入持久化存儲介質(zhì)的臨時數(shù)據(jù)區(qū)。使不滿足閾值的數(shù)據(jù)塊中包括的數(shù)據(jù)在清除緩存和日志的情況下,又發(fā)生掉電時,可以直接從臨時數(shù)據(jù)區(qū)中將其恢復(fù),保證了緩存中數(shù)據(jù)的可靠性。
[0006]在一個可能的設(shè)計中,對緩存中的數(shù)據(jù)塊刷盤時,優(yōu)先將部分?jǐn)?shù)據(jù)塊中超過緩存時間的數(shù)據(jù)塊中包括的數(shù)據(jù)存儲到持久化存儲介質(zhì)中,再對刷盤指數(shù)超出閾值的數(shù)據(jù)塊中包括的數(shù)據(jù)存儲到持久化存儲介質(zhì)中。從而使超過緩存時間的數(shù)據(jù)塊中包括的數(shù)據(jù)能夠及時的刷盤到持久化存儲介質(zhì)中,保證存儲設(shè)備中數(shù)據(jù)存儲的安全性。
[0007]在一個可能的設(shè)計中,數(shù)據(jù)在寫入緩存的同時,還寫入到存儲設(shè)備的日志中。緩存中的數(shù)據(jù)在掉電等情況下丟失時,可以通過存儲設(shè)備的日志將緩存中沒有存儲到持久化存儲介質(zhì)的數(shù)據(jù)找回。
[0008]在一個可能的設(shè)計中,刷盤指數(shù)具體可以是:X*AC_Y*AN,其中X和Y為常量。通過對AC和AN配置一個常量,對AC和AN的權(quán)重進(jìn)行配置,使計算結(jié)果可以根據(jù)不同的存儲設(shè)備進(jìn)行調(diào)節(jié)。
[0009]另一方面,本申請包括了一種存儲設(shè)備,該存儲設(shè)備包含緩存控制器、緩存和持久化存儲介質(zhì),所述緩存包含多個數(shù)據(jù)塊。所述緩存控制器包括用于確定緩存中存儲的數(shù)據(jù)以及計算刷盤指數(shù)。刷盤指數(shù)是通過緩存控制器根據(jù)多個數(shù)據(jù)塊中每一個數(shù)據(jù)塊的寫訪問次數(shù)AC以及同一個數(shù)據(jù)塊中寫訪問所訪問的地址的數(shù)量AN獲得。以及,緩存控制器用于將緩存中部分刷盤指數(shù)滿足閾值的數(shù)據(jù)塊中包括的數(shù)據(jù)刷盤到持久化存儲介質(zhì)中。部分?jǐn)?shù)據(jù)塊中的每一個數(shù)據(jù)塊的刷盤指數(shù)在多個數(shù)據(jù)塊的刷盤指數(shù)從大到小的序列中的位置均大于序列閾值。從而同時根據(jù)一個數(shù)據(jù)塊中的所訪問的地址數(shù)量以及每個地址的訪問次數(shù)來確定刷盤指數(shù),減少數(shù)據(jù)的寫放大。
[0010]在一個可能的設(shè)計中,當(dāng)對緩存中的數(shù)據(jù)塊刷盤時,優(yōu)先對部分?jǐn)?shù)據(jù)塊中超過緩存時間的數(shù)據(jù)塊中包括的數(shù)據(jù)存儲到持久化存儲介質(zhì)中,再對刷盤指數(shù)超出閾值的數(shù)據(jù)塊中包括的數(shù)據(jù)存儲到持久化存儲介質(zhì)中。從而使超過緩存時間的數(shù)據(jù)塊中包括的數(shù)據(jù)能夠及時的刷盤到持久化存儲介質(zhì)中,保證存儲設(shè)備中數(shù)據(jù)存儲的安全性。
[0011]在一個可能的設(shè)計中,數(shù)據(jù)在寫入緩存的同時,還寫入到存儲設(shè)備的日志中。緩存中的數(shù)據(jù)在掉電等情況下丟失時,可以通過存儲設(shè)備的日志將緩存中沒有刷盤的數(shù)據(jù)找回。
[0012]在一個可能的設(shè)計中,刷盤指數(shù)具體可以是:X*AC_Y*AN,其中X和Y為常量。通過對AC和AN配置一個常量,對AC和AN的權(quán)重進(jìn)行配置,使計算結(jié)果可以根據(jù)不同的存儲設(shè)備進(jìn)行調(diào)節(jié)。
[0013]本發(fā)明實施例提供一種存儲設(shè)備及其存儲數(shù)據(jù)的方法,根據(jù)多個數(shù)據(jù)塊中每一個數(shù)據(jù)塊的寫訪問的次數(shù)AC以及寫訪問所訪問的地址的數(shù)量AN獲得刷盤指數(shù)。將緩存中部分刷盤指數(shù)滿足閾值的數(shù)據(jù)塊中包括的數(shù)據(jù)刷盤到持久化存儲介質(zhì)中。從而減少了部分刷盤指數(shù)低的數(shù)據(jù)塊在將數(shù)據(jù)刷盤到持久化存儲介質(zhì)時造成的寫放大的問題,提高了存儲設(shè)備的使用效率。
【附圖說明】
[0014]圖1為本發(fā)明實施例提供的一種元數(shù)據(jù)表;
[0015]圖2為本發(fā)明實施例提供的一種緩存中按數(shù)據(jù)塊排列的需要存儲到持久化存儲介質(zhì)的數(shù)據(jù)信息表;
[0016]圖3為本發(fā)明實施例提供的一種存儲數(shù)據(jù)的方法流程圖;
[0017]圖4為本發(fā)明實施例提供的一種存儲設(shè)備的硬件結(jié)構(gòu)圖;
[0018]圖5為本發(fā)明實施例提供的一種存儲數(shù)據(jù)的效果對比圖。
【具體實施方式】
[0019]下面,通過具體實施例結(jié)合附圖對本發(fā)明作進(jìn)一步的說明。
[0020]一種存儲設(shè)備,包括緩存控制器、緩存(cache)和持久化存儲介質(zhì)。緩存用于暫時存儲將要寫入持久化存儲介質(zhì)的數(shù)據(jù),數(shù)據(jù)通過緩存控制器寫入緩存中。緩存控制器用于對寫入緩存的內(nèi)容進(jìn)行控制,以及對緩存將要寫入持久化存儲介質(zhì)的數(shù)據(jù)進(jìn)行控制。
[0021]緩存控制器統(tǒng)計cache中每個數(shù)據(jù)塊的刷盤指數(shù)。將cache中的數(shù)據(jù)塊按照刷盤指數(shù)進(jìn)行排列,并根據(jù)刷盤指數(shù)進(jìn)行刷盤。所述根據(jù)刷盤指數(shù)刷盤是指將刷盤指數(shù)超出閾值的數(shù)據(jù)塊進(jìn)行刷盤。閾值可以根據(jù)不同的存儲設(shè)備設(shè)定,也可以根據(jù)存儲設(shè)備在不同時刻進(jìn)行的不同任務(wù)設(shè)置,在此不再敖述。本發(fā)明實施例中的達(dá)到閾值包括大于(>)、大于等于(2 )、小于(O、小于等于( <),或等于(=)設(shè)定的閾值、又或者是位于設(shè)定的閾值區(qū)間。
[0022]在本發(fā)明的實施例中,將cache中的數(shù)據(jù)塊按照刷盤指數(shù)刷盤前,優(yōu)先對超過緩存時間的數(shù)據(jù)塊中包括的數(shù)據(jù)存儲到持久化存儲介質(zhì)中,再對刷盤指數(shù)超出閾值的數(shù)據(jù)塊存儲到持久化存儲介質(zhì)中。
[0023]刷盤指數(shù)是指同一數(shù)據(jù)塊中寫訪問所訪問的地址的數(shù)量AN以及同一數(shù)據(jù)塊中每一個數(shù)據(jù)的寫訪問的次數(shù)AC進(jìn)行計算。在本發(fā)明的實施例中,刷盤指數(shù)可采用的具體計算方式為:
[0024]刷盤指數(shù)= (X*AC)_(Y*AN),其中X、Y為常量。
[0025]在本發(fā)明的實施例中,刷盤指數(shù)還可以采用的具體計算方式為:
[0026]刷盤指數(shù)= (AC*M) + (N*AN),其中Μ、Ν為常量。
[0027]在本發(fā)明的實施例中,刷盤指數(shù)更可以采用的具體計算方式為:
[0028]刷盤指數(shù)= (AC*A)/(B*AN),其中Α、Β為常量。
[0029]本領(lǐng)域技術(shù)人員知道,上述刷盤指數(shù)的計算只是本發(fā)明實施例中所列舉的一個例子,不能用于對本發(fā)明的具體內(nèi)容進(jìn)行限定。只要是考慮本發(fā)明實施例中所提到的同一數(shù)據(jù)塊中寫訪問所訪問的地址的數(shù)量以及同一數(shù)據(jù)塊中每一個數(shù)據(jù)的寫訪問的次數(shù),從而計算出一個值或范圍,或者是位于該范圍的區(qū)間都在本發(fā)明的保護(hù)范圍內(nèi)。
[0030]在本發(fā)明實施例中,同一數(shù)據(jù)塊中寫訪問所訪問的地址的數(shù)量用于表示寫入同一數(shù)據(jù)塊的不同地址的數(shù)據(jù)條數(shù)。同一數(shù)據(jù)塊中每一個數(shù)據(jù)的寫訪問的次數(shù)用于表示一個數(shù)據(jù)塊中所有同一地址被多次寫入的次數(shù)。例如Cache中第一數(shù)據(jù)塊包括20個地址,其中地址I寫入I次、地址3寫入2次、地址4寫入I次、地址7寫入4次、地址15寫入I次、地址16寫入3次、地址18寫入I次、地址20寫入5次。在本例子中寫訪問所訪問的地址的數(shù)量的和AN為8,寫訪問的次數(shù)AC為10。
[0031 ]緩存控制器將cache中的數(shù)據(jù)塊存儲到持久化存儲介質(zhì)時,遍歷cache中的每條數(shù)據(jù),通過查找元數(shù)據(jù)表,將各個數(shù)據(jù)在持久化存儲介質(zhì)中存儲的位置發(fā)送到cache中。對cache中的每條數(shù)據(jù)找到持久化存儲介質(zhì)中的存儲位置,將cache中的數(shù)據(jù)按照在持久化存儲介質(zhì)的不同數(shù)據(jù)塊分塊在cache中重新進(jìn)行存儲。對cache中的數(shù)據(jù)塊存儲到持久化存儲介質(zhì)時,還需要將持久化存儲介質(zhì)中該數(shù)據(jù)塊的所有內(nèi)容讀到cache中,與cache中將要寫入的內(nèi)容合并,合并完成后再將整個合并后的數(shù)據(jù)塊寫入持久化存儲介質(zhì)中。
[0032]在一個例子中,圖1本發(fā)明實施例提供的一種元數(shù)據(jù)表。如圖1示,元數(shù)據(jù)表用于表示持久化存儲介質(zhì)中各個物理地址的數(shù)據(jù)信息,在本發(fā)明的實施例中,僅示例性的列出了部分內(nèi)容。包括數(shù)據(jù)塊33、地址“16”、數(shù)據(jù)的名稱“File4”、該區(qū)域的索引關(guān)鍵字為“0323316”、該區(qū)域在存儲介質(zhì)中的物理地址“A00001”。數(shù)據(jù)塊51、地址“24”數(shù)據(jù)的名稱“Filel”、該區(qū)域的索引關(guān)鍵字“0325124”、該區(qū)域在存儲介質(zhì)中的物理地址“B00001”。數(shù)據(jù)塊76、地址“19”、數(shù)據(jù)的名稱“File2”、該區(qū)域的索引關(guān)鍵字“0327619”、該區(qū)域在存儲介質(zhì)中的物理地址“C00001” ;地址“22”、數(shù)據(jù)的名稱“File3”、該區(qū)域的索引關(guān)鍵字“0327622”、該區(qū)域在存儲介質(zhì)中的物理地址“C00002”。緩存控制器通過查找元數(shù)據(jù)表,獲取元數(shù)據(jù)表中各個數(shù)