複製鏈接
請複製以下鏈接發送給好友

嵌入式實時數據庫

鎖定
嵌入式實時數據庫,計算機領域術語。
中文名
嵌入式實時數據庫
背    景
嵌入式環境下
分    類
數據庫
詞    性
名詞

嵌入式實時數據庫簡介

隨着嵌入式系統的廣泛應用及嵌入式實時操作系統的不斷普及,嵌入式環境下的數據管理問題成為系統中的重要環節,構建嵌入式實時數據庫系統(RTDBS)成為嵌入式開發中必須解決的問題。這裏所説的嵌入式RTDBS[1][2]是指可在嵌入式設備中獨立運行的一種數據庫系統,用以處理大量的、時效性強且有嚴格時序的數據,它以高可靠性、高實時性和高信息吞吐量為目標,其數據的正確性不僅依賴於邏輯結果,而且依賴於邏輯結果產生的時間。圖1是一個嵌入式應用的基本構架,整個嵌入式RTDBS構建於實時操作系統之上。由於嵌入式實時數據庫系統在運行環境和運行方式上與常見的企業級數據庫管理系統有很大差別,因此,傳統的企業數據庫如Oracle、Sybase等在實時嵌入式環境下很難發揮作用,尤其在一些實時性要求很高的控制系統中,傳統數據庫更顯得無能為力。因此,伴隨着各種商用嵌入式實時操作系統的出現,研究嵌入式環境下的實時數據庫系統成為嵌入式軟件中的一項重要內容。

嵌入式實時數據庫基本結構

嵌入式系統開發中,在實時數據庫問題上的多數看法是,嵌入式RTDBS從本質上説是一個“內存數據庫”,是一個由應用程序管理的內存緩衝池,它在系統中的作用就是一個供多個實時任務共同使用的共享數據區。這種數據庫實際上是一個嵌入在用户應
圖1 嵌入式應用基本結構 圖1 嵌入式應用基本結構
用軟件中的與應用程序不可分割的部分,其功能主要是數據的存和取,不具有獨立性,不是一個真正意義上的數據庫系統。一個完整的嵌入式實時數據庫系統除了包括內存數據庫外,還應當含有歷史數據庫和數據庫管理系統DBMS及提供給用户的接口函數,整個數據庫可由DBMS完成對數據庫的具體配置及各種操作,例如系統運行前根據實際需要對內存數據庫中的記錄節點進行增減等配置操作。目前的嵌入式實時數據庫系統可分為兩大類,一類是商用級的嵌入式實時數據庫系統,它獨立於具體的應用軟件,如美國McObject公司提供的eXtremeDB內存式實時數據庫,這是一種專門為嵌入式系統數據庫管理而編寫的實時數據庫,它將數據庫直接建立在內存之中,並根據應用特徵產生數據庫API,用户可方便的調用這些接口函數管理整個數據庫系統;另一類是用户針對具體的應用對象而自行設計開發的嵌入式實時數據庫系統,這種數據庫一般是嵌入到應用軟件中作為應用程序的一部分,不具有獨立性,目前測控系統中用户開發的實時數據庫大都屬於這種情況。

嵌入式實時數據庫系統結構

圖2 嵌入式RTDBS系統結構 圖2 嵌入式RTDBS系統結構
圖2所示的是一個嵌入式實時數據庫系統體系結構,同傳統的數據庫一樣,它仍然是一種三級模式的結構體系,即用户模式、邏輯模式和存儲模式。在嵌入式環境下構建實時數據庫系統,應該完成以下功能:高效的數據存取機制、數據安全性控制、實時事務管理機制、數據庫的恢復機制等,設計中更關心的是系統的實時性、開銷大小、系統性能、可靠性、可預知性和底層控制能力,即如何針對選用的實時OS和嵌入式硬件平台設計合理的數據模型和物理結構,重點放在如何高效的利用嵌入式系統的有限資源、如何提高數據的存取速度、如何進行數據保護、數據交換、查詢/ 事務處理算法的優化、事務的優先級分派、事務調度和併發控制等等。

嵌入式實時數據庫數據模型

嵌入式實時數據庫系統的關鍵是數據模型的確立,它決定了數據被訪問和操作的方式,應用程序的性能和可靠性也大部分取決於此。目前嵌入式環境下的數據庫系統多數採用了關係模型結構,這也是商用數據庫系統的數據模型,該模型結構是利用二維關係表來實現數據存儲,利用索引訪問和查詢數據,這種模型結構是建立在嚴格的數學基礎上的,結構簡單靈活,獨立性好,但在嵌入式環境下的內存開銷和數據冗餘較大,用户必須對其進行優化,增加了開發數據庫系統的難度;有些嵌入式數據庫則採用了網狀模型結構,該模型通過指針來確定數據間的顯式連接關係,它比關係模型中利用冗餘數據和索引文件要節約大量的存儲空間,具有一定的數據獨立性和共享特性,運行效率較高,而且由於它避免了索引操作,比關係型
數據庫模式要節省存儲空間,數據操作速度也更快。但是這種模型結構比較複雜,尤其當嵌入式系統規模增大時,其數據庫的結構變得非常龐大,可能會影響到系統的實時性能。圖3所示的是在相同數目的記錄下,關係模型和網狀模型的系統開銷比較,從圖3中可以看出,網狀模型因為避免了索引操作使得其開銷要小於關係模型。但是在實際應用中,應當根據實時系統的綜合性能選取數據庫模型,通常可採用網狀加關係或層次加關係的混合模型結構以彌補兩種結構之間的缺陷,如CENTURA公司的嵌入式實時數據庫RDM(Raima Database Management),它將網狀和關係模型的優點結合起來,避免了不必要的索引開銷,顯著地減少系統存儲空間I/O操作和CPU週期,由於其快速而且可靠性高的特點,廣泛應用於許多嵌入式產品中。

