跳至內容

SQLite

輕之舟百科,讓知識輕裝啟航
云云​(留言 | 貢獻)2026年7月22日 (三) 04:03的修訂

SQLite是一個嵌入式關係數據庫引擎,以自包含(self-contained)、無伺服器(serverless)、零配置(zero-configuration)及事務性(transactional)為設計特徵。[1] 由美國開發者D. Richard Hipp於2000年創建,其原始碼處於公有領域,可自由用於任何目的。[2] 整個資料庫存儲於單個跨平台磁碟文件中,應用程式通過連結SQLite庫直接讀寫該文件,無需獨立的伺服器進程或管理配置。[1] 據官方估計,全球活躍的SQLite資料庫數量超過一萬億個,使其成為歷史上部署最廣泛的資料庫引擎。[3]

歷史

SQLite誕生於2000年春季,創始人D. Richard Hipp當時受僱於General Dynamics,為美國海軍導彈驅逐艦項目開發軟體。[4] 項目最初使用HP-UX系統與IBM Informix資料庫,但資料庫伺服器頻繁故障導致應用程式崩潰,促使Hipp思考"為什麼我們需要一個伺服器?"[3] 這一疑問催生了SQLite的設計理念:一個無需安裝、無需管理、直接嵌入應用程式的資料庫引擎。

2000年8月,SQLite 1.0正式發布,最初基於GNU Database Manager(gdbm)構建。[5] 隨後SQLite 2.0以自定義B樹實現替代gdbm,並加入事務支持。2004年6月,SQLite 3.0.2 beta發布,引入了動態類型系統、UTF-8/UTF-16支持及更靈活的資料庫模式,奠定了現代SQLite的架構基礎。[5]

2006年,SQLite被納入Android作業系統;2007年,被納入Apple iOS。[6] 此後,SQLite迅速滲透至各類計算平台。2011年,Hipp宣布計劃為SQLite添加UNQL接口,並開發文檔型資料庫UNQLite。[5]

SQLite的原始碼由Hipp及其小型團隊通過Fossil分布式版本控制系統維護,不接受外部貢獻,以確保代碼完全處於公有領域。[2] Hipp將SQLite測試至航空軟體標準,實現了100%分支覆蓋率,此後Android等平台的bug報告顯著減少。[3]

技術特性

無伺服器架構

與傳統客戶端/伺服器資料庫不同,SQLite沒有獨立的伺服器進程。[7] 應用程式通過函數調用直接與資料庫文件交互,在同一進程內完成數據讀寫,避免了進程間通信的開銷。[1] 任何能夠訪問磁碟的程序均可使用SQLite資料庫,無需安裝、配置或啟動服務。

零配置

SQLite無需安裝程序、配置文件或管理權限。不存在需要創建的資料庫實例,也無需分配用戶訪問權限或進行恢復操作。[1] 系統崩潰或斷電後無需人工干預即可自動恢復。這一特性使其特別適合嵌入式系統、移動應用及需要簡化部署流程的場景。

單文件存儲

完整的SQLite資料庫——包括表、索引、觸發器、視圖及數據本身——存儲於單個跨平台磁碟文件中。[8] 該文件格式可在32位與64位系統之間、大端序與小端序架構之間自由複製。資料庫文件大小僅受限於底層文件系統,理論上限約140TB。[8]

事務與並發

SQLite支持完全兼容ACID(原子性、一致性、隔離性、持久性)的事務,即使在系統崩潰或斷電後也能保證數據完整性。[1] 其採用資料庫級鎖定機制,在事務開始時鎖定整個資料庫文件。在嵌入式資料庫中,SQLite是唯一允許多個應用程式同時訪問同一資料庫的實現。[7]

體積與性能

SQLite核心庫體積小巧,完整配置下不足400KiB,省略可選功能後可降至250KiB以下。[1] 引擎以ANSI-C編寫,不依賴外部庫,可直接編譯為單一源文件嵌入其他項目。[8] 儘管體積極小,SQLite實現了SQL92標準的大部分功能,包括子查詢、事務、觸發器及視圖等。

應用領域

SQLite的部署範圍極為廣泛。它內置於Android、iOS、macOS、Windows 10及主流Linux發行版中,亦是Chrome、Firefox、Safari等瀏覽器的組成部分。[8] 此外,Skype、iTunes、Dropbox、TurboTax、QuickBooks及Adobe Photoshop Lightroom等應用均採用SQLite作為本地數據存儲方案。[6] 在編程語言層面,PHP、Python及Tcl/Tk的標準庫均包含SQLite綁定。

在嵌入式與物聯網領域,SQLite被用於汽車多媒體系統、機頂盒、智能電視及航空電子系統(如Airbus A350)。[3] 其作為應用文件格式的角色亦日益重要,例如OGC GeoPackage地理數據格式即基於SQLite構建,質譜數據格式mzDB亦採用其作為基礎。[8]

與客戶端/伺服器資料庫的比較

SQLite與MySQL、PostgreSQL、Oracle等客戶端/伺服器資料庫的設計目標不同。後者旨在實現企業級數據的共享存儲,支持高並發、多用戶及複雜查詢優化;SQLite則專注於為單個應用程式提供本地數據存儲,強調零管理開銷與嵌入式部署。[8]

在客戶端/伺服器架構中,獨立的伺服器進程可提供更強的內存隔離與更精細的並發控制;SQLite的無伺服器設計則消除了安裝、配置與維護伺服器的負擔,但在高寫入並發場景下性能受限。[7] 因此,SQLite適用於移動應用、桌面軟體、嵌入式設備及中小型網站,而傳統客戶端/伺服器資料庫更適合高並發Web服務、數據倉庫及企業級應用。

參考文獻