读完本系列主线后,选型前需要一张机制对照表:同一问题(缓存、耐久、旧版本、故障)在四条工程路径上如何回答。口径与 第 08 篇 第七节一致——机制与代价,不是延迟排名;本站无跨引擎一手 benchmark。
本文是「WiredTiger 内核」系列第 16 篇(共 17 篇)。→ 系列目录
先修:第 1、8、9–10 篇;可选 mvcc、InnoDB Undo、postgresql-kernel、rocksdb。续读:第 17 篇选型。
一、总表
| 维度 | PostgreSQL | InnoDB | RocksDB | WiredTiger(MongoDB) |
|---|---|---|---|---|
| 默认优化 | 服务器 SQL 行存 | 服务器 SQL 聚簇行存 | 嵌入 LSM KV | 文档库嵌入 B-Tree + HS |
| 缓存 | Buffer pool(页格式近磁盘) | Buffer pool | Block cache + MemTable | Cache:内存页 ≠ 磁盘页 |
| 脏页写出 | 检查点等 | 刷脏 / checkpoint 类 | Flush / compaction | Evict/Checkpoint 前 reconcile |
| WAL | WAL + redo | Redo (+ undo 旁路) | WAL + Manifest | Journal + checkpoint;RTS 收时间戳表 |
| MVCC 落点 | 堆内多版本 | Undo 旁路 | 常靠上层 ts 编码 / 快照 | 用户表最新 + History Store |
| 旧版本回收 | VACUUM | Purge | Compaction / TTL 等 | HS tombstone + oldest/窗口 |
| 典型故障形态 | 表膨胀、长事务 | Undo history 过长 | 写停顿、L0 堆积 | HS 膨胀、dirty eviction 尖刺 |
学术词汇仍统一到 Berenson et al., SIGMOD 1995;物理落点分叉见第 1、8 篇谱系。
二、分项说明
2.1 缓存与脏页
WT 显式区分 in-memory 与 on-disk(第 3、6 篇);dirty 离开 cache 的成本绑在 reconcile + 可能的 HS 写入上。PG/InnoDB 更接近「池中页 ≈ 磁盘页 + 少量修饰」。RocksDB 前台写走 MemTable,持久化形态是 SST,与页式 reconcile 不是同一物种。
2.2 耐久
四者都有「检查点/版本编辑 + 日志」思想。WT:checkpoint 钉一致点,journal 盖间隙,RTS 处理时间戳不稳定侧(第 9–11 篇)。RocksDB:WAL + VersionSet/MANIFEST。不要把运维口令(如「checkpoint 间隔」)跨引擎照搬数值。
2.3 MVCC
| 落点 | 代表 | 主表上 | 旧版 |
|---|---|---|---|
| 堆内 | PG | 新旧元组 | 同表 + VACUUM |
| Undo | InnoDB | 当前行 | Undo |
| History | WT | 最新已提交 | WiredTigerHS.wt |
| LSM+上层 | RocksDB/TiKV 等 | SST 中多版本键 | Compaction 回收 |
第 08 篇已论证:无工作负载的普适赢家;文档整值进 HS 时空间模型与「改一个字段」直觉不对齐。
2.4 故障与排障入口
- PG:膨胀与真空 → postgresql-kernel
- InnoDB:undo / history list → mysql-innodb
- RocksDB:stall / L0 → rocksdb
- WT:HS / dirty eviction / 长游标 → 第 15 篇
三、开放对照问题(不关闭)
- HS 与 undo 在「小字段高频更新」下的空间曲线——需同负载实测。
- LSM 与 B-Tree+HS 在写突发 + 点查混合下的尾延迟——本站未测,见 rocksdb 第 1 篇 开放问题口径。
四、收束
对照表用于排除错误类比(「HS 就是 undo」「cacheSize 等于 shared_buffers」),不是选分排名。下一篇给出何时选 MongoDB/WT 的决策树并回收系列开放问题。
参考资料
- Berenson et al., SIGMOD 1995
- 本系列第 1、3–4、8–11 篇;第 08 篇对照节
- postgresql-kernel、mysql-innodb、rocksdb、mvcc
- 系列索引
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【SQLite 内核】与 PG / InnoDB 机制对照:进程、WAL、锁、缓冲池
用进程模型、日志、锁与缓冲池四轴对照 SQLite 与 PostgreSQL / InnoDB:说明嵌入式单文件如何删掉服务器层,以及同名 WAL、隔离、缓存概念为何不能平移运维经验;不写跨库吞吐排名。
数据库内核实验索引
汇总本站数据库内核文章:PostgreSQL / MySQL InnoDB / 列存、湖仓、流处理、查询引擎、RocksDB、向量、Redis、全文检索、TiKV/HTAP、FoundationDB、SQLite 与 WiredTiger 内核,以及 LSM-Tree 实验与其它单篇。
【WiredTiger 内核】选型与阅读地图:何时 MongoDB / WiredTiger
给出相对 PG/InnoDB/SQLite/RocksDB 的选型决策树,回收 History Store 与 cache 公平性等开放问题,并收束 WiredTiger 内核 17 篇阅读地图。
【WiredTiger 内核】文档库存储引擎全景:MongoDB 默认引擎的生态位
定位文档库默认引擎 WiredTiger 相对 PG/InnoDB/SQLite/RocksDB 的生态位;钉住 Session→Cache→Reconcile→HS→Checkpoint 主线、站内分工与 17 篇阅读路线,并以 Berenson 隔离词汇与 Durable History 为学术/工程锚点。