# Inside SQLite ## 1. Overview - 支持事务 - 有限的事务并发 - 多个读事务 - 一个排他写事务 - 线程安全 - 单文件 - 支持SQL92的一个大子集 - 不支持 - foreign key - 大部分alter table - trigger - right & full outer join - 更新view - grant & revoke ### 1.2 SQLite Architecture - front-end - `sql -> tokenizer -> parser -> code-generator -> bytecode` - `code-generator` - 遍历parse-tree, 生成等价的bytecode - `sqlite3_prepare`函数实现了frontend - back-end - `bytecode -> virtual-machine -> b+tree -> pager -> os-interface -> posix-library` - `pager` - 缓存 - 页管理/文件系统 - 文件锁/事务日志 ## 1.3 SQLite Limitations - nfs问题 - sqlite使用系统文件锁控制事务并发, 网络文件系统出现网络分区时会出问题(nfs的文件锁实现有问题) - 数据库最大2T字节(2^41) - 100多万页时,内存开销会影响服务(pagesize=1024字节) - 每页在内存中有一个bit - 表/索引最大有2^64-1个元素 - 单条记录最大2^30字节 ## 2. Database File Format ## 3. Page Cache Management ## 4. Transaction Management ## 5. Table and Index Management ## 6. SQLite Engine ## 7. Furhter Information