概述
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 等