一、什么是 SQLite?
SQLite 是一个遵守 ACID(即原子性、一致性、持久性、隔离性)的关系数据库管理系统。与许多其他数据库管理系统不同,SQLite 不是一个 C/S 结构的数据库引擎,而是被集成在用户程序中。
应用程序经由编程语言内的直接 API 调用来使用 SQLite 的功能,减少数据库访问上的延迟,因为,在一个单一进程中的函数调用比跨进程通信更有效率。
SQLite 采用在写入数据时将整个数据库文件加锁的简单设计,尽管写操作只能串行进行,但 SQLite 的读操作可以多任务同时进行。
SQLite 不进行类型检查,可以把字符串插入到整数列中。
SQLite 的 ALTER TABLE 功能有所限制,只能添加和重命名列,不能修改或删除列。
1. SQLite 的主要优点如下:
零配置,无需安装和配置;
储存在单一磁盘文件中的一个完整的数据库;
数据库文件可以在不同字节顺序的机器间自由共享;
支持数据库大小至 2TB;
足够小,全部源代码约 3 万行 C 代码,250KB;
比目前流行的大多数数据库对数据的操作要快;
开源。
二、SQLite 的设计
SQLite 数据库采用模块化设计,由 8 个独立的模块构成。这些模块被分成两个部分,分别为前端解析系统和后端引擎。
前端解析系统负责将处理前端预处理应用程序传递过来的 SQL 语句和 SQLite 命令,对获取的编码分析,优化,并转换为后端能够执行的 SQLite 内部字节编码。
1. SQLite 前端解析系统
前端解析系统可分为 3 个模块:
1. 词法分析器(Tokenizer)
2. 语法分析器(Parser)
3. 代码生成器(Code Generator)
2. SQLite 后端引擎
后端是用来解释字节编码程序的引擎,该引擎做的才是真正的数据库处理工作。它主要由 3 个模块组成:
1. 虚拟机(VM)
VM 模块是一个内部字节编码语言的解释器,它通过执行字节编码来实现 SQL 语句的工作。它是数据库中数据的最终操作者。
2. B/B+树
3. 页面调度程序(pager)