嵌入式實時數據庫物理結構

圖3 關係和網狀模型開銷比較 圖3 關係和網狀模型開銷比較
嵌入式實時系統中,確定性是一個重要 的性能指標,用户必須能夠確定數據操作的時間和數據庫存儲空間的佔用情況等。傳統的數據庫的存儲管理主要是基於磁盤存儲結構,數據在存取過程中需要進行頻繁的I/O操作,由於I/O操作時間的不確定性,使得傳統數據庫存儲技術無法應用在嵌入式系統中。考慮到存取時間存儲空間利用率和維護代價等因素,通常嵌入式實時系統存儲結構分為兩個層次,第一層為內存,即RTDBS中的內存數據庫,整個實時數據庫系統的高性能要求就是以內存數據庫做為底層支持的,它是實時數據庫系統的關鍵,用於程序運行和實時數據的處理,它存取速度快,無需進行磁盤的I/O操作,因此最適合用於實時數據的管理和操作;第二層為外存,通常採用一些永久存儲設備,需要進行讀寫I/O操作,用於存儲系統中的歷史數據。這樣,對於那些固定不變的數據(如模擬量的工程單位)或存取頻率相對較低的數據(如只有在故障恢復時才使用的數據備份或日誌備份)放在外存空間內,而把所有的實時數據或當前工作部分的數據駐留在內存中,避免了數據庫文件的操作,大大提升了實時數據庫系統的性能。對於這種兩層存儲結構中的內存部分,可由嵌入式OS自動分配,用户也可指定系統的分配空間,一般由三部分共享內存構成,分別是索引區、數據區和系統信息區,每條記錄由表名、段號、段內偏移地址來確定。
嵌入式RTDBS中數據的查找及更新相當頻繁,必須建立良好的索引結構以加速各種操作的執行速度和確保數據結構的緊湊性。嵌入式RTDBS由於實時數據全部駐留內存,系統很少進行磁盤I/O操作,因此其索引結構重點解決時間和空間上的開銷,其建立原則是快速定位,節省空間。通常採用的數據庫索引結構為順序結構、B樹、AVL樹的方法。順序結構可採用數組方式存儲,其優點是存取方便,但不便於動態維護,進行插入刪除等操作時需要移動大量的數據; B樹的使用最為廣泛,它操作性能好,動態維護方便,但是它的每個節點的數據覆蓋率僅為55%[3],存儲效率太低;AVL樹具有較高的存取性能,但是每個節點需要兩個指針域和一些附加的控制信息,存儲效率也不高。它們均不是嵌入式實時環境下的最佳選擇,因此在以上結構的基礎上,出現了多種改進的適用於嵌入式數據庫系統的索引結構,如針對提高內存數據庫性能的T*樹索引結構[4],這是一種改進的T樹結構,它比AVL樹和B樹具有更高的空間利用率,雖然查找時間複雜度稍高於AVL樹,但內存中的操作使得其查找時間足以滿足實時性要求,這種結構大大減少了節點間元素的移動和平衡處理的次數,較好的考慮了時間和空間的關係,是一種適用於嵌入式系統的索引結構;此外,針對嵌入式系統I/O操作性能的不平衡B樹索引結構[5],主要為了減少存儲塊的寫次數,這種索引結構的節點由若干個關鍵字和指針域構成,每個指針指向具有相應關鍵字的文件記錄,由於不平衡B樹避免了B樹為了調節平衡產生的進一步分裂而進行的次數,因此提高了系統的寫性能。

嵌入式實時數據庫管理系統

