電子百科
嵌入式實時數(shù)據(jù)庫系統(tǒng)的關(guān)鍵是數(shù)據(jù)模型的確立,它決定了數(shù)據(jù)被訪問和操作的方式,應(yīng)用程序的性能和可靠性也大部分取決于此。目前嵌入式環(huán)境下的數(shù)據(jù)庫系統(tǒng)多數(shù)采用了關(guān)系模型結(jié)構(gòu),這也是商用數(shù)據(jù)庫系統(tǒng)的數(shù)據(jù)模型,該模型結(jié)構(gòu)是利用二維關(guān)系表來實現(xiàn)數(shù)據(jù)存儲,利用索引訪問和查詢數(shù)據(jù),這種模型結(jié)構(gòu)是建立在嚴格的數(shù)學基礎(chǔ)上的,結(jié)構(gòu)簡單靈活,獨立性好,但在嵌入式環(huán)境下的內(nèi)存開銷和數(shù)據(jù)冗余較大,用戶必須對其進行優(yōu)化,增加了開發(fā)數(shù)據(jù)庫系統(tǒng)的難度;有些嵌入式數(shù)據(jù)庫則采用了網(wǎng)狀模型結(jié)構(gòu),該模型通過指針來確定數(shù)據(jù)間的顯式連接關(guān)系,它比關(guān)系模型中利用冗余數(shù)據(jù)和索引文件要節(jié)約大量的存儲空間,具有一定的數(shù)據(jù)獨立性和共享特性,運行效率較高,而且由于它避免了索引操作,比關(guān)系型數(shù)據(jù)庫模式要節(jié)省存儲空間,數(shù)據(jù)操作速度也更快。但是這種模型結(jié)構(gòu)比較復雜,尤其當嵌入式系統(tǒng)規(guī)模增大時,其數(shù)據(jù)庫的結(jié)構(gòu)變得非常龐大,可能會影響到系統(tǒng)的實時性能。圖3所示的是在相同數(shù)目的記錄下,關(guān)系模型和網(wǎng)狀模型的系統(tǒng)開銷比較,從圖中可以看出,網(wǎng)狀模型因為避免了索引操作使得其開銷要小于關(guān)系模型。但是在實際應(yīng)用中,應(yīng)當根據(jù)實時系統(tǒng)的綜合性能選取數(shù)據(jù)庫模型,通常可采用網(wǎng)狀加關(guān)系或?qū)哟渭雨P(guān)系的混合模型結(jié)構(gòu)以彌補兩種結(jié)構(gòu)之間的缺陷,如CENTURA公司的嵌入式實時數(shù)據(jù)庫RDM(Raima Database Management),它將網(wǎng)狀和關(guān)系模型的優(yōu)點結(jié)合起來,避免了不必要的索引開銷,顯著地減少系統(tǒng)存儲空間、I/O操作和CPU周期,由于其快速而且可靠性高的特點,廣泛應(yīng)用于許多嵌入式產(chǎn)品中。
嵌入式RTDBS系統(tǒng)是介于用戶和實時操作系統(tǒng)之間的一層軟件,由眾多程序模塊組成,它的作用是對數(shù)據(jù)庫中的共享數(shù)據(jù)進行有效的組織、管理和存取,其結(jié)構(gòu)如圖4所示。其中,存儲空間管理模塊、安全性和完整性控制模塊、事務(wù)并發(fā)控制模塊、實時數(shù)據(jù)轉(zhuǎn)儲模塊、運行日志管理模塊是在嵌入式環(huán)境下開發(fā)實時數(shù)據(jù)庫系統(tǒng)需要特別解決的幾個問題:
(1)存儲空間管理模塊。嵌入式實時數(shù)據(jù)庫系統(tǒng)由于采用了內(nèi)存數(shù)據(jù)庫技術(shù),必然要涉及到嵌入式操作系統(tǒng)的內(nèi)存管理,因此,用戶必須了解系統(tǒng)對內(nèi)存的分配機制,并設(shè)計自己的內(nèi)存管理程序。系統(tǒng)運行時,由該模塊通過實時OS向系統(tǒng)申請內(nèi)存緩沖區(qū),作為共享的內(nèi)存數(shù)據(jù)區(qū)使用。之后,將歷史數(shù)據(jù)庫中的初始化數(shù)據(jù)調(diào)入內(nèi)存區(qū)對這些空白內(nèi)存進行初始化。對內(nèi)存空間的申請,用戶可采用靜態(tài)分配方式,這種方式實現(xiàn)簡單,無需復雜的索引結(jié)構(gòu),缺點是失去了靈活性,必須在設(shè)計階段就預先知道所需內(nèi)存并對之作出分配;或者采用動態(tài)分配方式,這種方式使用靈活,可以根據(jù)需要擴充數(shù)據(jù)節(jié)點,但是必須建立合適的索引結(jié)構(gòu),以加快數(shù)據(jù)的檢索時間。該模塊要根據(jù)具體的實時OS進行設(shè)計;
?。?)數(shù)據(jù)安全性、完整性控制模塊。實時數(shù)據(jù)庫設(shè)計中必須考慮數(shù)據(jù)的安全性,一方面指用戶訪問數(shù)據(jù)的合法性,另一方面是指系統(tǒng)的安全性。完整性是指用戶對實時數(shù)據(jù)或歷史數(shù)據(jù)的各種操作必須符合一定的語義,可通過完整性約束條件來實現(xiàn);
?。?)事務(wù)并發(fā)控制模塊。實時數(shù)據(jù)庫是一個共享資源,允許多個任務(wù)共同使用,如果不對并發(fā)事務(wù)進行控制,可能會造成任務(wù)錯誤的讀取或存儲數(shù)據(jù),破壞數(shù)據(jù)的一致性,因此實時數(shù)據(jù)庫系統(tǒng)中,必須實現(xiàn)良好的并發(fā)控制機制。傳統(tǒng)的數(shù)據(jù)庫一般采用加鎖的方式,類似于實時操作系統(tǒng)中的信號量,對于封鎖粒度的大小要根據(jù)具體的應(yīng)用系統(tǒng)確定,傳統(tǒng)數(shù)據(jù)庫獲得鎖的開銷較小,因此通常選用小粒度封鎖單位,以增加系統(tǒng)的并行性。但在實時數(shù)據(jù)庫系統(tǒng)中,事務(wù)獲得鎖的開銷與處理數(shù)據(jù)的開銷相當,過小的封鎖粒度反而會降低系統(tǒng)的性能,因此在實時數(shù)據(jù)庫中的封鎖粒度通常選擇一張關(guān)系表為一個單位(如模擬量關(guān)系表為一個封鎖單位),這樣做減少了并發(fā)控制機制的復雜度,減小了系統(tǒng)的開銷,提高了事務(wù)處理的整體性能;
?。?)實時數(shù)據(jù)轉(zhuǎn)儲模塊。該模塊實現(xiàn)的功能是將實時數(shù)據(jù)存儲為歷史數(shù)據(jù),通常由該模塊先將歷史數(shù)據(jù)保存在內(nèi)存緩沖區(qū)中,緩沖區(qū)滿時才一次性的寫入磁盤;讀歷史數(shù)據(jù)時,先從緩沖區(qū)內(nèi)取數(shù)據(jù),取不到數(shù)據(jù)時再進行文件的讀寫,這種方式可以降低磁盤I/O操作次數(shù)。并且只對變化數(shù)據(jù)進行存儲,即節(jié)省了外存空間,又不會影響系統(tǒng)性能;
(5)運行日志管理模塊。日志文件在數(shù)據(jù)庫恢復中起著非常重要的作用,可以用來進行事務(wù)故障恢復和系統(tǒng)故障恢復。日志緩沖區(qū)專門存放數(shù)據(jù)庫操作的記錄,傳統(tǒng)的數(shù)據(jù)庫日志記錄包括記錄名、更新前記錄的舊值、更新后記錄的新值、事務(wù)標識、操作類型等。在嵌入式實時數(shù)據(jù)庫系統(tǒng)中,為了減少系統(tǒng)的開銷,在日志記錄中不包括新舊記錄值,對日志記錄的寫操作只對緩沖區(qū)進行,當緩沖區(qū)滿時,才由磁盤寫操作寫入日志文件當中。