簡介
基本結構
嵌入式系統開發中,在實時
資料庫問題上的多數看法是,嵌入式RTDBS從本質上說是一個“
記憶體資料庫”,是一個由應用程式管理的記憶體緩衝池,它在系統中的作用就是一個供多個實時任務共同使用的共享數據區。這種資料庫實際上是一個嵌入在用戶應
用軟體中的與應用程式不可分割的部分,其功能主要是數據的存和取,不具有獨立性,不是一個真正意義上的
資料庫系統。一個完整的嵌入式實時
資料庫系統除了包括
記憶體資料庫外,還應當含有歷史資料庫和
資料庫管理系統DBMS及提供給用戶的
接口函式,整個資料庫可由DBMS完成對資料庫的具體配置及各種操作,例如系統運行前根據實際需要對記憶體資料庫中的記錄
節點進行增減等配置操作。目前的嵌入式實時
資料庫系統可分為兩大類,一類是商用級的嵌入式實時資料庫系統,它獨立於具體的套用軟體,如美國McObject公司提供的
eXtremeDB記憶體式實時資料庫,這是一種專門為嵌入式系統
資料庫管理而編寫的實時資料庫,它將資料庫直接建立在記憶體之中,並根據套用特徵產生資料庫API,用戶可方便的調用這些
接口函式管理整個資料庫系統;另一類是用戶針對具體的
套用對象而自行設計開發的嵌入式實時資料庫系統,這種資料庫一般是嵌入到套用軟體中作為應用程式的一部分,不具有獨立性,目前測控系統中用戶開發的實時資料庫大都屬於這種情況。
系統結構
圖所示的是一個嵌入式實時
資料庫系統的
體系結構,同傳統的資料庫一樣,它仍然是一種三級模式的結構體系,即用戶模式、邏輯模式和存儲模式。在嵌入式環境下構建實時
資料庫系統,應該完成以下功能:高效的數據存取機制、數據安全性控制、實時
事務管理機制、資料庫的恢復機制等,設計中更關心的是系統的實時性、開銷大小、系統性能、可靠性、可預知性和底層控制能力,即如何針對選用的實時OS和嵌入式硬體平台設計合理的數據模型和
物理結構,重點放在如何高效的利用
嵌入式系統的有限資源、如何提高數據的存取速度、如何進行數據保護、數據交換、查詢/ 事務處理算法的最佳化、事務的優先權分派、事務調度和
並發控制等等。
數據模型
嵌入式實時
資料庫系統的關鍵是數據模型的確立,它決定了數據被訪問和操作的方式,應用程式的性能和可靠性也大部分取決於此。目前嵌入式環境下的
資料庫系統多數採用了關係模型結構,這也是商用資料庫系統的數據模型,該模型結構是利用二維關係表來實現
數據存儲,利用索引訪問和查詢數據,這種模型結構是建立在嚴格的數學基礎上的,結構簡單靈活,獨立性好,但在嵌入式環境下的記憶體開銷和數據冗餘較大,用戶必須對其進行最佳化,增加了開發資料庫系統的難度;有些
嵌入式資料庫則採用了
網狀模型結構,該模型通過
指針來確定數據間的顯式連線關係,它比關係模型中利用冗餘數據和
索引檔案要節約大量的
存儲空間,具有一定的
數據獨立性和共享特性,運行效率較高,而且由於它避免了索引操作,比關係型
資料庫模式要節省
存儲空間,數據操作速度也更快。但是這種模型結構比較複雜,尤其當
嵌入式系統規模增大時,其資料庫的結構變得非常龐大,可能會影響到系統的實時性能。圖3所示的是在相同數目的記錄下,關係模型和
網狀模型的系統開銷比較,從圖中可以看出,網狀模型因為避免了索引操作使得其開銷要小於關係模型。但是在實際套用中,應當根據
實時系統的綜合性能選取
資料庫模型,通常可採用網狀加關係或層次加關係的混合模型結構以彌補兩種結構之間的缺陷,如CENTURA公司的嵌入式實時資料庫RDM(Raima Database Management),它將網狀和關係模型的優點結合起來,避免了不必要的索引開銷,顯著地減少系統
存儲空間、I/O操作和CPU周期,由於其快速而且可靠性高的特點,廣泛套用於許多
嵌入式產品中。
物理結構
在
嵌入式實時系統中,確定性是一個重要 的性能指標,用戶必須能夠確定數據操作的時間和資料庫
存儲空間的占用情況等。傳統的資料庫的
存儲管理主要是基於磁碟
存儲結構,數據在存取過程中需要進行頻繁的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系統是介於用戶和
實時作業系統之間的一層軟體,由眾多
程式模組組成,它的作用是對資料庫中的共享數據進行有效的組織、管理和存取,其結構如圖4所示。其中,
存儲空間管理模組、安全性和
完整性控制模組、
事務並發控制模組、實時數據轉儲模組、運行日誌管理模組是在嵌入式環境下開發實時
資料庫系統需要特別解決的幾個問題:(1)存儲空間管理模組。嵌入式實時
資料庫系統由於採用了
記憶體資料庫技術,必然要涉及到
嵌入式作業系統的
記憶體管理,因此,用戶必須了解系統對記憶體的分配機制,並設計自己的記憶體管理程式。系統運行時,由該模組通過實時OS向系統申請記憶體緩衝區,作為共享的記憶體數據區使用。之後,將歷史資料庫中的初始化數據調入記憶體區對這些空白記憶體進行初始化。對記憶體空間的申請,用戶可採用
靜態分配方式,這種方式實現簡單,無需複雜的索引結構,缺點是失去了靈活性,必須在設計階段就預先知道所需記憶體並對之作出分配;或者採用動態分配方式,這種方式使用靈活,可以根據需要擴充數據節點,但是必須建立合適的索引結構,以加快數據的檢索時間。該模組要根據具體的實時OS進行設計;(2)數據安全性、
完整性控制模組。實時
資料庫設計中必須考慮數據的安全性,一方面指用戶訪問數據的合法性,另一方面是指系統的安全性。完整性是指用戶對實時數據或歷史數據的各種操作必須符合一定的語義,可通過完整性約束條件來實現;(3)
事務並發控制模組。實時資料庫是一個共享資源,允許多個任務共同使用,如果不對並發
事務進行控制,可能會造成任務錯 誤的讀取或存儲數據,破壞數據的一致性,因此實時
資料庫系統中,必須實現良好的
並發控制機制。傳統的資料庫一般採用加鎖的方式,類似於
實時作業系統中的
信號量,對於封鎖粒度的大小要根據具體的套用系統確定,
傳統資料庫獲得鎖的開銷較小,因此通常選用小粒度封鎖單位,以增加系統的
並行性。但在實時
資料庫系統中,
事務獲得鎖的開銷與處理數據的開銷相當,過小的封鎖粒度反而會降低系統的性能,因此在實時資料庫中的封鎖粒度通常選擇一張關係表為一個單位(如模擬量關係表為一個封鎖單位),這樣做減少了
並發控制機制的複雜度,減小了系統的開銷,提高了事務處理的整體性能;(4)實時數據轉儲模組。該模組實現的功能是將實時數據存儲為歷史數據,通常由該模組先將歷史數據保存在記憶體緩衝區中,緩衝區滿時才一次性的寫入磁碟;讀歷史數據時,先從緩衝區內取數據,取不到數據時再進行檔案的讀寫,這種方式可以降低磁碟I/O操作次數。並且只對變化數據進行存儲,即節省了外存空間,又不會影響系統性能;(5)運行日誌管理模組。日誌檔案在
資料庫恢復中起著非常重要的作用,可以用來進行
事務故障恢復和系統故障恢復。日誌緩衝區專門存放資料庫操作的記錄,傳統的資料庫日誌記錄包括記錄名、更新前記錄的舊值、更新後記錄的新值、
事務標識、操作類型等。在嵌入式實時
資料庫系統中,為了減少系統的開銷,在日誌記錄中不包括新舊記錄值,對日誌記錄的寫操作只對緩衝區進行,當緩衝區滿時,才由
磁碟寫操作寫入日誌檔案當中。
設計實例
我們開發了針對測控系統的基於
嵌入式作業系統VxWorks的實時
資料庫系統,該系統的硬體平台採用了Intel486系列的PC104 CPU板,用戶可通過PC104硬體平台上的顯示界面添加或刪除相應的數據
節點,整個套用系統結構如圖5所示。該系統分為
記憶體資料庫和歷史資料庫兩部分,記憶體資料庫是一個數據實時更新的
資料庫系統,由應用程式初始化時靜態創建一個大型緩衝池,用於存放各種類型的數據
節點,利用空閒
鍊表管理緩衝池中的空閒單元。程式在添加新
節點時,首先從空閒
鍊表中找到空閒單元分配給用戶,然後鍊表中的該節點被刪除。當緩衝區記憶體不夠時,通過VxWorks中提供的增強型記憶體分區管理庫MemLib,從
系統記憶體中動態申請一塊緩衝池作為新的緩衝池,這種靜態結合動態的
記憶體分配方式可以克服
記憶體碎片的問題,同時也避免了靜態分配中
記憶體資料庫容量設計過大或過小的問題;對於數據索引結構,考慮到
實時系統中數據的檢索和更新相當頻繁,結合系統性能要求,在嵌入式RTDBS中我們採用了L樹的索引結構,該樹結合了B+樹、T樹和AVL樹的特徵,它的每一結點可含有多個
關鍵字,具有較高的空間利用率,是一種比較好的支持記憶體資料庫的索引結構;在基於優先權驅動的實時事務的控制上,將事務的截止時間映射為事務優先權,最簡單的先來先服務FCFS的分配策略由於沒有考慮到定時限制,不適合用於實時系統,因此我們採用了最短期限的分配策略;此外,對於資料庫的管理,我們提供了
傳統資料庫的管理功能,如添加、刪除、修改及顯示等,用戶必須以相應的許可權進入系統才能進行操作,顯示系統利用VxWorks中的圖形
軟體包Zinc進行開發,整個系統運行穩定,能夠滿足實時系統的
數據管理要求。
結語
嵌入式環境下的實時資料庫開發還存在許多問題需要解決,在實際套用中的性能也有待進一步提高,其關鍵在於實時系統的
存儲結構、數據的存取速度、實時
事務的優先權調度、故障恢復問題,這是提高實時資料庫性能的關鍵之處,也是實時
資料庫系統理論的研究重點。