§ 00概述
缓存挡住了读,数据库的下一个瓶颈必然是写与容量。解法分两步走:先用读写分离做读扩展(成本低、几乎无侵入),写压力或单表容量真正触顶时,再做分库分表(收益大、不可逆,必须想清楚再动手)。
本章的数据集围绕三个决策展开:什么时候只做读写分离就够、分片键怎么选、存量数据怎么迁。分库分表是全系列不可逆程度最高的动作,本章的价值在于让你只在真正必要时才做它,并且一次做对。
§ 01演进定位
读写分离是数据库的读扩展:一主多从,写走主库、读走从库,配合 04 章缓存几乎覆盖绝大多数读场景。成本只有主库的 50%-100%/实例,且云托管只读实例自动同步、故障自动摘除。
分库分表是写与容量的水平扩展:把单库单表按分片键拆到多个物理库表,写容量与数据容量随分片数线性增长。它同时带走三样东西:跨分片事务的复杂性、跨分片查询的代价、以及运维工具链的整体升级。
决策顺序因此是刚性很强的三段论:读问题 → 缓存 + 只读实例;容量预警但写未触顶 → 提前做分库(不动表结构);写真触顶 → 分库分表一次到位。跳步直接分表的项目,一半在一年内又重构了一次。
§ 02技术架构
读写分离:主库 + 1-2 只读实例,应用侧路由(中间件或数据源封装)按语句类型分流;复制延迟要求 < 500ms,对延迟敏感的「写后立读」走主库强制路由。
分库分表:分片键的选择是唯一重要的事——订单类用用户维度(同一用户数据落同片,买家查询免跨片),日志类用时间维度(冷热分离天然归档)。原则:让最高频的查询模式在单分片内闭合。
中间件选型:Java 生态优先 ShardingSphere(社区成熟、功能全),或使用云厂商分布式数据库(TDSQL 等)托管分片。跨分片事务默认最终一致:本地消息表或事务消息,慎用强一致分布式事务。存量迁移走「双写 + 全量校验 + 灰度切读 + 切写」,与 02 章迁移同构但多一个分片路由维度。
§ 03实施路径
第一阶段(1 周)读写分离:只读实例选购、复制延迟基线测量、读路由改造与「写后立读」主库强制路由清单、按接口灰度切读。
第二阶段(2-3 周)分片设计:分片键评审(用真实 Top 查询验证)、分片数预留(按 3 年数据量 × 2 余量)、路由中间件接入与影子库验证。
第三阶段(2-3 周)存量迁移:全量迁移 + 增量同步、行数与内容双校验、灰度切读 10%→50%→100%、切写与回退预案、旧库只读保留 4 周。总周期 5-7 周,是全系列最长的实施。
§ 04客户价值与适用判断
只做读写分离就够:单表千万级以内、写 QPS < 200。此时分库分表的复杂度远大于收益,不要动。
该分库分表:单表 > 2,000-5,000 万行且仍高速增长、写 QPS 持续 > 200-500、或单库容量/备份窗口已不可管理。
换道提醒:如果拆分动机来自「检索模式与关系模型不匹配」(复杂多维查询、全文检索),正确答案可能不是分表而是 07 章搜索引擎/NoSQL——先确认问题,再选工具。
§ D01组件与选型清单
DATA读写分离与分库分表 · 标准组件栈读扩展 → 写扩展
| 层级 | 组件 | 选型建议 | 职责与要点 |
|---|
| 主库 | 云数据库 CDB 高可用 | 4C8G 起按写压力升配 | 只承担写与强一致读,容量预留 50% |
| 只读实例 | CDB 只读 × 1-2 | 规格 = 主库 50-100% | 自动同步复制,延迟 < 500ms,故障摘除 |
| 读路由 | 数据源中间件 | 语句级读写分流 | 写后立读白名单强制走主库 |
| 分片中间件 | ShardingSphere / 云分布式库 | 按团队技术栈 | 分片路由、读写分离、分布式 ID 一体化 |
| 分布式 ID | 雪花算法 / 号段模式 | 趋势递增 | 跨分片全局唯一,避免自增键冲突 |
| 数据同步 | DTS / binlog 订阅 | 全量 + 增量 | 迁移管道与校验报告,切换期间不中断 |
| 冷备归档 | COS 归档存储 | 按月归档 | 历史数据冷热分离,缩小在线库体量 |
分片数一次给足(如 8 或 16 片):扩分片需要二次迁移,缩分片几乎没人做——宁可初期略浪费。
§ D02成本测算数据集
DATA成本测算示例(读写分离起步 + 分片预留 · 月度)月度 · CNY
| 项目 | 规格 | 月成本 | 说明 |
|---|
| 主库 | 高可用 4C8G | ≈ ¥660 | 写主库,升配是常态路径 |
| 只读实例 × 1 | 4C4G | ≈ ¥300 | 读扩展第一步 |
| 分片中间件 | ShardingSphere 自托管 | ≈ ¥80 | 随应用部署,无独立实例 |
| DTS 同步 | 迁移期增量同步 | ≈ ¥150 | 迁移窗口 4-6 周,按量计费 |
| 归档存储 | COS 归档 200GB | ≈ ¥15 | 冷数据月度归档 |
月均合计 ≈ ¥1,205 · 较 04 章 +≈ ¥400
全量分库分表(如 8 分片)数据库成本通常再翻 2-3 倍——这正是「能不做就不做」的经济理由。
§ D03关键指标基准
DATA可用性与体验基线SLO 参考
| 指标 | 04 章基线 | 本阶段目标 | 行业良好 |
|---|
| 主从复制延迟 | — | < 500ms | < 100ms |
| 单表容量 | > 2,000 万行增长中 | 每片 < 1,000 万行 | 每片 < 500 万行 |
| 写 QPS 承载 | ≈ 200 | ≈ 200 × 分片数 | 弹性扩展 |
| 慢查询占比 | 未系统治理 | < 0.5% | < 0.1% |
| 迁移数据不一致率 | — | 0(校验通过为准) | 0 |
复制延迟监控必须建大盘:延迟突增往往先于主库故障出现。
§ D04演进触发信号
DATA什么时候必须走向下一阶段任一命中即评估
| 触发信号 | 判定阈值 | 演进方向 |
|---|
| 复制延迟常态超标 | 只读实例延迟 > 2s 频发 | 读写分离架构升级或分片(本章) |
| 备份窗口失控 | 全量备份 > 4 小时 | 分库分表 + 冷热归档(本章) |
| DDL 变更锁表 | 加字段分钟级且影响业务 | 分表缩小单表体量(本章) |
| 服务边界混乱 | 一个库被 5+ 应用直连 | 业务拆分与数据归属(08) |
| 检索模式错位 | 多维组合查询大量出现 | 搜索引擎与 NoSQL(07) |
§ D05上线检查清单
分片键评审用生产 Top 20 真实查询验证,高频查询必须在单分片闭合
分布式 ID 就位全局唯一且趋势递增,替换全部自增主键依赖
跨分片事务清单列出所有跨片写场景,逐一给出最终一致方案
双校验通过行数校验 + 抽样内容校验 + 业务对账,三方一致才切流
灰度切流读 10%→50%→100% 观察 ≥ 3 天,写切换安排低峰并冻结发布
回退预案旧库只读保留 4 周,回切演练至少一次
§ D06高频翻车点
分片键选错按订单 ID 而非用户 ID 分片,买家查询全表扇出,性能反而劣化
自增主键直迁多分片自增冲突,迁移到一半返工
跨分片 JOIN 成灾把单库 JOIN 习惯带进分片世界,查询扇出拖垮全部节点
只读实例当灾备只读实例不承担高可用切换职责,主库故障要靠主备热备
一次分片太保守4 片起步一年后重建路由,分片数宁多勿少
§ D07常见问答
DATA读写分离与分库分表 · 问答数据集4 组
| 问题 | 答案 |
|---|
| 什么时候必须分库分表? | 三个硬信号:单表 > 2,000-5,000 万行仍高速增长、写 QPS 持续超过主库上限、备份/DDL 窗口不可管理。满足其一先做预研,满足两条再动手。 |
| 分片键选用户 ID 还是订单 ID? | 跟随最高频查询:C 端业务用户维度查询占绝对多数,选用户 ID;平台侧运营查询走异构索引(07 章)解决,不要为了少数查询牺牲多数查询。 |
| 分库分表后还能改回去吗? | 几乎不能。路由中间件、分布式 ID、跨片查询改造会渗透全部数据访问代码。这也是我们坚持「三段论决策顺序」的原因——先确认写真触顶。 |
| 和云分布式数据库怎么选? | 团队有中间件运维能力且需要灵活选型,用 ShardingSphere 自托管;希望分片能力托管化、免运维路由层,直接用云分布式数据库(TDSQL 类)。后者成本高但踩坑少。 |
§ D8角色分工数据集
DATA角色分工数据集本阶段人员配置
| 角色 | 核心职责 | 投入度 | 备注 |
|---|
| DBA(主导) | 分片设计 · 迁移 · 校验 · 回退 | 100% | 本项目唯一主角 |
| 后端 × 2 | 中间件接入 · SQL 治理 · 分布式 ID | 80% | 数据访问层改造 |
| 测试 | 双校验 · 回归 · 影子库验证 | 60% | 迁移期全职 |
| 业务 | 切流窗口与观察确认 | 10% | 观察期反馈通道 |
§ D9风险登记册
DATA风险登记册概率 × 影响
| 风险 | 概率 | 影响 | 缓解措施 |
|---|
| 分片键选错导致查询扇出 | 中 | 致命 | 生产 Top20 查询评审先行,一票否决 |
| 自增主键冲突 | 高 | 严重 | 分布式 ID 全量替换后再迁移 |
| 跨分片事务失控 | 中 | 严重 | 跨片写场景清单化,逐条最终一致方案 |
| 迁移期长事务/DDL 干扰 | 中 | 中 | 迁移窗口冻结 DDL 与批处理 |
§ D10监控告警清单
DATA监控告警清单阈值即责任
| 监控对象 | 指标 | 告警阈值 | 响应动作 |
|---|
| 主从复制 | 延迟 | > 2 秒 | 电话 · 大事务与规格排查 |
| 分片均衡 | 最大-最小行数差 | > 30% | 工单 · 分片键复查 |
| 单表行数 | 逼近分片阈值 | > 80% 阈值 | 工单 · 扩容预研 |
| 慢查询 | 占比 | > 1% | 工单 · SQL 治理专项 |
| 数据对账 | 差异数 | > 0 | 电话 · 定向回补 |
§ D12实施时间线
DATA实施时间线周为单位
| 周次 | 里程碑 | 责任角色 | 出口物 |
|---|
| W1 | 读写分离上线 | DBA + 后端 | 只读实例切读 · 写后立读清单 |
| W2-3 | 分片设计与中间件 | DBA + 后端 | 分片键评审签认 · 影子库验证 |
| W4-5 | 存量迁移 | DBA + 测试 | 全量+增量 · 双校验通过 |
| W6-7 | 灰度切流 | 全员 | 读 10/50/100% · 写切换完成 |
§ D13SLA 与容灾基线
DATASLA 与容灾基线对内承诺
| 指标 | 基线承诺 | 度量方式 | 未达标处置 |
|---|
| 复制延迟 | < 500ms | 延迟监控大盘 | 只读实例规格升级 |
| 写 QPS 承载 | 线性于分片数 | 压测报告 | 扩分片预研启动 |
| 迁移一致性 | 0 差异 | 双校验报告 | 未通过不切流 |
| 回退能力 | < 1 小时可回切 | 回退演练 | 旧库保留期延长 |
§ D14应急预案
DATA应急预案一页纸预案
| 故障场景 | 典型现象 | 处置步骤 | 升级路径 |
|---|
| 主库故障 | 写入中断 | ① 主备切换确认 ② 复制拓扑修复 ③ 写入验证 | 10 分钟未恢复 → 云工单 P1 |
| 只读实例延迟放大 | 读到旧数据 | ① 读路由降级主库 ② 修复延迟 ③ 追平恢复 | 核心接口受累 → 立即处置 |
| 分片路由故障 | 部分数据不可访问 | ① 中间件降级直连 ② 修复路由 ③ 数据完整性核对 | 疑似数据错位 → 停写排查 |
| 切流后发现不一致 | 对账报警 | ① 冻结增量 ② 定向回补 ③ 根因修复后再放量 | 资损类 → 立即回切旧库 |
§ D15首年成本明细
DATA首年成本明细CNY
| 项目 | 月成本 | 年成本 | 备注 |
|---|
| 主库升配 4C8G 高可用 | ≈ ¥660 | ≈ ¥7,920 | 写主库 |
| 只读实例 4C4G | ≈ ¥300 | ≈ ¥3,600 | 读扩展 |
| DTS 迁移窗口 | ≈ ¥150 | ≈ ¥900 | 按 6 周窗口折算 |
| 归档存储 | ≈ ¥15 | ≈ ¥180 | 冷数据月归 |
首年增量 ≈ ¥12,600。全量分片(8 片)成本再翻 2-3 倍——按触发信号决策,不为架构美感买单。
§ D16团队能力要求
DATA团队能力要求按需补齐
| 能力项 | 要求级别 | 如何补齐 |
|---|
| 分库分表设计 | 必须 | 分片键评审实战 + 外部评审一次 |
| 数据迁移工程 | 必须 | 双校验迁移完整跟做一次 |
| SQL 治理 | 必须 | 慢查询治理专项 |
| 分布式 ID 与事务 | 建议 | 跨片写场景清单演练 |
§ D17关键决策速查(ADR)
DATA关键决策速查(ADR)本阶段 4 个决策
| 决策 | 备选方案 | 结论理由 |
|---|
| 第一步 | 直接分表 vs 先读写分离 | 先分离:读扩展性价比优先 |
| 分片中间件 | ShardingSphere vs 云分布式库 | 按团队运维能力定 |
| 分片键 | 订单 ID vs 用户 ID | 用户维度:最高频查询闭合 |
| 分片数 | 4 片 vs 8 片 | 8 片:宁可初期浪费不二次迁移 |
§ D18高频面试题
DATA高频面试题本阶段 4 题
| 问题 | 考察点 | 优秀回答特征 |
|---|
| 分片键怎么选? | 数据架构 | Top 查询分布论证 + 反例说明 |
| 跨分片事务怎么办? | 一致性设计 | 清单化 + 最终一致 + 对账补偿 |
| 分布式 ID 为什么必须? | 基础功底 | 自增冲突 + 趋势递增两个理由 |
| 什么时候不做分库分表? | 演进判断 | 三段论:读写分离→分库→分表 |
§ D19命令与操作速查
DATA命令与操作速查分片专项
| 场景 | 命令/操作 | 说明 |
|---|
| 路由验证 | 中间件 explain SQL | 确认 SQL 落在预期分片 |
| 延迟监控 | SHOW SLAVE STATUS | 双实例分别看 |
| 行数分布 | 各分片 count 汇总 | 均衡度周检 |
| 对账差异 | 差异工单系统 | 挂起-回补-复核闭环 |
§ D20采购与商务要点
DATA采购与商务要点本阶段采购项
| 采购项 | 询价要点 | 商务注意 |
|---|
| 只读实例 | 复制方式与延迟 SLA | 规格 = 主库 50-100% |
| DTS 长周期任务 | 按量上限与断点续传 | 迁移完成及时释放 |
| 归档存储 | 取回价格与时长 | 仲裁数据取回频率评估 |
§ D21阶段 KPI 卡
DATA阶段 KPI 卡验收口径
| KPI | 口径 | 目标 |
|---|
| 复制延迟 | 大盘监控 | < 500ms |
| 单表容量 | 每片行数 | < 1,000 万 |
| 迁移差异 | 对账结果 | 0 |
| 慢查询占比 | 慢日志统计 | < 0.5% |
§ D22交接清单
DATA交接清单换人不换知识
| 交接项 | 载体 | 验收 |
|---|
| 分片路由配置 | 配置中心 | explain 验证文档 |
| 跨片事务清单 | Wiki | 每条有补偿方案 |
| 迁移校验报告 | 归档 | 双校验证据可查 |
| 回切手册 | Wiki | 旧库保留期与步骤明确 |
§ D23演进检查点评审
DATA演进检查点评审走向 06 章前
| 检查项 | 达标标准 | 结果 |
|---|
| 分片键评审 | 生产 Top 查询验证签认 | 通过/不通过 |
| 迁移双校验 | 行数+抽样差异为 0 | 通过/不通过 |
| 跨片事务清单 | 每条有最终一致方案 | 通过/不通过 |
| 回切演练 | 旧库回切演练成功 | 通过/不通过 |