章节摘要:本章回答一个根本问题:把整个数据库引擎塞进应用进程里,意味着什么。我们从 SQLite、MySQL、PostgreSQL 三种架构立场讲起——进程内组件、独立服务、多进程集群——沿着五层内核逐层对照它们的分工差异,追踪一次 SELECT 在进程内与跨网络两种旅程中的完整路径,最后打开 SQLite 的数据库文件,逐段解读开头那 100 字节文件头和 4096 字节的页。读完本章,你会拥有一张"三库对照"的心智底图,后面七章的机制差异都能挂在这张图上。
读完本章,你应当能够:
一句金句:SQLite 不是缩小版的 MySQL,而是把"数据库"这个概念删到不能再删之后剩下的东西——理解它,最快的办法是始终拿另外两个引擎当参照物。
1.1 三种引擎的定位对照:从部署形态、进程模型、典型负载三个维度给三个引擎画像,给出"什么时候别用 SQLite"的判断清单。这是全册对照主线的起点。
1.2 五层内核对照:SQLite 自顶向下的五层结构,与 MySQL Server 加存储引擎的插件式分层、PostgreSQL 单体后端进程逐层对齐,看清"哪一层在哪个引擎里最薄、为什么"。
1.3 一次 SELECT 的两种旅程:同一条 SELECT name FROM users WHERE id = 42,在 SQLite 里是一次函数调用加内存寻址,在 MySQL 里是一次网络往返加服务器内部四站接力。旅程图会标出每一站的延迟量级。
1.4 数据库文件解剖:把一个真实的 SQLite 文件用十六进制打开,逐段解读 100 字节文件头;解释为什么页大小默认 4096 字节、为什么这个数字在创建之后就难以更改。
本章四节是"由外向内"的钻取:1.1 立在系统架构的外部视角,回答"引擎在哪";1.2 进入进程内部,回答"引擎由什么组成";1.3 让一条查询穿过整个引擎,把静态的分层变成动态的旅程;1.4 沉到磁盘上,回答"数据长什么样"。前三节建立的空间感——进程内、五层、一条查询路径——在 1.4 落到具体的字节上。四节合起来构成一张底图:
外部视角 进程内部 磁盘视角 ┌─────────┐ ┌──────────────┐ ┌──────────────┐ │ 1.1 引擎 │ │ 1.2 五层结构 │ │ 1.4 文件头 │ │ 在哪里 │──▶│ 1.3 查询旅程 │──▶│ 100B + 4096B │ │ 部署形态 │ │ 动态执行路径 │ │ 页的物理形态 │ └─────────┘ └──────────────┘ └──────────────┘ 底图 → 第2章顺着页继续往下钻
前置:基本 SQL 语法(能读懂 SELECT 与 WHERE);知道进程、线程、函数库是什么。不需要任何数据库内核基础。
后续延伸:1.4 讲到的"页"是第 2 章的绝对主角——页内单元格怎么排布、B+ 树怎么在页之间组织、4096 字节怎么被切分复用,都从那里展开。1.3 出现的 VDBE 字节码是第 3 章的引子。1.1 提到的"单写者"限制,第 4 章会用 WAL 模式给出部分解法。带着问题往下读:SQLite 的每一层为什么这么薄?