內存數據庫的架構設計及原理

時(shí)間:2022-06-24 18:14:35 數據庫操作系統 我要投稿
  • 相關(guān)推薦

內存數據庫的架構設計及原理

  摘 要 恢復技術(shù)是保證內存數據庫運行可靠的關(guān)鍵,傳統的基于日志的恢復技術(shù)會(huì )對系統性能產(chǎn)生很大影響。本文提出內存數據庫系統快速日志恢復技術(shù),它控制日志的產(chǎn)生數量,使得在系統崩潰并重新啟動(dòng)時(shí),能以最快的速度恢復到系統崩潰前的最近一致點(diǎn)上。

  關(guān)鍵字 內存數據庫;日志恢復;檢查點(diǎn)

  0 引言

  內存數據庫(MMDB)把數據全部或者當前工作部分駐留在內存中,消除了傳統磁盤(pán)數據庫系統中I/O瓶頸,極大的提高了系統的性能和吞吐量,但是由于所有操作都作用于內存數據庫的主拷貝上,數據庫及易遭到操作系統和應用軟件造成的破壞,因此MMDB的恢復技術(shù)十分關(guān)鍵。日志(Logging)恢復是傳統的MMDB恢復技術(shù)之一,它能滿(mǎn)足當前MMDB系統對事務(wù)響應和快速系統恢復的要求,但是在大量事務(wù)吞吐量情況下造成的日志暴增所帶來(lái)很大問(wèn)題,會(huì )對MMDB性能產(chǎn)生很大影響。

  本文提出MMDB系統快速日志恢復技術(shù),它是在不阻礙系統正常運行的情況下,控制日志的產(chǎn)生數量,使得在系統崩潰并重新啟動(dòng)時(shí),能以最快的速度恢復到系統崩潰前的最近一致點(diǎn)上。

  1 系統構架設計

  快速恢復模型的整體架構如圖1所示。事務(wù)處理模塊負責根據用戶(hù)請求產(chǎn)生事務(wù),并由事務(wù)管理器調度。事務(wù)管理器將負責各個(gè)事務(wù)的日志記錄,交給日志產(chǎn)生規則處理。檢查點(diǎn)模塊根據日志產(chǎn)生規則才產(chǎn)生的日志數量動(dòng)態(tài)調整檢查點(diǎn)啟動(dòng)時(shí)間。當日志記錄數達到一定值時(shí),檢查點(diǎn)程序啟動(dòng)。它讀取所有日志記錄,交給日志篩選器。日志篩選器根據篩選算法,從當前所有日志項中篩選出實(shí)際有效的日志記錄,并將這些有效日志記錄交給日志分發(fā)結點(diǎn)。日志分發(fā)結點(diǎn)主要做兩項工作:第一是它將日志傳送給日志磁盤(pán)管理器,由其負責將日志回寫(xiě)到日志磁盤(pán)上,第二是日志分發(fā)結點(diǎn)將日志傳送給備份更新發(fā)生器。備份更新發(fā)生器利用快速恢復算法,觸發(fā)各類(lèi)更新操作,根據日志更新磁盤(pán)上的數據。

  圖1 快速恢復模型的整體架構

  該快速恢復模型具有如下的特點(diǎn):

 、倏焖倩謴湍P鸵匀罩掘寗(dòng)方式做檢查點(diǎn),異步更新磁盤(pán)上的備份數據鏡象。

 、谙到y只維護全局Redo日志,以Redo日志來(lái)驅動(dòng)備份更新發(fā)生器,各個(gè)事務(wù)維護私有Redo日志和Undo日志在事務(wù)提交時(shí)將私有Redo日志寫(xiě)入全局Redo日志中。

 、凼褂萌罩竞Y選算法,近一步減少Redo日志的數量,提升檢查點(diǎn)程序的性能。

 、軅浞輸祿R象只反應己提交事務(wù)的更新?tīng)顟B(tài),因此在系統重載時(shí)不需要回退未提交的事務(wù)。

 、菘焖倩謴退惴椴l(fā)重載算法。在系統恢復過(guò)程中,能繼續接受新事務(wù)的請求。

  2 快速日志驅動(dòng)檢查點(diǎn)

  快速日志驅動(dòng)檢查點(diǎn)的基本思想是,檢查點(diǎn)程序仍然由日志來(lái)驅動(dòng),根據讀取到的日志項來(lái)更新數據鏡象上的內容,維持數據鏡象與內存中數據庫的基本同步。但是,與以往日志驅動(dòng)檢查點(diǎn)算法不同的是,它通過(guò)日志產(chǎn)生規則和日志篩選算法兩個(gè)策略克服了以往日志驅動(dòng)檢查點(diǎn)算法中日志數量可能過(guò)快增長(cháng)的問(wèn)題。

  2.1 日志產(chǎn)生規則

  快速日志驅動(dòng)檢查點(diǎn)算法中設立的日志產(chǎn)生規則是:系統中日志被分為全局日志和私有日志兩類(lèi)。系統只維護全局Redo日志,而不維護Undo日志,由事務(wù)自身維護私有的Redo日志和Undo日志。在事務(wù)提交時(shí),依照事務(wù)提交的先后順序,將事務(wù)的私有Redo日志添加到全局Redo日志中。因此,在事務(wù)運行過(guò)程中,會(huì )產(chǎn)生Redo日志和Undo日志。Redo日志用于在系統恢復過(guò)程中,重做已提交事務(wù)。而Undo日志用于在事務(wù)Abort時(shí)回退事務(wù),或者在系統恢復過(guò)程中回退未提交的事務(wù)。如果恢復模型的設計能夠保證系統恢復過(guò)程中,沒(méi)有需要回退的未提交事務(wù),那么系統只需要讀取Redo日志而不需要讀取Undo日志。因而系統只需要維護全局的Redo日志,而不需要維護Undo日志,將Undo日志交給事務(wù)自身維護,Undo日志只用于事務(wù)自身Abort時(shí)回退。這樣就可以減少全局日志的總量。

  圖2具體描述了全局日志和私有日志的使用。在事務(wù)T1,T2, T3的內存空間內,各自維護自己的私有Redo日志和Undo日志。在非易失性?xún)却?SRAM)上,MMDB系統開(kāi)辟全局Redo日志緩沖區,讓事務(wù)在提交時(shí)事務(wù)的私有Redo日志寫(xiě)入該緩沖區。檢查點(diǎn)程序將定期讀取日志緩沖區中的數據,將日志寫(xiě)入磁盤(pán),并驅動(dòng)檢查點(diǎn)程序更新磁盤(pán)鏡象數據。

  圖2 全局日志和私有日志

  各事務(wù)將按如下階段操作日志:

 、偈聞(wù)啟動(dòng)時(shí),需要在事務(wù)的各自空間內建立私有Redo日志和私有Undo日志,并將在私有Redo日志中寫(xiě)入事務(wù)啟動(dòng)記錄。

 、谑聞(wù)運行過(guò)程中,事務(wù)的每次更新操作,需要在私有Redo日志中添加Redo記錄,并在私有Undo日志中添加Undo記錄。

 、凼聞(wù)提交時(shí),需要按如下步驟完成:

 、逑蚴聞(wù)的私有Redo日志內添加事體Commit記錄。

 、鎸⑹聞(wù)的私有Redo日志寫(xiě)入全局Redo日志中。

 、玑尫攀聞(wù)的私有Redo日志和私有Undo日志,釋放事務(wù)所占用的其他資源,完成提交。

 、苁聞(wù)Abort時(shí),需要按照如下步驟完成:

 、迨聞(wù)反向掃描私有Undo日志,回退事務(wù)的更新操作。

 、驷尫攀聞(wù)的私有Redo日志和私有Undo日志,釋放事務(wù)所占用的其他資源,結束事務(wù)。

  由此可見(jiàn),事務(wù)只在提交時(shí)才將私有Redo日志寫(xiě)入全局日志緩沖區。從而也保證了,檢查點(diǎn)程序運行時(shí),只看到己提交事務(wù)的Redo日志,磁盤(pán)上的數據鏡象也只反映已提交事務(wù)的更新操作。

  2.2日志篩選算法

  用日志產(chǎn)生規則能明顯減少日志產(chǎn)生的數量,但是在更新事務(wù)吞吐量較大的情況下,檢查點(diǎn)程序從全局日志緩沖區讀取Redo日志時(shí),仍然可能會(huì )面對Redo日志量過(guò)大的問(wèn)題。產(chǎn)生的原因是這樣的:如果對一份數據做兩次更新操作,那么兩個(gè)事務(wù)各自產(chǎn)生一條對同一物理地址上值更新的物理日志,但只有第2次更新事務(wù)產(chǎn)生的日志為有效的。本文利用日志篩選算法來(lái)避免日志量過(guò)大問(wèn)題。該算法認為,當LOG1(T1,addr,valuel)和LOG2(T2, addr, value2)按照事務(wù)的提交順序通過(guò)日志篩選器時(shí),當T1的提交時(shí)間在T2提交時(shí)間前,那么只有LOG2(T2, addr, value2)被認為是有效,而LOGI(T1,addr,valuel)被忽略。日志篩選器需要關(guān)注物理日志中被修改值的地址的相關(guān)性。對相同修改地址的物理日志依據日志的提交順序進(jìn)行篩選。為加快日志的篩選速度,將全日志緩沖區劃分為多個(gè)區域,這將日志記錄中操作地址具有空間相關(guān)性的日志按照所屬事務(wù)的提交順序聚合在一個(gè)區域內,能加速日志篩選算法的篩選速度。使得在篩選過(guò)程中,只需在小范圍內(也就是一個(gè)區域)搜索可以被篩選的日志。當全局Redo日志緩沖區中的某一個(gè)區域滿(mǎn)時(shí),就喚醒檢查點(diǎn)程序,將這一區域中的Redo日志寫(xiě)入日志磁盤(pán),并驅動(dòng)備份更新發(fā)生器更新磁盤(pán)上的數據鏡象

  3 快速恢復算法

  在系統崩潰后,MMDB系統需要通過(guò)恢復過(guò)程,將數據庫恢復到崩潰前的最近一致點(diǎn)上。在系統恢復過(guò)程中,重載程序將數據從磁盤(pán)鏡象上加載到MMDB系統中,同時(shí)根據日志,重做(Redo)或者取消(Undo)部分事務(wù),來(lái)恢復數據庫的一致性。

  快速恢復算法如下算法步驟:

 、佼斚到y崩潰重啟時(shí),先啟動(dòng)日志檢查和分配程序,檢查非易失性?xún)却?SM)中提供給事務(wù)提交時(shí)用于寫(xiě)入私有Redo日志的緩沖區中是否有完整寫(xiě)入的Redo日志。如果有完整的Redo日志,則日志檢查和分配程序將這些完整的日志分配到全局Redo日志緩沖區的不同區域中。

 、诮y計全局Redo日志緩沖區中的日志數量,并標記這些日志。當前Redo日志緩沖區中的日志將被用于恢復內存中MMDB系統的一致性,同時(shí)也要用于維護磁盤(pán)上數據鏡象的一致性。

 、刍謴统绦驈拇疟P(pán)數據鏡象上加載一些重要的系統表以后,MMDB系統可以啟動(dòng),并可以接受新事務(wù)的請求。系統的正常事務(wù)處理和系統恢復過(guò)程同時(shí)進(jìn)行。

 、苡|發(fā)檢查點(diǎn)程序從全局Redo日志緩沖區中讀取日志,驅動(dòng)備份更新發(fā)生器更新磁盤(pán)上的數據鏡象。在這過(guò)程中,驅動(dòng)備份更新發(fā)生器向緩沖區管理區詢(xún)問(wèn)將被更新的記錄所在的鏡象數據頁(yè)面是否已經(jīng)被加載到內存中。如果己經(jīng)被加載,則不但需要更新磁盤(pán)上的鏡象數據頁(yè),還需要更新內存中的數據頁(yè)面。如果全局Redo日志緩沖區中所有被標記的日志都已經(jīng)被用于驅動(dòng)備份更新發(fā)生器,那么此時(shí)備份更新發(fā)生器可以告訴重載程序恢復工作已經(jīng)完成,沒(méi)有其他鏡象頁(yè)面需要更新。

 、軲MDB在接受新事務(wù)的請求時(shí),對于事務(wù)的所訪(fǎng)問(wèn)到的數據,如果數據還沒(méi)有被加載內存中時(shí),則系統向重載程序要求將所需數據從磁盤(pán)鏡象上加載到內存中。此時(shí),重載程序先要檢查要求加載的數據頁(yè)面是否會(huì )被備份更新發(fā)生器修改。如果是,則需要等待備份更新發(fā)生器更新鏡象頁(yè)面后再加載到內存中,否則就直接將鏡象頁(yè)面加載到內存中。

 、蕻斔戌R象都加載完成后,MMDB系統恢復過(guò)程結束。

  4 結束語(yǔ)

  恢復技術(shù)是保證內存數據庫運行可靠的關(guān)鍵技術(shù)。傳統日志恢復技術(shù)由于存在產(chǎn)生過(guò)多不必要的日志的缺點(diǎn),本文研究了一種新的日志恢復技術(shù)來(lái)盡可能的減少日志數量,并在此基礎上提出了快速日志恢復算法。本文提出的恢復技術(shù)算法簡(jiǎn)單可以大大的節約系統的資源。然而,內存數據庫恢復是一個(gè)十分復雜而龐大的技術(shù),所以該方法還有待完善。

  參考文獻

  [1]劉云生,潘琳. 實(shí)時(shí)數據庫系統的內存數據庫組織與故障恢復[J]. 小型微型計算機系統.2005 22(5):611-613

  [2]劉云生,廖國瓊,付蔚. 一個(gè)支持實(shí)時(shí)內存數據庫的恢復系統[J]. 小型微型計算機系統.2003 24(3):460-464

  [3] 龍玉國 耿協(xié)堅. 嵌入式實(shí)時(shí)內存數據庫恢復子系統的設計[J]. 計算機工程與應用.2004 17:179-180

  [4] 宋廣華,楊長(cháng)生. 基于混合日志的內存數據庫恢復子系統[J]. 浙江大學(xué)學(xué)報(理學(xué)版).2001 28(3):164-168

99久久精品免费看国产一区二区三区|baoyu135国产精品t|40分钟97精品国产最大网站|久久综合丝袜日本网|欧美videosdesexo肥婆