亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

內(nèi)存數(shù)據(jù)管理中日志恢復方法及其仿真系統(tǒng)的制作方法

文檔序號:8942977閱讀:446來源:國知局
內(nèi)存數(shù)據(jù)管理中日志恢復方法及其仿真系統(tǒng)的制作方法
【技術領域】
[0001] 本發(fā)明涉及數(shù)據(jù)管理技術領域,尤其涉及一種內(nèi)存數(shù)據(jù)管理中日志恢復方法及其 仿真系統(tǒng)。
【背景技術】
[0002] 內(nèi)存數(shù)據(jù)管理技術特別是內(nèi)存數(shù)據(jù)庫技術,將數(shù)據(jù)的運算和存儲都依托于內(nèi)存, 具有高并發(fā)、高吞吐量、低延時等特性,因此被廣泛用于極高性能需求的場合。但是,由于內(nèi) 存是一種易失性的存儲介質,而內(nèi)存數(shù)據(jù)庫往往承擔著高吞吐量、高速存取的任務,數(shù)據(jù)損 失的風險巨大。這種損失往往給數(shù)據(jù)庫的使用者帶來巨額的財產(chǎn)損失。
[0003] 近年來,隨著硬件性能的大幅度提升、成本的大幅度降低,內(nèi)存數(shù)據(jù)管理研究領域 的研究受到了更為廣泛的關注。其中,由于內(nèi)存易失性而帶來的有關日志恢復的問題是主 要研究方向之一。日志文件讀寫中非易失存儲器慢速I/O對于內(nèi)存和CPU造成停滯是內(nèi)存 數(shù)據(jù)庫日志恢復需要解決的問題,并且,目前沒有一個針對日志恢復有關的研究平臺。
[0004] 為了保證數(shù)據(jù)庫信息不丟失,事務提交之前必須將日志記錄在穩(wěn)定存儲器中(一 般為磁盤),那么大容量內(nèi)存、高負載環(huán)境容易使日志的讀寫成為瓶頸。一種直觀的解決方 式是使用非易失性的存儲器存儲日志,它具有比磁盤更快存取速度且斷電后數(shù)據(jù)不丟失的 特性,從而縮減了提交時間。然而類似于SSD這種存儲器的價格仍然較高,不能得到廣泛的 使用。

【發(fā)明內(nèi)容】

