跳到主要内容

概念说明:把原理和边界讲清楚

概念说明帮助读者理解一个功能是什么、为什么这样工作,以及什么时候不能套用这个解释。这里讨论如何把原理讲清楚;操作命令放在操作文档,参数的准确取值放在参考文档。

先确定读者要理解什么​

“理解系统架构”太宽泛,可以换成一个具体问题:为什么数据库提交成功后,还需要在后台写数据页?

读者可能为了选型、排错或理解操作风险而来。同一篇说明不必一次覆盖所有目的,开头说清这一篇能回答什么。

从结论到细节​

分层展开同一个解释​

先给一句话解释,再说明主要过程,最后补充限制和来源。下面用 InnoDB 日志机制演示信息怎样逐层增加;这不是数据库调优工具。

同一件事,逐步补充细节

选择阅读深度,前面的解释会保留。

  1. 一句话

    InnoDB 使用重做日志保存恢复所需的信息,数据页可以随后写回。

写作示例,非完整的数据库恢复说明。

层数可以随内容变化。重要限制如果会影响读者的决定,就应在前面出现,不能因为它“属于高级内容”而藏到最后。

背景、问题和回答​

SCQA(背景、冲突、疑问、回答)可以帮助整理设计动机。例如:数据页写入有成本,内存又会在掉电后丢失,因此需要解释数据库如何协调日志与数据页写入。

这是一种组织材料的方法,不要求每篇文章按四段写。读者已经知道背景时,直接回答问题通常更省时间。

图需要交代什么​

图适合说明部件之间的关系和数据流向。先确定箭头表示调用、数据移动还是先后顺序,再决定画哪些部件。不要为了完整,把所有实现细节都塞进一张图。

给图配一份文字说明​

以日志与数据页为例,可以用下表补充图中的关系:

图中的部分文字需要补充的信息
内存缓冲区内容是否已经持久化,进程退出或主机掉电有什么区别
日志写入与刷盘什么动作触发写入,使用什么配置,成功返回代表什么
数据页写回与事务提交有什么关系,何时在后台进行
恢复过程使用哪些已持久化的信息,哪些故障不在本说明范围内

文字应保留图里的关键结论,让看不到图片的人也能理解。仅用颜色区分状态不够,还要有名称或标签。

限制应围绕读者的问题​

解释性能时,可以分别检查 CPU、内存、磁盘和网络,但不必给每篇概念说明套固定的资源矩阵。需要写出的,是会改变当前判断的条件。

例如,“提交后能够恢复”必须交代持久化配置与存储可靠性;“加大缓存可以提速”需要说明负载和可用内存。没有测试依据时,不写固定延迟、吞吐或性能提升百分比。

用词要让读者能继续推理​

首次出现的缩写给出简短定义。把“保障一致性”展开为具体对象之间的关系,把“高性能”展开为适用负载、测量方式和限制。

一个实用的检查方法是:读者能否用这段解释预测某个失败场景,而不只是记住几个名词?

一个改写例子​

原稿

系统通过 WAL、LSN 和 Checkpoint 保障高性能与零丢失。

改写

InnoDB 使用重做日志记录恢复所需的信息,数据页可以随后写回。是否在每次事务提交时把日志刷到持久化存储,取决于配置;即使配置要求刷盘,也需要底层存储正确执行刷盘请求。

这里补充了机制和条件,没有把日志刷盘等同于副本同步,也没有承诺任何硬件故障下都不会丢失数据。二进制日志与复制还有各自的配置和故障边界,另行说明。

依据:MySQL 8.0 的 ACID 模型说明与重做日志说明。实际产品文档应标明所验证的版本。

发布前自查​

  • 开头是否回答了一个明确问题?
  • 图、正文和术语是否一致?
  • 结论成立的条件是否可见?
  • 建议与测试结果是否区分?
  • 需要执行操作时,能否找到对应步骤?

继续阅读:参数参考怎么写,或回到信息表达总览。