SQLite数据库简述
1.1. 介绍
节选并翻译自官网介绍:
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。其代码完全开源,可供个人或商业完全免费使用。
SQLite是一个嵌入式的SQL数据库引擎。与大部分SQL服务器不同,SQLite不存在单独的服务端进程,所有读写都是直接操作磁盘上的一个db文件;SQLite保存的数据库文件可跨平台使用——无论是32位/64位系统,还是大端/小端架构;
SQLite并不是为了替代Oracle而生,而是为了替代fopen()而生;
SQLite非常轻量,完整功能的库文件可以在某些编译情况下做到600Kib以下。而运行时的内存占用,与执行效率是不可调和的两面,给的内存越多,执行效率越高。尽管如此,在低内存设备上也有良好的表现。SQLite在使用得当的情况下,可以做到比Direct I/O更快;
1.2. 特点
SQLite的主要特性有如下几点:
-
ACID*事务。
-
零配置–无需安装和管理配置。
-
支持大多数SQL92标准,比如:ATTACH DATABASE,BEGIN TRANSACTION,COMMENT等等,同时它还支持事务处理功能。
-
单个数据库的所有信息储存在单一磁盘文件中。适用于作为应用程序文件的存储格式。
-
支持数据库大小扩展至2TB。
-
源码代码量小, 大致13万行C代码, 4.43M。
-
简单易用的API。
-
用ANSI-C编写,同时加入TCL**绑定。可通过Wrapper支持其他语言的绑定。
-
良好注释的源代码, 并且有着90%以上的测试覆盖率。
-
可作为单独头文件包,编译简单,易于添加到大型项目中。
-
独立: 没有额外依赖.
-
支持多平台多开发语言:UNIX(Linux, Mac OS-X, Android, IOS), Windows(Win32, WinCE, WinRT), C, PHP, Perl, Java, C#,Python, Ruby.
-
源码完全的开源, 你可以用于任何用途, 包括出售它.
-
命令行接口,可通过命令行来管理数据库.
* ACID - 原子性(Atomicity,或称不可分割性)、一致性(Consistency)、隔离性(Isolation,又称独立性)、持久性(Durability)
** TCL - Tool Command Language,一种有编程特征的解释语言;
1.3. 架构
下图是基于官网架构示意图进行的改进版:
整体来说,应用通过SQLite提供的Interface接口,对数据库进行CRUD操作,其经历流程如上图箭头所示;
具体来看,每个模块的分工如下:
- Core 即核心模块,负责整个数据库流程正常运行;
- SQL Compiler 即编译器模块,Core中的SQL Command Processor步骤展开即为该模块进行处理;
- Backend 即后端模块,与Core模块中的Virtual Machine对接,负责数据结构化、分页、调用对应系统调用进行持久化存储等;
- Accessories 即附加模块,主要包括一些调试工具以及测试代码,本身不参与整个CRUD操作流程;
以上是基于官网,以及自己的认知对SQLite的一个简介,后续会更新不同日志模式下的流程浅析;