用于數(shù)據(jù)存儲的數(shù)據(jù)處理方法包括步驟如下:
[0066]步驟S402,獲取用于數(shù)據(jù)存儲的存儲系統(tǒng)的應(yīng)用層的數(shù)據(jù)。
[0067]存儲系統(tǒng)可以是計算機中由存放程序和數(shù)據(jù)的各種存儲設(shè)備、控制部件及管理信息調(diào)度的設(shè)備(硬件)和算法(軟件)所組成的系統(tǒng)。應(yīng)用層的數(shù)據(jù)可以是來自應(yīng)用層的業(yè)務(wù)數(shù)據(jù),應(yīng)用層的數(shù)據(jù)具有一定的冷熱程度,該冷熱程度用于表示數(shù)據(jù)被修改或者寫入的頻度。根據(jù)數(shù)據(jù)的冷熱程度可以將數(shù)據(jù)分為冷數(shù)據(jù)和熱數(shù)據(jù),其中,冷數(shù)據(jù)可以是表示被修改的頻度較小的數(shù)據(jù),長期不會被修改;熱數(shù)據(jù)可以是表示被修改頻度較大的數(shù)據(jù),表明熱數(shù)據(jù)被使用的頻度高。獲取應(yīng)用層的數(shù)據(jù)以便于將該應(yīng)用層的數(shù)據(jù)進(jìn)行存儲。
[0068]步驟S404,將數(shù)據(jù)均勻地寫入到存儲系統(tǒng)的邏輯地址空間中。
[0069]邏輯地址空間可以是指一個源程序在編譯或者鏈接裝配后指令和數(shù)據(jù)所用的所有相對地址的空間。在獲取到應(yīng)用層的數(shù)據(jù)之后,可以將該應(yīng)用層的數(shù)據(jù)以鍵值對(Key-Value)的方式進(jìn)行存儲。可以通過哈希(hash)算法對應(yīng)用層的數(shù)據(jù)進(jìn)行計算得到該數(shù)據(jù)對應(yīng)的邏輯地址,使得數(shù)據(jù)能夠均勻地寫入邏輯地址空間中,具體地,可以是將邏輯地址空間進(jìn)行劃分,分成以預(yù)設(shè)大小為單位的多個邏輯地址區(qū)間,然后通過哈希算法將數(shù)據(jù)均勻地分散到各個邏輯地址區(qū)間中。通過將數(shù)據(jù)均勻地寫入到存儲系統(tǒng)的邏輯地址空間中,保證數(shù)據(jù)在邏輯地址空間的均勻性,從而保持?jǐn)?shù)據(jù)的寫入的頻度的穩(wěn)定性。
[0070]步驟S406,獲取邏輯地址空間中邏輯地址的更新頻度。
[0071]邏輯地址空間中邏輯地址可以是對邏輯地址空間進(jìn)行等單位劃分之后得到的邏輯區(qū)域中的邏輯地址。邏輯地址的更新頻度可以是邏輯地址區(qū)域中邏輯地址的更新頻度,通過該更新頻度可以獲取該邏輯地址區(qū)域?qū)?yīng)的數(shù)據(jù)的冷熱程度。例如,當(dāng)邏輯地址的更新頻度越大,則表示邏輯地址區(qū)域?qū)?yīng)的數(shù)據(jù)為熱數(shù)據(jù),即該數(shù)據(jù)的被修改的頻度大;反之,則表示邏輯地址區(qū)域?qū)?yīng)的數(shù)據(jù)為冷數(shù)據(jù),即該數(shù)據(jù)的被修改的頻度小。具體地,獲取邏輯地址的更新頻度可以是通過邏輯地址的數(shù)據(jù)寫入次數(shù)來判斷,根據(jù)數(shù)據(jù)寫入次數(shù)判斷邏輯地址的更新頻度。
[0072]步驟S408,通過更新頻度選取存儲系統(tǒng)的物理塊。
[0073]物理塊可以是存儲系統(tǒng)中,記錄介質(zhì)上的存儲數(shù)據(jù)的物理區(qū)域,通常在存儲系統(tǒng)中,物理塊主要分為free塊、used塊、erroneous塊和scrub塊四種,其中,free塊b表不可以使用過的空閑的物理塊,used塊表示已經(jīng)使用的物理塊,erroneous塊表示出現(xiàn)錯誤的物理塊,scrub塊表示需要搬移的物理塊。通過更新頻度選取存儲系統(tǒng)的物理塊可以是采用動態(tài)磨損均衡的方式進(jìn)行選取,其中,動態(tài)磨損均衡是指存儲系統(tǒng)的上層邏輯需要獲取一個空閑的物理塊來寫數(shù)據(jù)的時候,采用一定的規(guī)則選擇合適的物理塊。具體地,動態(tài)磨損均衡使用的方法可以是首先通過更新頻度確定數(shù)據(jù)的冷熱程度,即數(shù)據(jù)被修改的頻度,如果確定數(shù)據(jù)長期不會被修改的,則從空閑的物理塊中選擇擦除次數(shù)最多的物理塊,將數(shù)據(jù)存儲到該物理塊中;如果確定數(shù)據(jù)的修改頻度較高,或者無法確定數(shù)據(jù)的修改頻度的,則選擇擦除次數(shù)最小的空閑的物理塊,將數(shù)據(jù)存儲到該擦除次數(shù)最小的物理塊中。
[0074]步驟S410,通過選取的物理塊存儲數(shù)據(jù)。
[0075]在選取到物力塊之后,將應(yīng)用層的數(shù)據(jù)存儲到選取的物理塊上。
[0076]本發(fā)明實施例中,存儲系統(tǒng)還可以具有靜態(tài)磨損均衡的功能,其中,靜態(tài)磨損均衡可以是指在已經(jīng)使用的物理塊中找到擦除次數(shù)最小的物理塊,然后把該物理塊上的數(shù)據(jù)搬移到擦除次數(shù)比較多的物理塊上,例如,在已經(jīng)使用的物理塊組中找到擦除次數(shù)最小的A塊,在空閑的物理塊組中找到擦除次數(shù)最多的B塊,把A塊上的數(shù)據(jù)搬移到B塊上面去,把B塊插入到已經(jīng)使用的物力塊組中,把A塊的數(shù)據(jù)擦除后插入到空閑的物理塊組中。靜態(tài)磨損均衡可以分為幾種模式,通過不同的模式觸發(fā)靜態(tài)磨損均衡,其中,每種模式的觸發(fā)條件不是一樣的,靜態(tài)磨損均衡的模式如下:
[0077]I)前臺模式,當(dāng)物理塊因磨損均衡出現(xiàn)問題時,比如垃圾回收找不到預(yù)期的物理塊,觸發(fā)前臺磨損均衡,執(zhí)行靜態(tài)磨損均衡。
[0078]2)后臺模式:當(dāng)存儲系統(tǒng)處于空閑時,可以觸發(fā)后臺磨損均衡,通過后臺執(zhí)行靜態(tài)磨損均衡。
[0079]3)周期性模式:在向存儲系統(tǒng)寫入數(shù)據(jù)時,需要向存儲系統(tǒng)申請空閑的物理塊,其中,每申請一段空閑的物理塊時,存儲系統(tǒng)的磨損計數(shù)加一,當(dāng)嗎,磨損達(dá)到一定閾值時,觸發(fā)靜態(tài)磨損均衡。
[0080]4)平衡模式:當(dāng)物理塊的最大擦除次數(shù)和最小擦除次數(shù)之差大于一定閾值時,觸發(fā)靜態(tài)磨損均衡。
[0081]靜態(tài)磨損均衡可以使得存儲系統(tǒng)在存入數(shù)據(jù)之后,通過對物力塊的擦除次數(shù)的判斷對數(shù)據(jù)進(jìn)行搬移,實現(xiàn)對物理塊的磨損均衡。
[0082]根據(jù)本發(fā)明實施例,通過將應(yīng)用層的數(shù)據(jù)均勻地寫入到邏輯地址空間中,保證數(shù)據(jù)寫入的穩(wěn)定性,并通過獲取到的邏輯地址的更新頻度選取物力塊,用以存儲數(shù)據(jù),由于邏輯地址的更新頻度可以反映數(shù)據(jù)的冷熱程度,可以將更新頻度大的邏輯地址對應(yīng)的數(shù)據(jù)存儲到擦除次數(shù)少的物理塊,將更新頻度小的邏輯地址對應(yīng)的數(shù)據(jù)存儲到擦除次數(shù)多的物理塊,使得物理塊的磨損均衡達(dá)到合理化,減少靜態(tài)磨損均衡的啟動,減少無效的數(shù)據(jù)搬移,解決了現(xiàn)有技術(shù)中存儲系統(tǒng)的使用壽命短的問題,達(dá)到了延長存儲系統(tǒng)的使用壽命的效果O
[0083]圖5是根據(jù)本發(fā)明第二實施例的用于數(shù)據(jù)存儲的數(shù)據(jù)處理方法的流程圖。該實施例的數(shù)據(jù)處理方法可以作為上述實施例的數(shù)據(jù)處理方法的一種優(yōu)選實施方式。如圖5所示,該用于數(shù)據(jù)存儲的數(shù)據(jù)處理方法包括步驟如下:
[0084]步驟S502,獲取用于數(shù)據(jù)存儲的存儲系統(tǒng)的應(yīng)用層的數(shù)據(jù)。
[0085]存儲系統(tǒng)可以是計算機中由存放程序和數(shù)據(jù)的各種存儲設(shè)備、控制部件及管理信息調(diào)度的設(shè)備(硬件)和算法(軟件)所組成的系統(tǒng)。應(yīng)用層的數(shù)據(jù)可以是來自應(yīng)用層的業(yè)務(wù)數(shù)據(jù),應(yīng)用層的數(shù)據(jù)具有一定的冷熱程度,該冷熱程度用于表示數(shù)據(jù)被修改或者寫入的頻度。根據(jù)數(shù)據(jù)的冷熱程度可以將數(shù)據(jù)分為冷數(shù)據(jù)和熱數(shù)據(jù),其中,冷數(shù)據(jù)可以是表示該數(shù)據(jù)的被修改的頻度較小,長期不會被修改;反之,熱數(shù)據(jù)被修改的頻度大。獲取應(yīng)用層的數(shù)據(jù)以便于將該應(yīng)用層的數(shù)據(jù)進(jìn)行存儲。
[0086]步驟S504,以預(yù)設(shè)大小的邏輯地址區(qū)域為單位對邏輯地址空間進(jìn)行劃分,得到多個邏輯地址區(qū)域。
[0087]對邏輯地址空間進(jìn)行劃分,可以是按照預(yù)設(shè)大小的邏輯地址區(qū)域進(jìn)行劃分,其中,預(yù)設(shè)大小可以是根據(jù)需要進(jìn)行例如,以2Gb為單位對邏輯地址空間進(jìn)行劃分,從而將邏輯地址空間劃分為多個2Gb大小的邏輯地址區(qū)域。具體地,在內(nèi)存中保留桶索引和大記錄索弓I,把存儲系統(tǒng)中的閃存nandflash分成2Gb為單位的小表集,以BLOCK SIZE的大小為順序?qū)懙膯挝?,以便于將?shù)據(jù)通過hash算法均勻的分散到各個小表中,其中,每一個小表即為一個邏輯地址區(qū)域。
[0088]步驟S506,通過哈希算法對數(shù)據(jù)進(jìn)行計算。
[0089]通過哈希算法對數(shù)據(jù)進(jìn)行計算,該哈希算法可以用于使得數(shù)據(jù)能夠均勻地分布到邏輯地址空間。由于通過哈希算法對應(yīng)用層的數(shù)據(jù)進(jìn)行計算,得到數(shù)據(jù)對應(yīng)的邏輯地址,使得數(shù)據(jù)能夠均勻地分布到邏輯地址空間中。
[0090]步驟S508,將計算后的數(shù)據(jù)均勻地寫入到多個邏輯地址區(qū)域中。
[0091]按照計算得到的數(shù)據(jù)對應(yīng)的邏輯地址,可以將數(shù)據(jù)均勻地寫入到多個邏輯地址區(qū)域中,使得每個區(qū)域的數(shù)據(jù)保持均勻,從而使得整個邏輯地址空間的數(shù)據(jù)保持均勻性,進(jìn)而能夠長期保持邏輯地址區(qū)域內(nèi)的數(shù)據(jù)的更新頻度的穩(wěn)定性。
[0092]步驟S510,獲取邏輯地址空間中邏輯地址的更新頻度。
[0093]邏輯地址空間中邏輯地址可以是對邏輯地址空間進(jìn)行等單位劃分之后得到的邏輯區(qū)域中的邏輯地址。邏輯地址的更新頻度可以是邏輯地址區(qū)域中邏輯地址的更新頻度,通過該更新頻度可以獲取該邏輯地址區(qū)域?qū)?yīng)的數(shù)據(jù)的冷熱程度。例如,當(dāng)邏輯地址的更新頻度越大,則表示邏輯地址區(qū)域?qū)?yīng)的數(shù)據(jù)為熱數(shù)據(jù),即該數(shù)據(jù)的被修改的頻度大;反之,則表示邏輯地址區(qū)域?qū)?yīng)的數(shù)據(jù)為冷數(shù)據(jù),即該數(shù)據(jù)的被修改的頻度小。具體地,獲取邏輯地址的更新頻度可以是通過邏輯地址的數(shù)據(jù)寫入次數(shù)來判斷,根據(jù)數(shù)據(jù)寫入次數(shù)判斷邏輯地址的更新頻度。
[0094]步驟S512,通過更新頻度選取存儲系統(tǒng)的物理塊。
[0095]物理塊可以是存儲系統(tǒng)中,記錄介質(zhì)上的存儲數(shù)據(jù)的物理區(qū)域,通常在存儲系統(tǒng)中,物理塊主要分為free塊、used塊、erroneous塊和scrub塊四種,其中,free塊b表不可以使用過的空閑的物理塊,used塊表示已經(jīng)使用的物理塊,erroneous塊表示出現(xiàn)錯誤的物理塊,scrub塊表示需要搬移的物理塊。通過更新頻度選取存儲系統(tǒng)的物理塊可以是采用動態(tài)磨損均衡的方式進(jìn)行選取,其中,動態(tài)磨損均衡是指存儲系統(tǒng)的上層邏輯需要獲取一個空閑的物理塊來寫數(shù)據(jù)的時候,采用一定的規(guī)則選擇合適的物理塊。具體地,動態(tài)磨損均衡使用的方法可以是首先通過更新頻度確定數(shù)據(jù)的冷熱程度,即數(shù)據(jù)被修改的頻度,如果確定數(shù)據(jù)長期不會被修改的,則從空閑的物理塊中選擇擦除次數(shù)最多的物理塊,將數(shù)據(jù)存儲到該物理塊中;如果確定數(shù)據(jù)的