[0005] 針對上述缺陷或不足,本發(fā)明的目的在于提供一種內(nèi)存數(shù)據(jù)管理中日志恢復方法 及其仿真系統(tǒng)。
[0006] 為達到以上目的,本發(fā)明的技術方案為:
[0007] -種內(nèi)存數(shù)據(jù)管理中日志恢復方法,包括以下步驟:
[0008] 主節(jié)點獲取集群節(jié)點的節(jié)點編號,并對所述集群節(jié)點發(fā)送數(shù)據(jù)寫入命令,所述集 群節(jié)點進行數(shù)據(jù)存儲,主節(jié)點形成映射表;
[0009] 主節(jié)點根據(jù)節(jié)點編號,向與所述集群節(jié)點匹配的日志節(jié)點發(fā)送集群節(jié)點日志命 令,所述日志節(jié)點將日志存儲,并將所述日志持久化,然后向主節(jié)點日志成功記錄信息;
[0010] 在集群節(jié)點發(fā)生故障時,停止事務執(zhí)行,主節(jié)點獲取故障節(jié)點的編號,獲取日志節(jié) 點中日志記錄對集群節(jié)點進行恢復。
[0011] 進一步的,所述主節(jié)點獲取集群節(jié)點的節(jié)點編號的具體過程為:
[0012] 當一個數(shù)據(jù)項被新插入存儲集群時,首先需要在映射表中注冊自己的鍵值,并取 得集群反饋回的節(jié)點編號,然后這個鍵值對被正放入集群中。
[0013] 進一步的,所述映射表使用Map容器實現(xiàn)。
[0014] 進一步的,所述集群節(jié)點進行數(shù)據(jù)存儲為分布式存儲方式。
[0015] 進一步的,所述日志持久化具體過程為:
[0016] 使用日志節(jié)點上的RDB持久化命令SAVE,將日志節(jié)點上的內(nèi)容持久化到磁盤上, 并且返回成功或者失敗,RDB持久化將內(nèi)存中的數(shù)據(jù)完全以快照的形式錄入磁盤中。
[0017] 進一步的,當進行物理日志恢復過程時:
[0018] 主節(jié)點獲取需要恢復的集群節(jié)點的節(jié)點編號;
[0019] 主節(jié)點根據(jù)上述所獲取的節(jié)點編號,取出該節(jié)點對應的red〇_l〇g日 redo_log 日志是日志節(jié)點上的集合日志;
[0020] 集群節(jié)點掃描所有的非redo_log日志鏈表,即還沒有commit的事務的私有txn_ redo日志,并且銷毀這些私有的txn_redo日志,txn_redo日志是針對某個具體事務編號的 事務私有日志;
[0021] 主節(jié)點取完所有故障節(jié)點的日志后,按照LSN將日志排列好再根據(jù)排列好后redo 日志重做事務片段,完成日志恢復。
[0022] 進一步的,當進行邏輯日志恢復時:
[0023] 主節(jié)點獲取需要恢復的集群節(jié)點的節(jié)點編號;
[0024] 所有需要恢復的集群節(jié)點將redcUog日志取出,并且歸并到主節(jié)點上;
[0025] 主節(jié)點按照LSN重新排列需要恢復的集群節(jié)點的redo_log日志;
[0026] 所有集群節(jié)點掃描所有非redo_log鏈表,銷毀存在的私有txn_redo日志;
[0027] 主節(jié)點執(zhí)行統(tǒng)一的恢復,完成日志恢復。
[0028] -種內(nèi)存數(shù)據(jù)管理中日志恢復仿真系統(tǒng),包括主節(jié)點以及Redis實例,其中;
[0029] 主節(jié)點包括映射列表、事務模擬器、恢復模擬器;
[0030] 映射列表存放了數(shù)據(jù)項和對應的集群中具體節(jié)點編號;
[0031] 事務模擬器隨機產(chǎn)生出并發(fā)或是串行的事務;
[0032] 恢復模擬器通過與事務模擬器的合作,完成多種日志的生成和分發(fā),也在故障后 重新收集日志換成恢復步驟;事務開始時,記錄下LSN、事務編號、start標識,提交時記錄 commit標識,中止時記錄abort標識;
[0033] Redis實例包括作為存儲節(jié)點的Redis集群和日志節(jié)點;
[0034] Redis集群中包括多個成為工作節(jié)點的Redis實例;
[0035] 日志節(jié)點由多個單獨的Redis實例組成,日志節(jié)點接受主節(jié)點的日志并完成日志 的持久化任務。
[0036] 與現(xiàn)有技術比較,本發(fā)明的有益效果為:
[0037] 本發(fā)明提供了一種內(nèi)存數(shù)據(jù)管理中日志恢復方法,還提供了一種內(nèi)存數(shù)據(jù)管理中 日志恢復仿真系統(tǒng)RecoS,通過在集群環(huán)境下使用了 Redis作為底層的數(shù)據(jù)和日志存儲,上 層使用客戶端邏輯程序控制各個節(jié)點的協(xié)調工作。將發(fā)生在某個節(jié)點上的事務日志交給這 個節(jié)點去記錄,達到了分配負載的效果,并采用類似ARIES日志記錄的物理日志可以實現(xiàn) 多機并行恢復(parallel recovery),對發(fā)送故障的節(jié)點進行自己恢復的狀態(tài)并且不需要 相互傳遞有關數(shù)據(jù)項的信息,降低了日志恢復的復雜性,提高日志恢復的速率和安全保障。
【附圖說明】
[0038] 圖1是本發(fā)明內(nèi)存數(shù)據(jù)管理中日志恢復方法的流程框圖;
[0039] 圖2是本發(fā)明內(nèi)存數(shù)據(jù)管理中日志恢復方法中主節(jié)點的結構示意圖;
[0040] 圖3是本發(fā)明內(nèi)存數(shù)據(jù)管理中日志恢復方法中主節(jié)點的數(shù)據(jù)插入節(jié)點框圖;其中 (a)為數(shù)據(jù)插入節(jié)點的步驟流程框圖;(b)為另一種映射表表示方式;
[0041] 圖4是本發(fā)明內(nèi)存數(shù)據(jù)管理中日志恢復方法的仿真系統(tǒng)結構示意圖。
【具體實施方式】
[0042] 下面結合附圖對本發(fā)明做詳細描述。
[0043] 實施例一
[0044] 本發(fā)明使用"集群環(huán)境"或者"多機環(huán)境"來表示一種分布式的概念,集群環(huán)境下 主要考慮將數(shù)據(jù)分到多臺機器上存儲。在集群環(huán)境下,每個機器節(jié)點稱為node,由于現(xiàn)代 計算機的多核心CPU普遍使用,一些多線程的任務可以分別在一個node中的多個核心上運 行,CPU的一個核心稱之為一個site。現(xiàn)有的內(nèi)存數(shù)據(jù)庫系統(tǒng)如VoltDB和SiloR中使用集 群和集群節(jié)點中多處理器的優(yōu)勢,將任務分布給多個線程,由于每個處理器的核心至少可 以處理一個線程(在超線程的CPU中可以處理兩個線程)。系統(tǒng)將事務分類成為一個node 中的事務和跨node的事務,并且試圖將相關的事務進程放到一個node的site中,這樣如 果一個site中的事務回滾,只會影響到這個node而已。同樣對于日志,在每個node中的 所有site都共享一個日志。
[0045] 如圖1所示,本發(fā)明提供了一種內(nèi)存數(shù)據(jù)管理中日志恢復方法,包括以下步驟:
[0046] 1)、主節(jié)點獲取集群節(jié)點的節(jié)點編號,并對所述集群節(jié)點發(fā)送數(shù)據(jù)寫入命令,所述 集群節(jié)點進行數(shù)據(jù)存儲,主節(jié)點形成映射表;
[0047] 主節(jié)點是RecoS負責邏輯程序執(zhí)行部分的主機節(jié)點,一般使用性能強悍的機器作 為主節(jié)點。工作節(jié)點是下層的Redis集群中負責存儲的節(jié)點,由于在Redis集群的規(guī)范中 需要使用后備節(jié)點,這時的相應master節(jié)點稱為"主節(jié)點",但是這里為了和RecoS的主節(jié) 點區(qū)分,稱之為"工作節(jié)點"。而日志節(jié)點是為工作節(jié)點專門配備的用于記錄日志的Redis 實例。
[0048] 如圖2所示,圖2為主節(jié)點的拓撲結構圖,主節(jié)點通過網(wǎng)絡連接保持對Redis實例 的控制和獲取狀態(tài)。主節(jié)點的程序運行在一臺性能配置較高的計算機上,它主要用來負責 除了數(shù)據(jù)和日志存儲之外的所有功能,包括發(fā)送讀寫命令、模擬事務的進行、控制日志的讀 寫時機等。主節(jié)點程序采用Redis推薦的Java程序語言客戶端Jedis編寫,Jedis可以調 用API來操控集群的運行。
[0049] 具體的,所述主節(jié)點獲取集群節(jié)點的節(jié)點編號的過程為:
[0050] 當一個數(shù)據(jù)項被新插入存儲集群時,首先需要在映射表中注冊
當前第1頁1 2 3 4 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1