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