第 06 卷 · 数据库、消息存储与查询执行
本卷的定位与入口
先修:起步只需基本数据与集合概念,SQL 从本卷的基本语句讲起。按学习路线,S3 先学 06.01–06.03、06.10 的查询与资源管理,再学 06.07 的事务语义并回到事务 API;S4 补齐树、文件、页与内存后深入存储、执行、锁与恢复,S5 学复制迁移。
本卷按起步、原理、工程和进阶分层;首次进入时按阶段学习路线选取当前需要的章节。
已完成的独立章稿
06.01 关系模型与业务身份已完成。它以虚构会话历史从表、行、列与类型起步,逐步讲用户、会话、成员、消息的主外键、约束和 NULL,再与文档嵌入/引用对照。06.02 SQL 从读写到复杂查询沿同一组四表数据学习读写、连接、聚合、排序与分页。06.03 模式设计与演进用改名与重入讲冗余、依赖和兼容迁移。06.10 Go 数据访问把 SQL 与文档查询接到 Go 驱动、扫描和资源生命周期。06.07 事务与并发异常再从成员退群与消息提交的交错讲事务与隔离。06.04 页与缓冲池在 S4 用同一会话序号的页与命中表建立索引前置。06.05 索引结构用历史游标与消息 ID 点查推导 B+ 树、复合键、哈希、覆盖索引与 LSM。06.06 查询执行与优化沿同一查询比较扫描、排序、连接、统计与计划证据。06.08 锁与 MVCC沿退群/发送交错解释版本、行锁、死锁与长事务。06.09 日志与崩溃恢复用 C0–C5 故障时间线讲 WAL、检查点与提交未知。06.11 复制、迁移与对账从副本延迟走到一致快照、增量回填和同水位对账。06.12 数据库业务案例将保存、重复请求、历史、热点和迁移合成 IM 评审。十二章各 8 节、22 道练习,当前本卷独立章稿均已完成。
IM 主线中的位置
以会话成员与消息记录学习关系/SQL 基础,再补文档模型与 MongoDB;对照实际存储时区分数据模型、确认与恢复边界。
主参照与源码入口见 OpenIM 阅读地图。各章区分公开项目事实与虚构教学规则,在具备先修后对照固定源码。
MongoDB 如何进入本卷
| 章节位置 | 需要增加的理论与实践 |
|---|---|
| 06.01–06.03 | 文档与集合、字段类型、嵌入与引用、关系模型对照;会话成员与消息历史如何建模 |
| 06.04–06.06 | 消息块与访问模式、MongoDB 索引与查询观察;区分通用机制和具体存储实现 |
| 06.07–06.09 | 单文档操作与多记录事务的范围、并发更新、日志及写入确认;不直接套用 SQL 的全部语义 |
| 06.10 | Go 驱动、查询与游标、批量写入、资源与错误,分别实现 SQL 教学路径和 MongoDB 对照路径 |
| 06.11–06.12 | 副本、读取与写入条件、历史迁移、对账及消息服务案例 |
以上在现有章号中分次展开,不把新增设计计为已完成正文。上游的实际组件与确认边界按固定源码核对,教学 SQL 方案会标注为课程模型。
参考材料怎样进入课程
采用经典资料的知识覆盖与递进思路,结合 Go 和虚构 IM 重新组织。下表对应本卷已完成的十二章;按先修选择章节并完成独立变式。
起步层
| 章节 | 要详细讲解的内容 | IM 练习与验收目标 |
|---|---|---|
| 06.01 关系模型与业务身份 | 从表、行、列、类型与建表开始,再讲实体、关系、键、约束、NULL 与业务身份。 | 从用户、会话、成员、消息身份建表,再比较文档与集合,明确键、约束与NULL。 |
| 06.02 SQL 从读写到复杂查询 | 先讲 SELECT、INSERT、UPDATE、DELETE、WHERE,再进入连接、聚合、子查询、集合操作、窗口函数、排序与分页。 | 先用基本SQL读写历史,再手算连接、聚合、排序与分页,解释修改范围。 |
| 06.03 模式设计与演进 | 函数依赖、规范化、冗余、外键、审计字段和 schema migration。 | 比较成员关系与消息内容的建模,分析冗余、嵌入/引用、更新异常和格式演进。 |
原理层
| 章节 | 要详细讲解的内容 | IM 练习与验收目标 |
|---|---|---|
| 06.04 页与缓冲池 | 行布局、页、槽、缓存替换、脏页、顺序/随机 I/O。 | 沿消息历史查询估算页、缓存与I/O,区分业务消息、存储块和具体引擎布局。 |
| 06.05 索引结构 | B+ 树、哈希、复合键、覆盖索引、LSM 与写放大。 | 为会话内序号范围查询设计索引,比较复合键、覆盖、写放大与MongoDB对照。 |
| 06.06 查询执行与优化 | 算子、连接算法、排序/聚合、选择率、统计信息与执行计划。 | 比较历史分页的估计与实际工作量,分析过滤、排序、连接和计划偏差。 |
工程层
| 章节 | 要详细讲解的内容 | IM 练习与验收目标 |
|---|---|---|
| 06.07 事务与并发异常 | ACID、读写冲突、隔离级别、丢失更新、写偏斜和幻读。 | 用成员变更与消息记录构造事务交错,区分教学SQL事务和具体文档更新范围。 |
| 06.08 锁与 MVCC | 记录/范围锁、死锁、快照、版本链、回收与长事务。 | 分析长查询、并发更新与等待,解释锁、快照、版本和有界重试的条件。 |
| 06.09 日志与崩溃恢复 | redo/undo、WAL、检查点、提交与刷盘、备份和恢复目标。 | 为消息保存标注确认与崩溃位置,比较日志、刷盘、检查点及具体写入条件。 |
进阶层
| 章节 | 要详细讲解的内容 | IM 练习与验收目标 |
|---|---|---|
| 06.10 Go 数据访问 | database/sql、驱动、连接池、事务范围、context、参数与扫描。 | 分别学习SQL与MongoDB驱动的查询、结果或游标、批量、取消和关闭责任。 |
| 06.11 复制、迁移与对账 | 主从延迟、读取一致性、变更日志、回填、切换和数据回滚。 | 设计历史回填与存储切换,区分复制延迟、权威写入、对账和回滚窗口。 |
| 06.12 数据库业务案例 | 幂等领取、库存或配额、分页、批量与热点;正确性和容量。 | 交付消息与会话存储案例,覆盖分页、成员权限、重复输入、故障及上游存储对照。 |
本卷综合任务
完成 IM 会话与历史数据方案,包含教学 SQL 模型、MongoDB 对照、索引、并发边界、写入确认、连接资源与迁移。
任务由学习者在具备环境时执行。理论推导、参考示例、个人实现和真实运行记录分别保存,故障与反例属于必需部分。
达到的能力
能从业务查询解释执行成本,能分析事务交错与恢复,而不仅是会写 CRUD。
用解释、最小实现、失败变式、业务取舍四类证据评审。只有目录、术语定义或参考代码通过,不能直接记为掌握本卷。
本卷章节展开规则
每章从一个明确问题开始,先补齐本章所需定义,再推导机制;至少含一条完整执行过程、一个反例、分层练习、反馈与业务迁移。复杂章节拆成多课,不把整卷知识压成一次速读。
当前编写状态和章节深度要求见课程编写与能力验收。