1. 程式人生 > >快閃記憶體資料庫事務恢復優化

快閃記憶體資料庫事務恢復優化

事務處理事資料庫最獨特的地方,事務操作可以保證資料庫處理操作的原子性、一致性、隔離性和永續性,推動了資料庫在商業領域的成功應用。

事務恢復時資料庫支援事務的重要功能,可以保證資料的一致性和正確性,資料庫在實際的執行過程中,會不可避免的發生各種故障,那麼必須建立有效的事務恢復的措施。在快閃記憶體的資料庫中,事務恢復有著天然的優勢,因為快閃記憶體是異地更新,舊不是直接被覆蓋,那麼舊資料可以當初資料恢復的一個檢查點。所以研究在面向快閃記憶體資料庫上傳統的事務恢復的優化是有價值的。

1、什麼是資料庫的事務和事務的恢復

資料庫的事務是資料庫管理系統執行過程中的一個邏輯單元,是由有限個操作構成的一個操作序列。
在這裡插入圖片描述

2、傳統的事務恢復的常見方法

建立操作日誌,即對每個更新寫入操作,寫入前先寫日誌,將日誌持久化,那麼當事務終止的時候,可以通過持久化的日誌,進行一步步的撤銷恢復操作,寫入之前的原始資料,從而完成事務的回覆。
在這裡插入圖片描述

基於影子頁的恢復方法

這種方法在每次更新寫入的實時,都寫入到一個新的頁,稱為影子頁,需要維護一個邏輯頁到物理頁的地址對映,首先將寫入的資料從邏輯頁對映到影子頁,提交事務的時候將整個對映表持久化,然後回收之前的舊資料頁。如果事務終止,那麼此時簡單的將影子頁拋棄,然後把地址對映更新到之前的舊資料,既可以完成恢復。
在這裡插入圖片描述

3、兩種不同的型別的事務恢復方法的應用場景

適用於儲存介質為磁碟,

在這裡插入圖片描述

適用於儲存介質為快閃記憶體

在這裡插入圖片描述

4、那麼對於快閃記憶體資料庫的事務恢復,目前有哪些常見的恢復方法,主要也是基於上述的兩種事務恢復方法的優化,分別如下:

基於影子頁

Transactional FTL
TxFlash
Flag Commit

基於日誌恢復

IPL
OPL

基於日誌+影子頁的方法

HV-Recovery

下面對這6種方法進行具體的說明。

5、Transactional FTL

基本思想:

在這裡插入圖片描述
簡單的思想,就是用FTL層的異地更新策略來完成事務恢復處理的操作,FTL層為不僅為生成儲存管理裝置提供讀寫操作,同時還可以提供事務操作的API。

具體的實現方法

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

優缺點:

在這裡插入圖片描述
首先對於事務的提交,還是要通過日誌來記錄,即提交日誌,通過判斷是否有提交日誌,事務是否成功執行,其次,在終止日誌的時候,去掃面所有的資料塊,將邏輯頁恢復到最近提交的是資料塊上。

6、TxFlash

基本思想:

在這裡插入圖片描述
在這裡插入圖片描述
基本思想,也是在FTL層實現事務的提交和恢復邏輯,那麼資料庫的儲存管理層直接呼叫API即可。

具體實現:

在這裡插入圖片描述
在這裡插入圖片描述

優缺點:

在這裡插入圖片描述
在這裡插入圖片描述

7、Flag Commit

基本思想:

在這裡插入圖片描述
基本思想比較簡單,就是利用影子頁技術寫,同時對於事務提交的日誌進行優化,不需要寫入日誌記錄,只用在事務操作的影子頁的OOB空間中寫入標誌位,通過標誌位去判斷是否已成功提交。

具體實現

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

CF缺點:

在這裡插入圖片描述

AFC演算法

在這裡插入圖片描述

優點:

在這裡插入圖片描述

缺點:

在這裡插入圖片描述

8、IPL、OPL

基本思想:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

具體實現:

在這裡插入圖片描述
在這裡插入圖片描述

缺點:

在這裡插入圖片描述

解決方法:

在這裡插入圖片描述

9、HV-Recovery

基本思想:

在這裡插入圖片描述
在這裡插入圖片描述

具體實現:

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

優缺點:

在這裡插入圖片描述

10、總結

傳統的資料庫的事務處理都是通過redo和undo完成的,前者完成事務失敗的恢復,後者完成資料的回滾修改之前的資料。

雖然是記錄日誌,但是可以理解,傳統的方法通過日誌進行撤銷回放之前的操作,還是會更新本地的重複寫,舉個例子,如果要執行回滾操作,那麼會將之前undo日誌記錄的資料,在重寫更新一遍,對於磁碟來說,這是沒有問題的,但是對於快閃記憶體,實際舊資料沒有擦除,完全是可以利用起來的。

傳統的事務恢復都是通過這個兩個日誌記錄完成,但是對於快閃記憶體日誌的恢復方法 ,大量的日誌小寫問題對快閃記憶體的傷害太大,此時不能這麼做,本章就是解釋瞭如何解決傳統資料庫日誌小寫的問題,有的直接採用影子頁的方法,去掉日誌寫的方法,有的通過程式設計的部分頁方法,在快閃記憶體上部分寫,解決上述的問題,還有的採用混合儲存的方法,用影子頁的方法進行更新。

總的來說,最後一種的方法看似是最好的,仍然利用現在日誌的方法,但是同時更改了日誌記錄的方法,利用了快閃記憶體無效塊的歷史資料資訊。