嵌入式RTDBS系統是介於用户和實時操作系統之間的一層軟件,由眾多程序模塊組成,它的作用是對數據庫中的共享數據進行有效的組織、管理和存取。其中,存儲空間管理模塊、安全性和完整性控制模塊、事務併發控制模塊、實時數據轉儲模塊、運行日誌管理模塊是在嵌入式環境下開發實時數據庫系統需要特別解決的幾個問題:(1)存儲空間管理模塊。嵌入式實時數據庫系統由於採用了內存數據庫技術,必然要涉及到嵌入式操作系統內存管理,因此,用户必須瞭解系統對內存的分配機制,並設計自己的內存管理程序。系統運行時,由該模塊通過實時OS向系統申請內存緩衝區,作為共享的內存數據區使用。之後,將歷史數據庫中的初始化數據調入內存區對這些空白內存進行初始化。對內存空間的申請,用户可採用靜態分配方式,這種方式實現簡單,無需複雜的索引結構,缺點是失去了靈活性,必須在設計階段就預先知道所需內存並對之作出分配;或者採用動態分配方式,這種方式使用靈活,可以根據需要擴充數據節點,但是必須建立合適的索引結構,以加快數據的檢索時間。該模塊要根據具體的實時OS進行設計;(2)數據安全性、完整性控制模塊。實時數據庫設計中必須考慮數據的安全性,一方面指用户訪問數據的合法性,另一方面是指系統的安全性。完整性是指用户對實時數據或歷史數據的各種操作必須符合一定的語義,可通過完整性約束條件來實現;(3)事務併發控制模塊。實時數據庫是一個共享資源,允許多個任務共同使用,如果不對併發事務進行控制,可能會造成任務錯 誤的讀取或存儲數據,破壞數據的一致性,因此實時數據庫系統中,必須實現良好的併發控制機制。傳統的數據庫一般採用加鎖的方式,類似於實時操作系統中的信號量,對於封鎖粒度的大小要根據具體的應用系統確定,傳統數據庫獲得鎖的開銷較小,因此通常選用小粒度封鎖單位,以增加系統的並行性。但在實時數據庫系統中,事務獲得鎖的開銷與處理數據的開銷相當,過小的封鎖粒度反而會降低系統的性能,因此在實時數據庫中的封鎖粒度通常選擇一張關係表為一個單位(如模擬量關係表為一個封鎖單位),這樣做減少了併發控制機制的複雜度,減小了系統的開銷,提高了事務處理的整體性能;(4)實時數據轉儲模塊。該模塊實現的功能是將實時數據存儲為歷史數據,通常由該模塊先將歷史數據保存在內存緩衝區中,緩衝區滿時才一次性的寫入磁盤;讀歷史數據時,先從緩衝區內取數據,取不到數據時再進行文件的讀寫,這種方式可以降低磁盤I/O操作次數。並且只對變化數據進行存儲,即節省了外存空間,又不會影響系統性能;(5)運行日誌管理模塊。日誌文件在數據庫恢復中起着非常重要的作用,可以用來進行事務故障恢復和系統故障恢復。日誌緩衝區專門存放數據庫操作的記錄,傳統的數據庫日誌記錄包括記錄名、更新前記錄的舊值、更新後記錄的新值、事務標識、操作類型等。在嵌入式實時數據庫系統中,為了減少系統的開銷,在日誌記錄中不包括新舊記錄值,對日誌記錄的寫操作只對緩衝區進行,當緩衝區滿時,才由磁盤寫操作寫入日誌文件當中。

嵌入式實時數據庫設計實例

圖4 嵌入式RTDBS模塊結構 圖4 嵌入式RTDBS模塊結構
我們開發了針對測控系統的基於嵌入式操作系統VxWorks的實時數據庫系統,該系統的硬件平台採用了Intel486系列的PC104 CPU板,用户可通過PC104硬件平台上的顯示界面添加或刪除相應的數據節點,整個應用系統結構如圖4所示。該系統分為內存數據庫和歷史數據庫兩部分,內存數據庫是一個數據實時更新的數據庫系統,由應用程序初始化時靜態創建一個大型緩衝池,用於存放各種類型的數據節點,利用空閒鏈表管理緩衝池中的空閒單元。程序在添加新節點時,首先從空閒鏈表中找到空閒單元分配給用户,然後鏈表中的該節點被刪除。當緩衝區內存不夠時,通過VxWorks中提供的增強型內存分區管理庫MemLib,從系統內存中動態申請一塊緩衝池作為新的緩衝池,這種靜態結合動態的內存分配方式可以克服內存碎片的問題,同時也避免了靜態分配中內存數據庫容量設計過大或過小的問題;對於數據索引結構,考慮到實時系統中數據的檢索和更新相當頻繁,結合系統性能要求,在嵌入式RTDBS中我們採用了L樹的索引結構,該樹結合了B+樹、T樹和AVL樹的特徵,它的每一結點可含有多個關鍵字,具有較高的空間利用率,是一種比較好的支持內存數據庫的索引結構;在基於優先級驅動的實時事務的控制上,將事務的截止時間映射為事務優先級,最簡單的先來先服務FCFS的分配策略由於沒有考慮到定時限制,不適合用於實時系統,因此我們採用了最短期限的分配策略;此外,對於數據庫的管理,我們提供了傳統數據庫的管理功能,如添加、刪除、修改及顯示等,用户必須以相應的權限進入系統才能進行操作,顯示系統利用VxWorks中的圖形軟件包Zinc進行開發,整個系統運行穩定,能夠滿足實時系統的數據管理要求。

嵌入式實時數據庫結語

嵌入式環境下的實時數據庫開發還存在許多問題需要解決,在實際應用中的性能也有待進一步提高,其關鍵在於實時系統的存儲結構、數據的存取速度、實時事務的優先級調度、故障恢復問題,這是提高實時數據庫性能的關鍵之處,也是實時數據庫系統理論的研究重點。