首先,什么是嵌入式數據庫?簡單地說,它是一個與應用程序編譯和鏈接的數據庫系統,也就是說,它“嵌入”在應用程序中。它不同于客戶機/服務器數據庫系統,在客戶機/服務器數據庫系統中,客戶機和服務器在它們自己的地址空間中運行,并且通常在完全不同的計算機硬件系統中運行。嵌入式數據庫運行在與使用它的應用程序相同的地址空間中。
嵌入式數據庫出現在70年代末/80年代初。那些頭發有些灰白(或沒有)的人應該記得dBase(1978)、Empress(1979)、Btrieve(1982)、c-tree(1984)、SQLBase(1984)和db_VISTA(1984)。
在70年代末和80年代初,嵌入式系統是8位和16位系統,對于數據庫管理系統等復雜軟件,甚至是相對“簡單”的嵌入式數據庫系統(相對于Oracle、SQLServer等客戶端/服務器巨頭),都沒有足夠的可尋址內存。
直到90年代后期,嵌入式系統才開始使用32位處理器,為嵌入式數據庫系統提供足夠的內存。
但上述所有嵌入式數據庫都是在此之前編寫的。它們旨在用于在Windows和各種風格的Unix(有人記得SCO Unix嗎?)和DEC VAX上運行的業務線應用程序。你問,什么是所謂的業務線應用程序?它是庫存、工資、應收賬款/應付賬款等應用程序。簡而言之,它是企業用于運行日常運營的任何應用程序。
隨著嵌入式系統進入32位領域,這些平臺能夠承載更復雜的系統。更多的復雜性通常伴隨著要管理的更多數據和更多樣的數據。這就叫“我需要一個數據庫系統!”那么,你是一個90年代的嵌入式系統軟件工程師,你是做什么的?你使用一個現有的嵌入式數據庫,并試圖將其硬塞進你的嵌入式系統。
這就是問題開始的地方。嵌入式系統,即使是32位系統,也不像筆記本電腦、臺式機、工作站或服務器系統。這些通常是x86系統,具有大量內存、大磁盤和快速多核處理器。嵌入式系統通常沒有多余的內存,可能根本沒有任何持久存儲,處理器的速度剛剛夠完成工作。該處理器可能是ARM、MIPS、PowerPC或x86。此外,它可能沒有運行Windows,也可能沒有運行Linux。它可以運行嵌入式/實時操作系統,如embOS、VxWorks、INTEGRITY、QNX、FreeRTOS或許多其他操作系統。
因此,作為一名需要數據庫系統的嵌入式系統軟件工程師,你的第一份工作是找到一個你可以獲得源代碼的系統,并將其移植到你選擇的處理器、操作系統和工具鏈上。然后,因為你已經有了一個資源受限的系統,開始去掉你不需要的東西,減少代碼大小以適應你的系統。例如,也許你的設備只需要讀取預加載的數據庫,而不需要寫入它。因此,你不需要插入、更新和刪除記錄的所有代碼,以及隨之而來的所有負擔,如并發控制和ACID事務。
在幾次面臨這種困境后,我們意識到需要一個首先考慮嵌入式系統的數據庫系統,一個不需要徹底手術來適應各種資源受限的嵌入式系統及其各種處理器、操作系統和工具鏈的數據庫系統。
所以,我們來談談業務線嵌入式數據庫系統和嵌入式系統的嵌入式數據庫系統之間的區別。
面向嵌入式系統的嵌入式數據庫不需要浪費寶貴的資源,比如CPU時鐘周期和內存。它需要消除或至少最小化對C運行時庫的依賴,并最小化、消除或隔離對操作系統的依賴。
總之,當你為嵌入式和/或實時系統尋找合適的嵌入式數據庫系統時,請確保你考慮的候選系統至少能夠聲稱是在考慮嵌入式系統的情況下開發的。最終,你選擇的嵌入式數據庫解決方案將能夠勝任任務。