SQLite主要由
7个构件子系统(也就是模块)组成,这些模块被分割为两个部分:前端解析系统和后端引擎。在下图给出了各个构件子系统和它们是怎样相互关联的框图
前端:
前端预处理应用程序传递过来的SQL语句和SQLite命令。对获取的编码分析,优化,并转换为后端能够执行的SQLite内部字节编码。前端可分为三个模块:
标示分析(Tokenizer)
将输入的SQL语句分成标识符;
语法分析(Parser)
解析器分析通过标识器产生的标识分析语句的结构,并且得到一棵语法树。解析器同时也包含了重构语法树的优化器,因此能够找到一棵产生一个高效的字节编码程序的语法树。
代码生成器(Code Generator)
代码生成器遍历语法树,并且生成一个等价的字节编码程序
前端实现了
sqlite3_prepare API函数。
后端
后端是用来解释字节编码程序的引擎。该引擎做的才是真正的数据库处理工作。后端部分由四个模块组成:
虚拟机(
VM)
VM模块是一个内部字节编码语言的解释器。它通过执行字节编码语句来实现
SQL语句的工作。它是数据库中数据的最终的操作者。它把数据库看成表和索引的集合,而表和索引则是一系列的元组或者记录。
B/B+-树
B/B+树模块把每一个元组集组织进一个依次排好序的树状数据结构中,表和索引被分别置于单独的
B+和B树中。该模块帮助VM进行搜索,插入和删除树中的元组。它也帮助VM创建新的树和删除旧的树
页面调度程序(
pager)
页面调度程序模块在原始文件的上层实现了一个面向页面的数据库文件抽象。它管理
B/B+树使用的内存内缓存(数据库页的),另外,他也管理文件的锁定,并用日志来实现事务的ACID属性。
操作系统交界面(
system interface)
操作系统交界面模块提供了对应于不同本地操作系统的统一的交界面
后端实现了
slqite3_bind_*,sqlite3_step,sqlite3_column_*,sqlite3_reset和sqlite3_finalize API函数。