sqlite是嵌入式数据库,没有独立运行的进程,与所服务的应用程序在应用程序进程空间内共生共存,作为托管的一部分。
从外部观察,只有一个数据库引擎。
数据库服务器和客户端运行在同一进程中,不需要网络配置或管理,即不用担心防火墙或者地址解析,不用浪费时间管理复杂的授权和权限。
sqlite嵌入到主程序中,每个进程有独立的数据库服务器,但是可以操作同一数据库文件,因为sqlite利用OS完成数据的同步和加锁
编译器处理sql语句,语法分析器采用lemmon,其采用了特殊的预防措施防止内存泄露,并且性能较高。
代码生成器将语法书翻译成sqlite专用的汇编代码,最终交给虚拟机处理。
虚拟机(virtual database engine,VDBE):sqlite过程及产生VDBE,执行VDBE
后端
- B-Tree处理页,职责是排序。维护多个页之间错综复杂的关系
- Pager帮助B-tree管理页面,负责传输,从磁盘读入或写入,这里引用缓存避免频繁读写磁盘
- OS接口为sqlite其他模块提供屏蔽差异的抽象层,最终其他模块看到一个一致锁文件处理接口
sqlite特性
- 零配置 不需要DBA,只需要较少内存就可运行
- 移植性 不限软件,不限数据库
- 紧凑性 1个头文件、1个库、关系型不需要外部数据库的服务器 0.5MB
- 简单性 模块化,独立的
- 灵活性 关系型数据库前端和紧凑的B-tree后端
- 自由授权 源码在公共域中
- 可靠性
- 易用性 动态类型、冲突解决等
- 性能和限制
B-Tree在一般量下快速,但量大无优势,没有其他大型数据库优化方案;
并发和网络方面存在劣势