概述
SQLite 是一個用 C 語言編寫的庫,它成功打造出了一款小型、快速、獨立、具備高可靠性且功能完備的 SQL 數據庫引擎。本文檔將為您簡要介紹其架構、關鍵組件及其協同運作模式。
SQLite 顯著特點之一是無服務器架構。不同于常規數據庫,它并非以單獨進程運行,而是將整個數據庫引擎直接嵌入應用程序中。數據庫存儲于單個跨平臺文件內,SQLite 借助定義清晰的 API 直接對該存儲文件進行訪問,這種獨特方式極大提升了其靈活性與便捷性。
從架構層面來看,SQLite 采用模塊化、分層的設計思路。如此設計實現了從高級 SQL 接口到低級存儲之間關注點的清晰分離。若您想深入了解特定組件,諸如核心架構、查詢處理和 VDBE、存儲引擎或接口等方面的詳細信息,可查閱相應頁面。在核心架構里,各模塊各司其職又緊密協作,為 SQLite 高效穩定地運行奠定基礎。
有關特定組件的詳細信息,請參閱核心架構、查詢處理和 VDBE、存儲引擎或接口頁面。
1、核心架構
SQLite 采用模塊化、分層架構設計,可以從高級 SQL 接口到低級存儲清晰地分離關注點。
該架構由三個主要層組成:
- 前端:處理 SQL 解析、查詢規劃和優化
- 執行引擎:執行字節碼程序的虛擬數據庫引擎(VDBE)
- 存儲引擎:使用 B樹、分頁和文件系統抽象管理數據存儲
** 查詢處理管道 **
** 處理 SQL 查詢時 **:
- 解析器sqlite3.c將parse.ySQL 文本轉換為抽象語法樹 (AST)
- 查詢規劃器(select.c,where.c)分析查詢并確定最佳執行策略
- WHERE 子句優化器(where.c)識別最佳索引和訪問路徑
- 代碼生成器生成 VDBE 字節碼指令
- VDBE(vdbe.c,vdbeaux.c)執行這些指令來產生結果
WHERE 子句處理
WHERE 子句優化器是查詢性能的關鍵組件。它:
- 分析 WHERE 子句中的謂詞
- 識別可用索引
- 確定多表查詢的最佳連接順序
- 創建最小化成本的執行計劃(就磁盤 I/O 和 CPU 而言)
2、虛擬數據庫引擎 (VDBE)
VDBE 是 SQLite 的虛擬機,它執行字節碼指令來處理查詢。它是高級 SQL 和低級存儲引擎之間的橋梁。
VDBE 的主要特性:
- 基于堆棧的虛擬機架構
- 對 SQL 編譯器生成的操作碼程序進行操作
- 管理交易控制
- 實現 SQL 函數和運算符
- 與 B 樹交互以進行數據訪問
3、存儲引擎
SQLite 的存儲引擎基于 B 樹,帶有管理磁盤 I/O 和事務控制的分頁模塊。
關鍵存儲組件:
B樹:實現表和索引數據結構
Pager:管理頁面加載、緩存和寫入
日志/WAL:通過預寫日志提供事務持久性
VFS:虛擬文件系統抽象,允許 SQLite 跨不同的操作系統工作
擴展機制
SQLite 通過多種機制支持擴展:
虛擬表:允許外部數據源以 SQLite 表的形式出現
用戶定義函數:用 C 編寫的自定義 SQL 函數
排序序列:自定義字符串比較函數
內置擴展:FTS5、JSON1、R-Tree 等