一種數據恢復方法、裝置及存儲介質與流程
2023-06-08 11:00:29 1
1.本技術涉及資料庫的領域,尤其是涉及一種數據恢復方法、裝置及存儲介質。
背景技術:
2.目前,是將數據放在內存中直接操作的資料庫。相對於磁碟,內存資料庫的數據讀寫速度要高出幾個數量級。而若要在內存資料庫宕機重啟後,恢復正常繼續處理事務的工作狀態,則需要將宕機前內存中的數據完整恢復。
3.為解決上述數據恢復的問題,內存資料庫重啟wal(write-ahead-log)日誌恢復需要重新構建索引和數據表,該過程通常會採用單個線程回放wal中的修改記錄,這一過程將需要構建大量索引,使得數據恢復佔用很長的時間。尤其是針對某些類似金融場景中的應用,例如交易系統,資料庫的主要工作負載是對關係表的高頻度、高並發的更新和查詢操作,因此,這些應用場景要求低延遲,高並發,同時提供很高的數據一致性,若採用單線程回放wal的方式恢復數據,將很大程度上影響系統可用性。
4.針對上述問題,目前的解決方案是採用並行恢復的方式替代單線程的數據恢復方式。並行恢復的思路在於採用多個回放線程同時回放wal中的日誌,並行構建數據表的索引,減少系統整體恢復時間,提高系統可用性。
5.在wal中,數據是按照事務的提交順序寫入的,而若需要完整無誤地恢復數據,在數據恢復時也必須要按照每個事務的提交順序來回放日誌記錄。在使用上述的單線程恢復方式時,這樣的需求是比較容易實現的,只需要順序讀取wal中的日誌記錄,並按事務提交的時間順序進行數據回放即可。而若採用多個回放線程的方式進行數據恢復,則可能因為作業系統線程調度,導致上述的順序條件無法得到滿足。例如:事務t1和事務t2的提交時間順序為t1《t2,而數據回放的過程中,由於作業系統調度,導致出現了事務t2的日誌在一個線程中先於事務t1的日誌回放的情況,進而導致恢復後的數據出現錯誤。
6.針對上述情況,本技術提出了一種數據恢復方法、裝置及存儲介質,用以在並行恢復數據的過程中正確處理上述的亂序回放問題。
技術實現要素:
7.為了在並行恢復數據的過程中正確處理上述的亂序回放問題,本技術提供一種數據恢復方法、裝置及存儲介質。
8.第一方面,本技術提供的一種數據恢復方法,採用如下的技術方案:一種數據恢復方法,用於資料庫,所述資料庫包括多個數據行結構,並且每個所述數據行結構均包括第一時間戳信息,所述第一時間戳信息指示其所屬的數據行結構所接受的最後一次操作的實施時間,所述方法包括:主線程獲取與所述資料庫相關聯的操作日誌,並依序讀取所述操作日誌中待回放的記錄,以及將所述待回放的記錄分發至多個恢復線程,其中,所述操作日誌中的記錄包括第二時間戳信息,所述第二時間戳信息指示其所屬的記錄所表徵的操作發起的時間;
所述多個恢復線程並行地執行下列操作:依次將接收到的所述待回放的記錄作為目標記錄,並確定所述目標記錄對應的目標數據行結構;根據所述目標記錄的所述第二時間戳信息以及對應的所述目標數據行結構的所述第一時間戳信息執行所述目標記錄所指示的針對所述目標數據行結構的操作。
9.通過採用上述技術方案,對於多線程的並行操作,其難點在於,在受到系統調度影響的情況下,上述的多個恢復線程無法按照先前的順序正確地實現回放的目的,而常會出現亂序的衝突問題。作為示例地,若多個恢復線程並行操作,那麼每個恢復線程所執行的操作將會出現先後順序不同的情況,由於系統的調度限制,很可能會出現前序的記錄尚未執行,而後續的事務已經執行完畢的情況,這將會導致不同程度的寫衝突問題。
10.第一時間戳信息和第二時間戳信息均指示對應數據的操作時間,以實際時間為依據,二者的先後順序明確且清晰。
11.本方案採用了時間戳來解決上述的亂序回放問題,對於目標記錄採用上述的第一時間戳信息記錄其順序信息,同理,對於目標數據行結構的順序信息採用第二時間戳信息記錄。因此,以第一時間戳信息和第二時間戳信息作為憑證,即可明確上述相互對應的目標記錄與目標數據行結構的先後順序信息,從而明確是否應當以上述的目標數據為依據對上述的目標數據行結構進行操作,進而對時間戳信息預設執行條件,若其不滿足執行條件,則不執行該條記錄所指示的操作。例如,以第一時間戳信息和第二時間戳信息為依據來判斷待回放的事務是否為針對目標數據行結構的新事物,若是新的事務,則執行該條目標數據指示的操作,若不是,則可以忽略該條目標記錄即可。
12.綜上所述,在需要恢復操作日誌中的對應操作時,使用由第一時間戳信息和第二時間戳信息組成的預設規則作為執行對應操作的條件,能夠在多個恢復線程並行執行數據恢復的前提下,在亂序回放的基礎之上,正確有序地完成數據恢復,從而解決數據並行恢復導致的寫衝突問題。尤其是在針對某些類似金融場景中的應用中,例如交易系統這樣的高頻度、高並發的應用場景之中,不但能夠滿足低延遲,高並發、高一致性的資料庫操作特性的要求,還能夠很大程度上提升資料庫的數據恢復操作穩定性。
13.可選的,所述數據行結構包括多個版本的數據行內容,並且每個版本的數據行內容均包括版本時間戳信息,所述版本時間戳信息指示該版本的數據行內容的創建時間,並且所述第一時間戳信息是最新版本的數據行內容對應的版本時間戳信息。
14.通過採用上述技術方案,採用多版本並發控制的方式,對於一個數據行結構維護多個版本,在每一次對改數據行結構進行操作之後均生成一個新的版本,並且隨之更新新版本和舊版本對應的時間戳信息,能夠防止並發操作時發生衝突,造成某些衝突的事務回滾,從而正確處理對相同數據對象的並發讀寫操作,提升並發操作執行效率與精準度,完善系統性能。
15.可選的,所述依次將接收到的所述待回放的記錄作為目標記錄,並確定所述目標記錄對應的目標數據行結構的步驟包括:按照接收時間順序依次將所述待回放的記錄作為目標記錄;讀取所述目標記錄中的目標對象標記;將所述目標對象標記作為查詢主鍵並基於所述查詢主鍵確定所述目標記錄對應
的目標數據行結構。
16.通過採用上述技術方案,每個目標記錄對應有確定的目標數據行結構,也即目標記錄中的信息至少包括其所指示的操作和這一操作對應的操作對象,而這一操作對象即為其對應的目標數據行結構。當恢復線程並行地接收到來自主線程的目標記錄後,即可通過指示上述操作對象的信息確定出其所對應的目標數據行結構。
17.可選的,所述第一時間戳信息與所述第二時間戳信息均基於實際時間值以全序遞增的形式產生,並且所述根據所述目標記錄的所述第二時間戳信息以及對應的所述目標數據行結構的所述第一時間戳信息執行所述目標記錄所指示的針對所述目標數據行結構的操作的步驟包括:在所述目標記錄指示的操作是數據行插入操作的情況下,執行下列動作:確認所述目標數據行結構當前是否存在;在所述目標數據行結構當前不存在的情況下,根據所述目標記錄指示的內容創建所述目標數據行結構及其最新版本的數據行內容;在所述目標數據行結構當前存在且有效的情況下,執行下列數據行插入動作:獲取所述目標記錄的所述第二時間戳信息;獲取所述目標數據行結構的所述第一時間戳信息;比較所述第一時間戳信息所指示的值與所述第二時間戳信息所指示的值的大小;在所述第二時間戳信息所指示的值大於所述第一時間戳信息所指示的值的情況下,使用所述目標記錄指示的內容覆蓋所述目標數據行結構中現有的最新版本的數據行內容;在所述第二時間戳信息所指示的值小於或等於所述第一時間戳信息所指示的值的情況下,不執行任何動作。
18.通過採用上述技術方案,在數據行插入的操作過程中,其所對應的數據行結構指其對應的基礎操作對象。若這一操作對象並不存在,那麼便無法進行對應的操作,因此需要根據目標記錄指示的內容創建目標數據行結構,並且在此之後執行對應的插入數據行操作,也即創建其最新版本的數據行內容。
19.而若這一操作對象是存在且有效的,則可以直接執行目標記錄指示的操作,也即直接創建其最新版本的數據行內容。而創建其最新版本的數據行內容的過程即為,比較第一時間戳信息與第二時間戳信息,並基於上述的比較結果確定是否應當執行上述的插入數據行的操作,從而在不產生寫衝突的基礎之上,實現可對於插入數據行這一操作的並行數據恢復。
20.可選的,所述根據所述目標記錄的所述第二時間戳信息以及對應的所述目標數據行結構的所述第一時間戳信息執行所述目標記錄所指示的針對所述目標數據行結構的操作的步驟還包括:在所述目標記錄指示的操作是數據行刪除操作的情況下,執行下列數據行刪除動作:確認所述目標數據行結構當前是否存在;在所述目標數據行結構當前不存在或者當前狀態為無效的情況下,不執行任何動作;
在所述目標數據行結構當前存在且有效的情況下,執行下列數據行刪除動作:獲取所述目標記錄的所述第二時間戳信息;獲取所述目標數據行結構的所述第一時間戳信息;比較所述第一時間戳信息所指示的值與所述第二時間戳信息所指示的值的大小;在所述第二時間戳信息所指示的值大於所述第一時間戳信息所指示的值的情況下,將所述目標數據行結構的當前狀態變更為無效;在所述第二時間戳信息所指示的值小於或等於所述第一時間戳信息所指示的值的情況下,不執行任何動作。
21.通過採用上述技術方案,在數據行刪除的操作過程中,其所對應的數據行結構指其對應的基礎操作對象。若這一操作對象並不存在,那麼將不能也無意義進行刪除的操作。而若這一操作對象是存在且有效的,則可以直接執行刪除操作,也即將目標數據行結構的當前狀態變更為無效。由於採用第一時間戳信息和第二時間戳信息判斷是否執行當前的操作,在使用同一查詢主鍵的情況下亦可保證不出現寫衝突的問題。
22.可選的,所述根據所述目標記錄的所述第二時間戳信息以及對應的所述目標數據行結構的所述第一時間戳信息執行所述目標記錄所指示的針對所述目標數據行結構的操作的步驟還包括:在所述目標記錄指示的操作是數據行更新操作的情況下,執行下列動作:確認所述目標數據行結構當前是否存在;在所述目標數據行結構當前不存在或者當前狀態為無效的情況下,不執行任何動作;在所述目標數據行結構當前存在且有效的情況下,針對所述目標數據行結構先執行所述數據行刪除動作,並在所述數據行刪除動作完成後再執行所述數據行插入動作。
23.通過採用上述技術方案,更新操作邏輯上是對行數據進行修改,而實際實現則是通過給一個行添加兩個版本完成的,簡言之,先增加一個版本並標記為已刪除狀態,隨後再增加一個版本,並且該版本中包含最新的數據。也即先執行刪除動作,再執行插入動作。
24.可選的,所述根據所述目標記錄的所述第二時間戳信息以及對應的所述目標數據行結構的所述第一時間戳信息執行所述目標記錄所指示的針對所述目標數據行結構的操作的步驟還包括:在執行完成所述數據行插入動作或者所述數據行刪除動作之後,將所述目標數據行結構的所述第一時間戳信息所指示的值設置為與所述目標記錄的所述第二時間戳信息所指示的值一致。
25.通過採用上述技術方案,在每一次執行過目標記錄對應的操作之後,其對應的數據行結構均被重新賦值,並且其對應的第一時間戳信息與本次進行的操作對應的目標記錄所對應的第二時間戳信息一致,能夠保證與下一次操作這一數據行結構的目標記錄所對應的第二時間戳信息相比較的是最新的第一時間戳信息。
26.可選的,所述多個數據行結構歸屬於至少一個數據表結構,所述待回放的記錄包括第一類型記錄和第二類型記錄,其中,所述第一類型記錄所指示的操作包括所述數據行插入操作、所述數據行刪除操作、所述數據行更新操作中的一個或多個,所述第二類型記錄所指示的操作針對所述數據表結構,並且所述將所述待回放的記錄分發至多個恢復線程的
步驟包括:按照時間順序依次讀取所述待回放的記錄,並針對每個待回放的記錄執行下列動作:在該待回放的記錄為所述第一類型記錄的情況下,將所述第一類型記錄分發至對應的恢復線程;在該待回放的記錄為所述第二類型記錄的情況下,執行所述第二類型記錄所指示的針對目標數據表結構的操作。
27.通過採用上述技術方案,在資料庫的操作日誌中存在通常同時存在針對數據行結構的操作記錄和針對一個或多個數據行結構組成的數據表結構的操作記錄,而針對數據表結構的操作通常是全局性的操作,只有先行執行完成後才能正確地執行後續的針對數據行結構的操作。
28.因此,當讀取到針對所述數據行結構的第一類型記錄時,可以對其進行直接的分發動作,但是在讀取到針對數據表結構的第二類型記錄時,應當先行停止對後續記錄的讀取和分發,由主線程先執行完成對於第二類型記錄所指示的針對目標數據表結構的操作,再繼續後續記錄的讀取和分發,即可解決對應數據表不存在等問題。
29.可選的,所述數據表結構包括主鍵索引子結構,並且所述第二類型記錄所指示的操作包括下列項中的一個或多個:創建新的數據表結構、創建新的主鍵索引子結構、刪除已存在的數據表結構、以及刪除已存在的主鍵索引子結構。
30.可選的,所述數據表結構還包括二級索引子結構,並且所述根據所述目標記錄的所述第二時間戳信息以及對應的所述目標數據行結構的所述第一時間戳信息執行所述目標記錄所指示的針對所述目標數據行結構的操作的步驟還包括:在所述操作日誌中的記錄所指示的操作全部執行完畢之後,將每個所述數據表結構與一個所述恢復線程相關聯;所述多個恢復線程並行地在相關聯的數據表結構中創建或更新該數據表結構對應的所述二級索引子結構。
31.通過採用上述技術方案,當操作日誌中的全部記錄指示的數據恢復完畢後,還需要根據數據表結構中的內容來恢復出每個數據表結構的二級索引。本方案採用多線程並行執行的方式進行二級索引構建,使得每個數據表由單獨的上述恢復線程來獨立並行構建二級索引,提高了數據恢復效率。
32.第二方面,本技術提供一種數據恢復裝置,採用如下技術方案:一種數據恢復裝置,用於資料庫,所述資料庫包括多個數據行結構,並且每個所述數據行結構均包括第一時間戳信息,所述裝置包括主執行單元和多個輔助執行單元;所述主執行單元用於獲取與所述資料庫相關聯的操作日誌,並依序讀取所述操作日誌中待回放的記錄,以及將所述待回放的記錄分發至多個輔助執行單元,其中,所述操作日誌中的記錄包括第二時間戳信息;所述多個輔助執行單元用於並行地執行下列操作:依次將接收到的所述待回放的記錄作為目標記錄,並確定所述目標記錄對應的目標數據行結構;根據所述目標記錄的所述第二時間戳信息以及對應的所述目標數據行結構的所
述第一時間戳信息執行所述目標記錄所指示的針對所述目標數據行結構的操作。
33.第三方面,本技術提供一種存儲介質,採用如下技術方案:一種存儲介質,所述存儲介質存儲有至少一條指令、至少一段程序、代碼集或指令集,所述至少一條指令、所述至少一段程序、所述代碼集或指令集由處理器加載並執行以實現上述的數據恢復方法。
34.綜上所述,本技術包括以下至少一種有益技術效果:本技術提供的方案能夠在多個恢復線程並行執行數據恢復的前提下,在亂序回放的基礎之上,正確有序地完成數據恢復,從而解決數據並行恢復導致的寫衝突問題。
35.在針對某些類似金融場景中的應用中,例如交易系統這樣的高頻度、高並發的應用場景之中,採用本技術提供的方案不但能夠滿足低延遲,高並發、高一致性的資料庫操作特性的要求,還能夠很大程度上提升資料庫的數據恢復操作穩定性。
36.採用多版本並發控制的方式,對於一個數據行結構維護多個版本,在每一次對改數據行結構進行操作之後均生成一個新的版本,並且隨之更新新版本和舊版本對應的時間戳信息,能夠防止並發操作時發生衝突,造成某些衝突的事務回滾,從而正確處理對相同數據對象的並發讀寫操作,提升並發操作執行效率與精準度,完善系統性能。
37.由主線程先執行完成對於第二類型記錄所指示的針對目標數據表結構的操作,再繼續後續記錄的讀取和分發,即可解決對應數據表不存在等問題。
附圖說明
38.圖1是本技術實施例中一種數據恢復方法的整體步驟流程圖。
39.圖2是本技術實施例中一種數據恢復方法的子步驟s4的流程圖。
40.圖3是本技術實施例中一種數據恢復方法的在a情況下的子步驟s51的流程圖。
41.圖4是本技術實施例中一種數據恢復方法的在b情況下的子步驟s51的流程圖。
42.圖5是本技術實施例中一種數據恢復方法的子步驟s522的流程圖。
43.圖6是本技術實施例中一種數據恢復方法的子步驟s53的流程圖。
44.圖7是本技術實施例中一種數據恢復裝置的邏輯連接圖。
45.附圖標記說明:1、數據恢復裝置;11、主執行單元;12、輔助執行單元。
具體實施方式
46.以下結合附圖,對本技術作進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用以解釋本技術,並不用於限定本技術。
47.在以下描述中,為了解釋的目的,闡述了很多具體細節,以便提供對發明構思的徹底理解。作為本說明書的一部分,本公開的附圖中的一些附圖以框圖形式表示結構和設備,以避免使所公開的原理複雜難懂。為了清晰起見,實際具體實施的並非所有特徵都有必要進行描述。在本公開中對「一個具體實施」或「具體實施」的提及意指結合該具體實施所述的特定特徵、結構或特性被包括在至少一個具體實施中,並且對「一個具體實施」或「具體實施」的多個提及不應被理解為必然地全部是指同一具體實施。
48.除非明確限定,否則術語「一個」、「一種」和「該」並非旨在指代單數實體,而是包括
其特定示例可以被用於舉例說明的一般性類別。因此,術語「一個」或「一種」的使用可以意指至少一個的任意數目,包括「一個」、「一個或多個」、「至少一個」和「一個或不止一個」。術語「或」意指可選項中的任意者以及可選項的任何組合,包括所有可選項,除非可選項被明確指示是相互排斥的。短語「中的至少一者」在與項目列表組合時是指列表中的單個項目或列表中項目的任何組合。所述短語並不要求所列項目的全部,除非明確如此限定。
49.本技術實施例公開一種數據恢復方法。參照圖1,一種數據恢復方法,用於資料庫,值得注意的是,在本實施例中,上述資料庫包括多個數據行結構,並且每個上述數據行結構均包括第一時間戳信息。具體地,在不同的實施例中,上述的數據行結構可以表現為不同的形式,並以不同的方式生效、變更和失效,同理,上述的第一時間戳信息也可以通過不同的方式產生和更新,並承載不同類型的信息。作為示例地,在本實施例中,上述數據行結構包括多個版本的數據行內容,並且每個版本的數據行內容均包括版本時間戳信息,上述版本時間戳信息指示該版本的數據行內容的創建時間,並且上述第一時間戳信息是最新版本的數據行內容對應的版本時間戳信息,也即最新版本的數據行內容的創建時間。換句話說,在數據恢復的過程中,針對每個上述的數據行結構,都只會維護一個版本,並保證在數據恢復完成後,該數據行結構所指示的數據是最新的。
50.上述的數據恢復方法包括以下步驟,並且執行以下步驟的主體包括主線程和多個恢復線程:s01.主線程操作步驟:s1.獲取與上述資料庫相關聯的操作日誌。
51.具體地,上述操作日誌中的記錄包括第二時間戳信息,並且上述第一時間戳信息指示其所屬的數據行結構所接受的最後一次操作的實施時間,上述第二時間戳信息指示其所屬的記錄所表徵的操作發起的時間。
52.在不同的實施例中,上述的第一時間戳信息與第二時間戳信息均可以由不同的方式產生,但凡能夠表徵對應操作的時間信息即可。作為示例地,上述第一時間戳信息與上述第二時間戳信息均基於實際時間值以全序遞增的形式產生。進一步地,上述的第一時間戳信息和第二時間戳信息均可以由全局時間戳分配器產生,其維護了一個系統級別的64位時間戳,並且具備單調遞增的特性。
53.針對操作日誌,作為解釋地,在內存資料庫啟用後,為滿足資料庫對持久性、穩定性的要求,在每一個事務執行對內存數據的修改操作前,均需要先將修改日誌寫入操作日誌對應的文件中,再執行對內存中的數據的修改操作。因此,操作日誌也自然成為了資料庫恢復的基礎。在經歷了如系統宕機重啟等情況後,通過對於操作日誌中的記錄進行回放的方式來恢復數據。
54.s2.依序讀取上述操作日誌中待回放的記錄。
55.s3.將上述待回放的記錄分發至多個恢復線程。
56.針對上述的分發過程,具體地,每一個完整的事務中均包含一個或多個記錄,並且每一個事務中的最後一個記錄均包含一個標誌該事物結束的提交信息,在讀取這些記錄時,若讀取到該提交信息,則可以將前序待回放記錄的集合作為一個完整的事務,並將其分發至某個恢復線程中執行後續的恢復操作。
57.作為補充地,在計算機術語中是指訪問並可能更新資料庫中各種數據項的一個程
序執行單元,是恢復和並發控制的基本單位。其具有四個屬性,即原子性、一致性、隔離性、持久性。其中,原子性指一個事務是一個不可分割的工作單位,事務中包括的操作只存在全部執行和全部不執行兩種情況;一致性指事務必須是使資料庫從一個一致性狀態變到另一個一致性狀態,並且一致性與原子性是密切相關的;隔離性指一個事務的執行不能被其他事務幹擾,也即一個事務內部的操作及使用的數據對並發的其他事務是隔離的,並發執行的各個事務之間不能互相干擾;持久性也稱永久性,指一個事務一旦提交,它對資料庫中數據的改變就應該是永久性的,也即後續的其他操作或故障不應該對其有任何影響。
58.進一步地,在不同的實施例中,針對不同類型的待回放記錄,可以通過不同的方式進行分發操作,本實施例具體但非限定地提供一種方案,以上述待回放的記錄包括第一類型記錄和第二類型記錄為前提,如下子步驟s31所示:s31.按照時間順序依次讀取上述待回放的記錄,並針對每個待回放的記錄執行下列動作:在該待回放的記錄為上述第一類型記錄的情況下,將上述第一類型記錄分發至對應的恢復線程;在該待回放的記錄為上述第二類型記錄的情況下,執行上述第二類型記錄所指示的針對目標數據表結構的操作。
59.具體地,上述第一類型記錄所指示的操作包括數據行插入操作、數據行刪除操作、數據行更新操作中的一個或多個,並且上述多個數據行結構歸屬於至少一個數據表結構,而上述第二類型記錄所指示的操作針對上述數據表結構。
60.進一步地,上述數據表結構包括主鍵索引子結構和二級索引子結構,並且上述第二類型記錄所指示的操作包括下列項中的一個或多個:創建新的數據表結構、創建新的主鍵索引子結構、刪除已存在的數據表結構、以及刪除已存在的主鍵索引子結構。
61.作為解釋地,索引指用於加速對關係表的某個列的查詢操作的數據結構,常見的索引包括b樹索引,哈希索引等。其中,主鍵索引指建立在關係表的主鍵列上的索引結構,並且具有唯一性;二級索引指建立在關係表的非主鍵列上的索引結構。
62.在資料庫的操作日誌中存在通常同時存在針對數據行結構的操作記錄和針對一個或多個數據行結構組成的數據表結構的操作記錄,而針對數據表結構的操作通常是全局性的操作,只有先行執行完成後才能正確地執行後續的針對數據行結構的操作。
63.因此,當讀取到針對上述數據行結構的第一類型記錄時,可以對其進行直接的分發動作,但是在讀取到針對數據表結構的第二類型記錄時,應當先行停止對後續記錄的讀取和分發,由主線程先執行完成對於第二類型記錄所指示的針對目標數據表結構的操作,再繼續後續記錄的讀取和分發。
64.s02.上述多個恢復線程並行地執行下列操作:參照圖1和圖2,具體地,上述的主線程作為數據恢復過程中操作日誌的讀取線程,在讀取到操作日誌中的待回放記錄後,將所讀取的記錄分發至多個恢復線程中。而多個恢復線程是並行執行對應的操作的,從而使得多個恢復線程進行的恢復動作是同時進行,例如並行構建數據表的索引,減少了系統整體恢復的時間,提高了系統可用性。
65.s4.依次將接收到的上述待回放的記錄作為目標記錄,並確定上述目標記錄對應
的目標數據行結構。
66.針對上述確定對應的目標數據行結構的過程,在不同的實施例中,可以通過不同的方式執行,本實施例具體但非限定地提供一種方案,如下子步驟s41-s43所示:s41.按照接收時間順序依次將上述待回放的記錄作為目標記錄;s42.讀取上述目標記錄中的目標對象標記;s43.將上述目標對象標記作為查詢主鍵並基於上述查詢主鍵確定上述目標記錄對應的目標數據行結構。
67.每個目標記錄對應有確定的目標數據行結構,也即目標記錄中的信息至少包括其所指示的操作和這一操作對應的操作對象,而這一操作對象即為其對應的目標數據行結構。當恢復線程並行地接收到來自主線程的目標記錄後,即可通過指示上述操作對象的信息確定出其所對應的目標數據行結構。
68.s5.根據上述目標記錄的上述第二時間戳信息以及對應的上述目標數據行結構的上述第一時間戳信息執行上述目標記錄所指示的針對上述目標數據行結構的操作。
69.具體地,上述第一時間戳信息與上述第二時間戳信息均基於實際時間值以全序遞增的形式產生。
70.針對上述執行對應的操作的過程,在不同的實施例中,可以通過不同的方式進行,本實施例具體但非限定地提供一種方案,如下子步驟s51-s56所示:參照圖3和圖4,其中,針對數據行插入操作執行如下子步驟s51的動作:s51.在上述目標記錄指示的操作是數據行插入操作的情況下,執行下列動作:s511.確認上述目標數據行結構當前是否存在。
71.在上述目標數據行結構當前不存在的情況下,執行如下子步驟s512a的動作:s512a.根據上述目標記錄指示的內容創建上述目標數據行結構及其最新版本的數據行內容;在上述目標數據行結構當前存在且有效的情況下,執行下列數據行插入動作,如子步驟s512b-s514b所示:s512b.獲取上述目標記錄的上述第二時間戳信息;s513b.獲取上述目標數據行結構的上述第一時間戳信息;s514b.比較上述第一時間戳信息所指示的值與上述第二時間戳信息所指示的值的大小。
72.具體地,在上述第二時間戳信息所指示的值大於上述第一時間戳信息所指示的值的情況下,使用上述目標記錄指示的內容覆蓋上述目標數據行結構中現有的最新版本的數據行內容;在上述第二時間戳信息所指示的值小於或等於上述第一時間戳信息所指示的值的情況下,不執行任何動作。
73.在數據行插入的操作過程中,其所對應的數據行結構指其對應的基礎操作對象。若這一操作對象並不存在,那麼便無法進行對應的操作,因此需要根據目標記錄指示的內容創建目標數據行結構,並且在此之後執行對應的插入數據行操作,也即創建其最新版本的數據行內容。而若這一操作對象是存在且有效的,則可以直接執行目標記錄指示的操作,也即直接創建其最新版本的數據行內容。而創建其最新版本的數據行內容的過程即為,比較第一時間戳信息與第二時間戳信息,並基於上述的比較結果確定是否應當執行上述的插
入數據行的操作,從而在不產生寫衝突的基礎之上,實現可對於插入數據行這一操作的並行數據恢復。
74.針對數據行刪除操作執行如下子步驟s52的操作:s52.在上述目標記錄指示的操作是數據行刪除操作的情況下,執行下列數據行刪除動作:s521.確認上述目標數據行結構當前是否存在。
75.具體地,在上述目標數據行結構當前不存在或者當前狀態為無效的情況下,不執行任何動作;在上述目標數據行結構當前存在且有效的情況下,執行如下子步驟s522的動作:s522.將上述目標數據行結構的當前狀態變更為無效。
76.具體地,如果某個數據行結構的最新版本是刪除標記的版本,那麼在邏輯上,該數據行結構已經不存在了,因此,後續對這個數據行結構的任何操作均無效,也即更新操作需要在行最新版本不為刪除的情況下進行。因此,若僅為上述的情況,則在刪除操作中可以不採用上述的第一時間戳信息與第二時間戳信息來判斷是否進行對應的刪除操作。
77.而在實際操作過程中,確定一個數據行結構是需要通過一個唯一主鍵來完成的,例如key=1的行被刪除了,而後續操作過程中又插入key=1的行,二者雖查詢主鍵相同,但數據內容卻不同,這種情況將會導致數據恢復的錯誤。因此需要通過第一時間戳信息與第二時間戳信息來確保當前數據行結構的最新版本是有效的。具體的,上述的子步驟s522還包括以下子步驟s5221-s5225:參照圖5,執行下列數據行刪除動作:s5221.獲取所述目標記錄的所述第二時間戳信息;s5222.獲取所述目標數據行結構的所述第一時間戳信息;s5223.比較所述第一時間戳信息所指示的值與所述第二時間戳信息所指示的值的大小;s5224.在所述第二時間戳信息所指示的值大於所述第一時間戳信息所指示的值的情況下,將所述目標數據行結構的當前狀態變更為無效;s5225.在所述第二時間戳信息所指示的值小於或等於所述第一時間戳信息所指示的值的情況下,不執行任何動作。
78.進一步地,更新操作邏輯上是對行數據進行修改,而實際實現則是通過給一個行添加兩個版本完成的,簡言之,先增加一個版本並標記為已刪除狀態,隨後再增加一個版本,並且該版本中包含最新的數據。
79.參照圖1和圖6,具體地,在不同的實施例中,針對數據行更新操作可以採用不同的方法,本技術費具體但非限定地提供以下如下子步驟s53的方案:s53.在上述目標記錄指示的操作是數據行更新操作的情況下,執行下列動作:s531.確認上述目標數據行結構當前是否存在。
80.具體地,在上述目標數據行結構當前不存在或者當前狀態為無效的情況下,不執行任何動作;在上述目標數據行結構當前存在且有效的情況下,執行如下子步驟s532的動作:s532.針對上述目標數據行結構先執行上述數據行刪除動作,並在上述數據行刪
除動作完成後再執行上述數據行插入動作。
81.進一步地,本實施例中在執行完成上述數據行插入動作或者上述數據行刪除動作之後,還包括以下如s54所示的子步驟:s54.將上述目標數據行結構的上述第一時間戳信息所指示的值設置為與上述目標記錄的上述第二時間戳信息所指示的值一致。
82.在每一次執行過目標記錄對應的操作之後,其對應的數據行結構均被重新賦值,並且其對應的第一時間戳信息與本次進行的操作對應的目標記錄所對應的第二時間戳信息一致,能夠保證與下一次操作這一數據行結構的目標記錄所對應的第二時間戳信息相比較的是最新的第一時間戳信息。
83.進一步地,本實施例中在上述操作日誌中的記錄所指示的操作全部執行完畢之後,還包括以下如s55-s56所示的子步驟:s55.將每個上述數據表結構與一個上述恢復線程相關聯;s56.上述多個恢復線程並行地在相關聯的數據表結構中創建或更新該數據表結構對應的上述二級索引子結構。
84.當操作日誌中的全部記錄指示的數據恢復完畢後,還需要根據數據表結構中的內容來恢復出每個數據表結構的二級索引。本方案採用多線程並行執行的方式進行二級索引構建,使得每個數據表由單獨的上述恢復線程來獨立並行構建二級索引,提高了數據恢復效率。
85.綜上所述,對於多線程的並行操作,其難點在於,在受到系統調度影響的情況下,上述的多個恢復線程無法按照先前的順序正確地實現回放的目的,而常會出現亂序的衝突問題。作為示例地,若多個恢復線程並行操作,那麼每個恢復線程所執行的操作將會出現先後順序不同的情況,由於系統的調度限制,很可能會出現前序的記錄尚未執行,而後續的事務已經執行完畢的情況,這將會導致不同程度的寫衝突問題。
86.本方案採用了時間戳來解決上述的亂序回放問題,對於目標記錄採用上述的第一時間戳信息記錄其順序信息,同理,對於目標數據行結構的順序信息採用第二時間戳信息記錄。因此,以第一時間戳信息和第二時間戳信息作為憑證,即可明確上述相互對應的目標記錄與目標數據行結構的先後順序信息,從而明確是否應當以上述的目標數據為依據對上述的目標數據行結構進行操作,進而對時間戳信息預設執行條件,若其不滿足執行條件,則不執行該條記錄所指示的操作。例如,以第一時間戳信息和第二時間戳信息為依據來判斷待回放的事務是否為針對目標數據行結構的新事物,若是新的事務,則執行該條目標數據指示的操作,若不是,則可以忽略該條目標記錄即可。
87.因此,在需要恢復操作日誌中的對應操作時,使用由第一時間戳信息和第二時間戳信息組成的預設規則作為執行對應操作的條件,能夠在多個恢復線程並行執行數據恢復的前提下,在亂序回放的基礎之上,正確有序地完成數據恢復,從而解決數據並行恢復導致的寫衝突問題。尤其是在針對某些類似金融場景中的應用中,例如交易系統這樣的高頻度、高並發的應用場景之中,不但能夠滿足低延遲,高並發、高一致性的資料庫操作特性的要求,還能夠很大程度上提升資料庫的數據恢復操作穩定性。
88.本技術提供一種數據恢復裝置,用於資料庫,參照圖1和圖7,資料庫包括多個數據行結構,並且每個數據行結構均包括第一時間戳信息,數據恢復裝置1包括主執行單元11和
多個輔助執行單元12。
89.具體地,主執行單元11用於獲取與資料庫相關聯的操作日誌,並依序讀取操作日誌中待回放的記錄,以及將待回放的記錄分發至多個輔助執行單元12,其中,操作日誌中的記錄包括第二時間戳信息。
90.具體地,多個輔助執行單元12用於並行地執行下列操作:首先,依次將接收到的待回放的記錄作為目標記錄,並確定目標記錄對應的目標數據行結構。其次,根據目標記錄的第二時間戳信息以及對應的目標數據行結構的第一時間戳信息執行目標記錄所指示的針對目標數據行結構的操作。
91.進一步地,上述數據恢復裝置的工作原理與上述數據恢復方法的工作原理相同,此處不在贅述。
92.本技術提供一種存儲介質,存儲有至少一條指令、至少一段程序、代碼集或指令集,至少一條指令、至少一段程序、代碼集或指令集由處理器加載並執行以實現上述的數據恢復方法。
93.以上均為本技術的較佳實施例,並非依此限制本技術的保護範圍,故:凡依本技術的結構、形狀、原理所做的等效變化,均應涵蓋於本技術的保護範圍之內。