1. 程式人生 > >儲存基礎知識(二)回滾的原理

儲存基礎知識(二)回滾的原理

雖然使用者開啟快照,可在通過建立時間點來保護修改的資料,但要回到修改之前的狀態就必須用到回滾。打個比方,我在t1時刻給畫板上畫了一棵樹,t2時刻又畫了一隻猴子,t3時刻畫的時候發現畫錯了,我不想要猴子和現在所畫的東西,我想回到那棵樹的時刻,就會用到回滾。

快照的回滾也是如此,使用者建立多個時間點,每個時間點都可能保護著資料,但想回到某個時刻的資料狀態,同樣需要回滾。原理圖如下所示:

在建時間點P1之前的資料為ABCD,P1時刻,將AB寫為A'B',於是快照保護了被修改的資料AB,原資料變為A'B'CD;

在時間點P2時刻,使用者又將C寫為C',於是快照保護了P2 時刻被修改的資料C,原資料變為A'B'C'D

在時間點P3時刻,使用者將之前修改過的A'寫為A'',於是快照保護了被修改的資料A',原資料變為A''B'C'D

此時,使用者想回到P1時間點之前的狀態,也即回到資料為ABCD的狀態,會從P1——>P2——>P3依次找被保護的資料,並進行比較組合。比如上圖中,它找到A相關的資料有A和A',但由於A早於A',所以選擇A,BC不用選擇,首次出現,所以最終組合出來的資料為ABC,也就是說,從P1時刻之前到現在所有修改的資料為ABC,那麼只需要把ABC寫回當前時刻資料塊,就會變得跟P1時刻一樣。

      至於回滾為什麼要新建時間點P4,很好理解,使用者從當前回滾到時間點P1 之前時刻後,又想滾回來怎麼辦?你的資料已經從A''B'C'D寫入ABC後變為ABCD,無法回到之前的資料狀態,所以需要建時間點P4,用來保護你修改的資料,保證資料不丟