B+树与 WAL · storage engine essentials
数据库"亿级数据秒查 + 断电不丢"听起来像魔法,其实是两个数据结构的功劳。
这两个加起来,就是存储引擎的骨架。SQLite、Postgres、MySQL 的 InnoDB,底层都是这套。不是魔法,是 B+树 + WAL。
下面是一棵阶数=3(每节点最多 3 个 key)的 B+树。点"插入下一个",看节点满了怎么分裂成两个。
WAL 的规则简单到一句话:改数据前,先把这次改动写进日志并落盘。
关键在第 2 步的"先落盘"——日志落盘了,即使数据页没落盘,重放日志也能补回。如果日志没落盘就崩了,那这次改动本来就丢了,但不会出现"日志说改了、数据没改"的不一致。这就是 ACID 里 D(持久性)的保证。