自幾十年前出現的商務應用程式以來,資料庫就成為軟體應用程式的主要組成部分。正與資料庫管理系統非常關鍵一樣,它們也變得非常龐大,並佔用了相當多的系統資源,增加了管理的複雜性。隨著軟體應用程式逐漸模組模組化,一種新型資料庫會比大型複雜的傳統資料庫管理系統更適應。嵌入式資料庫直接在應用程式進程中運行,提供了零配置(zero-configuration)運行模式,並且資源佔用非常少。本文將介紹流行的 SQLite 資料庫引擎,並描述如何在應用程式開發中使用它。
SQLite 是 D. Richard Hipp 用 C 語言編寫的開源嵌入式資料庫引擎。它是完全獨立的,不具有外部依賴性。SQLite 支援多數 SQL92 標準,可以在所有主要的作業系統上運行,並且支援大多數電腦語言。SQLite 還非常健壯。其建立者保守地估計 SQLite 可以處理每天負擔多達 100,00 次點擊率的 Web 網站,並且 SQLite 有時候可以處理 10 倍於上述數位負載。
SQLite是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能夠支援Windows/Linux/Unix等等主流的作業系統,同時能夠跟很多程式語言相結合,比如Tcl、PHP、Java等,還有ODBC介面,同樣比起Mysql、PostgreSQL這兩款開源世界著名的資料庫管理系統來講,它的處理速度比他們都快。
SQLite雖然很小巧,但是支援的SQL語句不會遜色於其他開來源資料庫,它支援的SQL包括:
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
同時它還支援交易處理功能等等。也有人說它象Microsoft的Access,有時候真的覺得有點象,但是事實上它們區別很大。比如SQLite 支援跨平台,操作簡單,能夠使用很多語言直接建立資料庫,而不象Access一樣需要Office的支援。如果你是個很小型的應用,或者你想做嵌入式開發,沒有合適的資料庫系統,那麼現在你可以考慮使用SQLite。
SQLite 內部結構
在內部,SQLite 由以下幾個組件組成:SQL 編譯器、核心、後端以及附件。SQLite 通過利用虛擬機器和虛擬資料庫引擎(VDBE),使調試、修改和擴充 SQLite 的核心變得更加方便。所有 SQL 陳述式都被編譯成易讀的、可以在 SQLite 虛擬機器中執行的程式集。
SQLite 支援大小高達 2 TB 的資料庫,每個資料庫完全儲存在單個磁碟檔案中。這些磁碟檔案可以在不同位元組順序的電腦之間移動。這些資料以 B+樹(B+tree)資料結構的形式儲存在磁碟上。SQLite 根據該檔案系統獲得其資料庫許可權。
SQLite 資料類型
SQLite 不支援待用資料類型,而是使用列關係。這意味著它的資料類型不具有表列屬性,而具有資料本身的屬性。當某個值插入資料庫時,SQLite 將檢查它的類型。如果該類型與關聯的列不匹配,則 SQLite 會嘗試將該值轉換成列類型。如果不能轉換,則該值將作為其本身具有的類型儲存。
SQLite 支援 NULL、INTEGER、REAL、TEXT 和 BLOB 資料類型。
由於資源佔用少、效能良好和零管理成本,嵌入式資料庫有了它的用武之地,它將為那些以前無法提供用作持久資料的後端的資料庫的應用程式提供了高效的效能。現在,沒有必要使用文字檔來實現持久儲存。SQLite 之類的嵌入式資料庫的便於使用性可以加快應用程式的開發,並使得小型應用程式能夠完全支援複雜的 SQL。這一點對於對於小型裝置空間的應用程式來說尤其重要。
嵌入式資料庫對於加快應用程式開發也很重要,尤其是在用於資料庫抽象層(例如 PEAR::DB 或 ezSQL)時。最後,SQLite 正在積極開發中,未來一定會有新的功能,會對開源社區更有用。