嵌入式數據庫的現狀和未來
1.嵌入式數據庫產生及運用的必然性
嵌入式系統在現代人的生活中隨處可見,其中軟件的比例越來越大,軟件開發的投入也越來越大。
隨著微電子技術和存儲技術的不斷發展,嵌入式系統的內存和各種永久存儲介質容量都在不斷增加。這也就意味著嵌入式系統內數據處理量會不斷增加,那么大量的數據如何處理問題變得非?,F實。人們不得不將原本在企業級運用的復雜的數據庫處理技術引入到嵌入式系統當中去,應用于嵌入式系統的數據庫技術也就應運而生。
但是,事情總是比想象復雜。在嵌入式的世界,無論是通訊領域的嵌入式設備還是其它領域中,各種中間環節逐漸設備化,成為獨立的相對封閉的系統,對外留有接口。設備中數據種類和處理方法有一定的共同規律也有自己的特殊規律。這使得嵌入式數據庫不能像企業級數據庫那樣幾乎是一個解決方案走遍天下,而是有著很大的差異性。同時,也為嵌入式數據庫的合理運用帶來了挑戰,這是嵌入式數據庫差異化的一個基本原因。
隨著嵌入式系統的擴大,嵌入式產品的開發不再像過去那樣幾個人就可以完成整個系統的開發,需要更多的人組成團隊進行合作。嵌入式軟件的需求分析和品質管理也變得越來越復雜,開發周期也逐漸拉長。為了解決這些問題,引進第三方成熟的中間件或解決方案也變得非常現實。專業的嵌入式數據庫廠商也逐漸進入了人們的視野。因為,運用成熟的嵌入式數據處理中間件可以降低開發成本、縮短開發周期,使開發者能夠將更多的精力放在業務邏輯的處理上,而不用花大把的金錢和精力來處理數據,對整個社會的資源也是一種節約。
2.嵌入式數據庫的基本特點
按照馬克思的哲學理論,事物發展的進程可以用螺旋式上升來描述。嵌入式數據庫和我們現在常見的企業級數據庫的基本關系也是一個螺旋上升式的關系。雖然,從名字上看,二者有著太多的相似性,但卻有著本質的根本性的區別。外在的形式的相似性,并不能代表二者的實現方式和運用方式的相似。恰恰相反,嵌入式數據庫的實現和運用方式和企業級的數據庫有著很大的區別。
在國外,嵌入式數據庫已經發展了30多年,典型的代表是Empress嵌入式數據庫。它的特點也基本代表了現階段嵌入式實時數據庫的基本特點。下面就介紹一下Empress嵌入式數據庫所具有的區別于企業級數據庫的幾個主要特點。
嵌入性是嵌入式數據庫的基本特性。嵌入式數據庫不僅可以嵌入到其他的軟件當中,也可以嵌入到硬件設備當中。Empress的方法之一就是使數據庫以組件的形式存在,并發布給客戶,客戶只需要像調用自己定義的函數那樣調用相應的函數就可以創建表、插入刪除數據等常規的數據庫操作??蛻粼谧约旱漠a品發布時,可以將Empress數據庫編譯到自己的產品內,變成自己產品的一部分,最終用戶是感受不到數據庫的存在的,也不用特意去維護數據庫。
實時性和嵌入性是分不開的。只有具有了嵌入性的數據庫才能夠第一時間得到系統的資源,對系統的請求在第一時間內做出響應。但是,并不是具有嵌入性就一定具有實時性。要想嵌入式數據庫具有很好的實時性,必須做很多額外的工作。比如:Empress實時數據庫將嵌入性和高速的數據引擎、定時功能以及防斷片處理等措施整合在一起來保證最基本的實時性。當然,不同的場合實時性要求比較高時,除了軟件的實時性外,硬件的實時性也是必須的,具體情況需要有具體和切實的解決方案,不能一概而論。
移動性是目前在國內提的比較多的一個說法,這和目前國內移動設備的大規模應用有關??梢赃@么說,具有嵌入性的數據庫一定具有比較好的移動性,但是具有比較好的移動性的數據庫,不一定具有嵌入性。比如,一個小型的C/S結構的數據庫也可以運用在移動設備上,而具有移動性。但這個數據庫本身是一個獨立存在的實體,需要額外的運行資源,本質上講和企業級數據庫區別不大。所以不具有嵌入性,也基本上不具備實時性。Empress是優秀的嵌入式實時數據庫,毫無疑問也是非常優秀的移動數據庫。
伸縮性在嵌入式場合顯得尤為重要。首先嵌入式場合硬件和軟件的平臺都是千差萬別,基本都是客戶根據需要自己選擇的結果。
所以嵌入式場合的數據庫必須能夠支持非常多的平臺,如Empress目前支持6000多種平臺。同時,數據存儲要支持常見的存儲設備,如CF/Flash/HD等。多進程和多線程是必備的,現在的嵌入式系統已經遠遠不是當初的簡單的編程,代碼量增大,功能日益復雜,所以必然要支持多線程和多進程。C/C++和SQL接口的支持也是必備的,作為數據庫當然要有大家熟悉的SQL,但同時不要忘記嵌入式場合用的最多的標準的C/C++接口。某種程度上說,嵌入式場合的數據比企業級應用的數據還要復雜,所以要支持各種類型的數據,如多媒體數據和空間數據等,要支持各種數據結構,除了傳統的關系型,還要能處理樹狀結構和網狀結構。
當然,肯定要具備企業級數據庫所具有的一些共性。比如,一致性是數據庫所必需的特性。通過事務、鎖功能和數據同步等多種技術保證數據庫內的各個表內的數據的一致性,同時也保證數據庫和其他同步或鏡像數據庫內數據的一致性。安全性也是必不可少的。在保證物理信息本身的安全的同時,也要保證用戶私有信息的安全。
3. 80%和20%
嵌入式的應用場合和通用PC或服務器架構上的應用有著很大的不同。嵌入式系統中雖然也有不少的標準和組件,但種類繁多,環境千差萬別,應用特殊化的地方非常之多。所以在嵌入式場合無論成熟的產品和組件一般只能夠滿足客戶的80%的要求。余下20%的要求是需要產品提供方和客戶共同來努力解決的特化的部分。當然,每個行業都有自己的特點,如果能夠為某個行業提供完整的特殊化解決方案,那么在同行業中特化的部分也就不會再有這么高的比例。
這些特殊化工作比較多,下面列舉一兩個:
針對不同平臺和環境的移植。雖然大部分操作系統都聲稱支持標準的POSIX接口,但實際上要在上面高效運行實時的嵌入式數據庫還是比較困難的。有的實時性非常高的操作可能還需要直接調用CPU的處理指令。所以最好在客戶使用嵌入式數據庫之前,將數據庫移植到客戶的環境中去。對于那些部分支持,或者不支持POSIX標準的操作系統就只能做移植了。
在客戶平臺上做出性能測試報告和優化。嵌入式場合很多應用是非??量痰模员仨毐U锨度胧綌祿煸诳蛻舻钠脚_上能夠達到客戶要求的性能指標。最佳的評價方就是嵌入式數據庫的提供方在客戶平臺上做的性能測試報告,并在必要的地方對數據處理方式進行優化。
根據應用的要求實現個性化的功能。既然數據統一由數據庫引擎進行管理,那么許多特殊的功能在這一層實現是最佳的選擇。所以,嵌入式數據庫進入一個新的行業以后,都會產生一些新的應用構件。這些構件直接和引擎打交道,同時對用戶層留有接口。
這種差異化也導致了嵌入式數據庫的技術支持變得比較重要,廠家一般都會提供有償或無償的技術支持。
4.嵌入式數據庫的分類
嵌入式數據庫的分類方法很多,可以按照嵌入的對象不同分為:軟件嵌入數據庫、設備嵌入數據庫、內存數據庫。也有人將它們粗略的分為:嵌入數據庫、移動數據庫、小型的C/S結構數據庫等。筆者更偏向于按照下面的方式進行劃分:
小型C/S數據庫。這種數據庫其實是企業級數據庫的一個縮小版,縮小以后可以在一些實時性要求不高的設備內運行。它只和操作系統有關,一般只能支持一些常見的移動操作系統,如,Linux和Windows CE系列。
面向軟件嵌入數據庫。它將數據庫作為組件嵌入到其他的軟件系統中。一般用在對數據庫的安全性、穩定性和速度要求比較高的系統中。這種結構資源消耗低,最終用戶不用維護數據庫,甚至感受不到數據的存在。
面向設備嵌入數據庫。它將關系型數據庫嵌入到設備當中去,作為設備數據處理的核心組件。這種場合要求數據庫有很高的實時性和穩定性,一般運行在實時性非常高的操作系統當中。為了達到這些要求有的廠商采用關系型的數據結構,有的采用非關系型的數據結構。有時候甚至直接和硬件打交道。當然,這種結構在實時性要求不高的移動場合更能夠勝任。
內存數據庫。數據庫直接在內存內運行,數據處理更加高速,不過安全性等方面需要額外的手段來保障。
當然,相同類型的嵌入式數據庫肯定會有很多不同的版本。如,Empress具有上述所有種類的嵌入式數據庫,且每種都有很多版本,就在一年前剛剛針對日本市場比較特殊的操作系統iTRON開發了一個專用的嵌入式數據庫版本。
5.嵌入式數據庫的構件
嵌入式數據庫包含的構件很多,不過大部分嵌入式數據庫包含的構件差別是不大的,以Empress嵌入式數據庫為例包括以下一些構件。
用戶接口級構件。這些構件主要是方便用戶對數據庫進行操作和訪問。如,標準的C語言應用程序接口(C KERNEL API);標準的SQL語句(EMBEDDED SQL);JDBC/ODBC接口;數據流處理(Data Streaming)、網絡處理(Embedded Network API)以及數據恢復處理(Data Recovery API)等。
應用級構件。該部分的構件包括一些主要應用所必需的構件,當然隨著應用的不同,構件也是可以裁剪和添加的。
引擎級構件。主要包含事務處理(Transaction)、索引(Index)、多進程/多任務(Multi Proc/Task Access)、可配置數據庫內核(Configurable Database Kernel)、斷電恢復管理(Power Down Recover

提交
中國聯通首個量子通信產品“量子密信”亮相!
國家重大裝備企業齊聚高交會 中國科技第一展11月深圳舉行
東土精彩亮相華南工博會,展現未來工業前沿技術
ATMS邀請函 | 以智馭新,協作創造汽車行業新質生產力
直播定檔!見證西門子與中科摩通聯手打造汽車電子智能制造新范式