一種存儲設(shè)備的事務(wù)恢復(fù)方法,及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及存儲技術(shù)領(lǐng)域,特別涉及一種存儲設(shè)備的事務(wù)恢復(fù)方法,及裝置。
【背景技術(shù)】
[0002]存儲數(shù)據(jù)一致性要求存儲系統(tǒng)在意外故障發(fā)生后能夠恢復(fù)到一致性狀態(tài)(所有數(shù)據(jù)都具有一致的狀態(tài)),從而實現(xiàn)后續(xù)存儲訪問請求的處理。事務(wù)處理是常見的保證存儲系統(tǒng)的數(shù)據(jù)一致性的方式。在事務(wù)處理中,同一操作中不同的數(shù)據(jù)訪問請求構(gòu)成一個事務(wù)。同一事務(wù)中的數(shù)據(jù)訪問要求提供原子性(atomicity)與持久性(durability)。原子性要求同一數(shù)據(jù)中的數(shù)據(jù)訪問請求全部完成或者全部失敗。持久性要求同一數(shù)據(jù)中的數(shù)據(jù)更新在系統(tǒng)意外掉電后不丟失。
[0003]傳統(tǒng)的寫前日志(Write-AheadLogging, WAL)和影子頁(Shadow Paging)方法在軟件中實現(xiàn)。寫前日志方法首先將數(shù)據(jù)新版本寫入日志區(qū)域,等待日志持久化之后寫入事務(wù)提交記錄,直至事務(wù)提交記錄持久化之后將數(shù)據(jù)新版本復(fù)制到原來位置。影子頁方法為數(shù)據(jù)新版本異地分配存儲空間并寫入,等待數(shù)據(jù)新版本持久化之后更新指針?biāo)饕畔⒁灾赶驍?shù)據(jù)新版本,直至指針?biāo)饕志没蠓娇苫厥諗?shù)據(jù)舊版本的存儲空間。這些方法要求軟件系統(tǒng)實現(xiàn)持久化,即頻繁使用同步刷寫操作將數(shù)據(jù)更新刷寫到非易失性存儲器中。由于存儲設(shè)備中通常使用易失性存儲器件,如DRAM(Dynamic Random Access Memory,動態(tài)隨機(jī)存取存儲器)或SRAM (Static Random Access Memory,靜態(tài)隨機(jī)存取存儲器),作為緩存,同步刷寫要求數(shù)據(jù)從緩存替換到持久性介質(zhì)中,因而軟件控制的同步刷寫操作代價較大。此外,寫前日志要求數(shù)據(jù)新版本寫入兩次,即日志寫和原地寫,重復(fù)數(shù)據(jù)寫入也影響存儲系統(tǒng)的性能。
[0004]事務(wù)提交是指事務(wù)處理完畢后生成了正確的數(shù)據(jù)的這種狀態(tài)。事務(wù)提交中止是指事務(wù)在處理過程中發(fā)生中止的情況,由于事務(wù)處理過程中已經(jīng)產(chǎn)生了一部分?jǐn)?shù)據(jù),事務(wù)處理的中止會導(dǎo)致事務(wù)處理產(chǎn)生的數(shù)據(jù)并不完整,因此也不正確。因此,事務(wù)提交狀態(tài)下的數(shù)據(jù)滿足存儲數(shù)據(jù)一致性的要求,而是他情況,如事務(wù)中止?fàn)顟B(tài)下的數(shù)據(jù)不滿足存儲數(shù)據(jù)一致性的要求。
[0005]新型非易失性存儲器件(Non-Volatile Memory, NVM)的發(fā)展使得存儲設(shè)備內(nèi)部提供事務(wù)處理的方式更為高效。其中,閃存(Flash Memory)的存儲單元需要擦除后才能寫入,因此閃存采用異地更新的方式以避免擦除操作帶來的高延遲。該異地更新的特性同時保留了數(shù)據(jù)的新舊兩個版本,因此使得設(shè)備內(nèi)部提供事務(wù)處理代價降低。同時,新型字節(jié)尋址的非易失性存儲器件,如 STT-RAM(Spin-Transfer Torque Random Access Memory,自旋轉(zhuǎn)移力矩隨機(jī)存儲器)、PCM(Phase Change Memory,相變存儲器)、RRAM(Resistive RandomAccess Memory,阻變式存儲器)等,也成為設(shè)備內(nèi)部緩存的替代品。由于這些器件能夠持久保存數(shù)據(jù),因此可以降低數(shù)據(jù)丟失的概率。盡管非易失性緩存提供了數(shù)據(jù)持久化,但并不能保證數(shù)據(jù)的一致性。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實施例提供了一種存儲設(shè)備的事務(wù)恢復(fù)方法,及裝置,用于保證數(shù)據(jù)的一致性。
[0007]本發(fā)明實施例一方面提供了一種存儲設(shè)備的事務(wù)恢復(fù)方法,包括:
[0008]在執(zhí)行事務(wù)處理過程中,將所述事務(wù)的第二版本數(shù)據(jù)存儲到存儲設(shè)備的非易失性緩存;若存在所述事務(wù)的第一版本數(shù)據(jù),則所述第一版本數(shù)據(jù)存儲在所述存儲設(shè)備的非易失性緩存或者所述存儲設(shè)備的非易失性存儲器;所述第二版本數(shù)據(jù)為本次執(zhí)行事務(wù)處理過程中產(chǎn)生的數(shù)據(jù);所述第一版本數(shù)據(jù)為本次之前執(zhí)行所述事務(wù)已提交的數(shù)據(jù);
[0009]在將所述事務(wù)的第二版本數(shù)據(jù)存儲到存儲設(shè)備的非易失性緩存過程中,保持所述第一版本數(shù)據(jù);
[0010]若需要對所述事務(wù)進(jìn)行恢復(fù),則獲取所述第一版本數(shù)據(jù)。
[0011]結(jié)合一方面的實現(xiàn)方式,在第一種可能的實現(xiàn)方式中,所述保持所述第一版本數(shù)據(jù)包括:
[0012]禁止回收所述第一版本數(shù)據(jù)對應(yīng)的地址空間;
[0013]若所述第一版本數(shù)據(jù)在非易失性緩存,則設(shè)置所述第一版本數(shù)據(jù)對應(yīng)的地址空間有效;若所述第一版本數(shù)據(jù)在非易失性存儲器,則禁止緩存替換算法選中所述第一版本數(shù)據(jù)對應(yīng)的地址空間。
[0014]結(jié)合一方面的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述方法還包括:
[0015]在第二版本數(shù)據(jù)遞交之后,并且在所述第一版本數(shù)據(jù)回收之前,將所述第二版本數(shù)據(jù)作為第一版本數(shù)據(jù),并更新第一版本數(shù)據(jù)的邏輯地址與物理地址之間的映射關(guān)系;所述邏輯地址為軟件可見的地址。
[0016]結(jié)合一方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,在將所述事務(wù)的第二版本數(shù)據(jù)存儲到存儲設(shè)備的非易失性緩存過程中,所述方法還包括:
[0017]記錄各事務(wù)對應(yīng)的數(shù)據(jù)的處理狀態(tài),所述處理狀態(tài)包括:空閑、活躍、已提交、中止以及已更新映射。
[0018]結(jié)合一方面的第三種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述若需要對所述事務(wù)進(jìn)行恢復(fù),則獲取所述第一版本數(shù)據(jù)包括:
[0019]若需要對所述事務(wù)進(jìn)行恢復(fù),則獲取非易失性緩存中所述事務(wù)的處理狀態(tài);若所述事務(wù)的處理狀態(tài)為已提交并且未更新映射,則將所述第二版本數(shù)據(jù)作為第一版本數(shù)據(jù),并更新第一版本數(shù)據(jù)的邏輯地址與物理地址之間的映射關(guān)系。
[0020]結(jié)合一方面的第四種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,所述方法,還包括:
[0021]若所述事務(wù)的處理狀態(tài)為活躍或者中止,則回收所述事務(wù)對應(yīng)的第二版本數(shù)據(jù)對應(yīng)的地址空間。
[0022]結(jié)合一方面、一方面的第一種、第二種、第三種、第四種或者第五種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,所述方法還包括:
[0023]通過鏈表記錄存儲在非易失性緩存或者非易失性存儲器的各頁面中的數(shù)據(jù)與事務(wù)之間的所屬關(guān)系。
[0024]結(jié)合一方面、一方面的第一種、第二種、第三種、第四種或者第五種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,所述方法還包括:
[0025]若所述非易失性緩存的剩余存儲空間小于單個事務(wù)所需存儲空間,在所述非易失性存儲器中擴(kuò)展用于緩存所述第二版本數(shù)據(jù)的緩存空間。
[0026]結(jié)合一方面、一方面的第一種、第二種、第三種、第四種或者第五種可能的實現(xiàn)方式,在第八種可能的實現(xiàn)方式中,
[0027]若需要對非易失性緩存進(jìn)行緩存替換,則以事務(wù)為最小粒度執(zhí)行緩存替換算法,并禁止處于未提交狀態(tài)的數(shù)據(jù)被替換;或者,若需要對事務(wù)的第一版本數(shù)據(jù)或者第二版本數(shù)據(jù)的地址空間進(jìn)行回收,以事務(wù)為最小粒度進(jìn)行地址空間回收。
[0028]本發(fā)明實施例二方面提供了一種存儲設(shè)備的事務(wù)恢復(fù)裝置,包括:
[0029]數(shù)據(jù)存儲單元,用于在執(zhí)行事務(wù)處理過程中,將所述事務(wù)的第二版本數(shù)據(jù)存儲到存儲設(shè)備的非易失性緩存;若存在所述事務(wù)的第一版本數(shù)據(jù),則所述第一版本數(shù)據(jù)存儲在所述存儲設(shè)備的非易失性緩存或者所述存儲設(shè)備的非易失性存儲器;所述第二版本數(shù)據(jù)為本次執(zhí)行事務(wù)處理過程中產(chǎn)生的數(shù)據(jù);所述第一版本數(shù)據(jù)為本次之前執(zhí)行所述事務(wù)已提交的數(shù)據(jù);
[0030]存儲控制單元,用于在將所述事務(wù)的第二版本數(shù)據(jù)存儲到存儲設(shè)備的非易失性緩存過程中,保持所述第一版本數(shù)據(jù);
[0031]數(shù)據(jù)恢復(fù)單元,用于若需要對所述事務(wù)進(jìn)行恢復(fù),則獲取所述第一版本數(shù)據(jù)。
[0032]結(jié)合二方面的實現(xiàn)方式,在第一種可能的實現(xiàn)方式中,所述存儲控制單元,用于禁止回收所述第一版本數(shù)據(jù)對應(yīng)的地址空間;
[0033]若所述第一版本數(shù)據(jù)在非易失性緩存,則設(shè)置所述第一版本數(shù)據(jù)對應(yīng)的地址空間有效;若所述第一版本數(shù)據(jù)在非易失性存儲器,則禁止緩存替換算法選中所述第一版本數(shù)據(jù)對應(yīng)的地址空間。
[0034]結(jié)合二方面的實現(xiàn)方式,在第二種可能的實現(xiàn)方式中,所述裝置還包括:
[0035]映射更新單元,用于在第二版本數(shù)據(jù)遞交之后,并且在所述第一版本數(shù)據(jù)回收之前,將所述第二版本數(shù)據(jù)作為第一版本數(shù)據(jù),并更新第一版本數(shù)據(jù)的邏輯地址與物理地址之間的映射關(guān)系;所述邏輯地址為軟件可見的地址。
[0036]結(jié)合二方面的第二種可能的實現(xiàn)方式,在第三種可能的實現(xiàn)方式中,所述裝置還包括:
[0037]狀態(tài)記錄單元,用于在將所述事務(wù)的第二版本數(shù)據(jù)存儲到存儲設(shè)備的非易失性緩存過程中,記錄各事務(wù)對應(yīng)的數(shù)據(jù)的處理狀態(tài),所述處理狀態(tài)包括:空閑、活躍、已提交、中止以及已更新映射。
[0038]結(jié)合二方面的第三種可能的實現(xiàn)方式,在第四種可能的實現(xiàn)方式中,所述數(shù)據(jù)恢復(fù)單元,用于若需要對所述事務(wù)進(jìn)行恢復(fù),則獲取非易失性緩存中所述事務(wù)的處理狀態(tài);若所述事務(wù)的處理狀態(tài)為已提交并且未更新映射,則將所述第二版本數(shù)據(jù)作為第一版本數(shù)據(jù),并更新第一版本數(shù)據(jù)的邏輯地址與物理地址之間的映射關(guān)系。
[0039]結(jié)合二方面的第四種可能的實現(xiàn)方式,在第五種可能的實現(xiàn)方式中,所述裝置還包括:
[0040]回收單元,用于若所述事務(wù)的處理狀態(tài)為活躍或者中止,則回收所述事務(wù)對應(yīng)的第二版本數(shù)據(jù)對應(yīng)的地址空間。
[0041]結(jié)合二方面、二方面的第一種、第二種、第三種、第四種或者第五種可能的實現(xiàn)方式,在第六種可能的實現(xiàn)方式中,所述裝置還包括:
[0042]數(shù)據(jù)事務(wù)記錄單元,用于通過鏈表記錄存儲在非易失性緩存或者非易失性存儲器的各頁面中的數(shù)據(jù)與事務(wù)之間的所屬關(guān)系。
[0043]結(jié)合二方面、二方面的第一種、第二種、第三種、第四種或者第五種可能的實現(xiàn)方式,在第七種可能的實現(xiàn)方式中,所述數(shù)據(jù)存儲單元,還用于若所述非易失性緩存的剩余存儲空間小于單個事務(wù)所需存儲空間,在所述非易失性存儲器中擴(kuò)展用于緩存所述第二版本數(shù)據(jù)的緩存空間。
[0044]結(jié)合二方面、二方面的第一種、第二種、第三種、第四種或者第五種可能的實現(xiàn)方式,在第八種可能的實現(xiàn)方式中,
[0045]所述存儲控制單元,還用于若需要對非易失性緩存進(jìn)行緩存替換,則以事務(wù)為最小粒度執(zhí)行緩存替換算法,