SQLite
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服務、數據倉庫及企業級應用。
參考文獻
- ↑ 1.0 1.1 1.2 1.3 1.4 1.5 Distinctive Features Of SQLite - sqlite.org
- ↑ 2.0 2.1 SQLite Source Repository - sqlite.org
- ↑ 3.0 3.1 3.2 3.3 The Programmers Who Gave Away Empires - Neomano
- ↑ SQLite, A Database for the Edge of the Network - Carnegie Mellon Database Group
- ↑ 5.0 5.1 5.2 SQLite - Overview - TutorialsPoint
- ↑ 6.0 6.1 The SQLite Database: The Ubiquitous Database that Few Understand - Hackers Arise
- ↑ 7.0 7.1 7.2 SQLite Is Serverless - sqlite.org
- ↑ 8.0 8.1 8.2 8.3 8.4 8.5 SQLite, Version 3 - Library of Congress