
个人水平有限可能有错欢迎大家在评论区指正和讨论。这是我读完王伟杰《从程序员到架构师》的读书笔记。这只是一个总结真正深入学习还是推荐读书文章目录数据持久化层场景前言存储优化递进思维一、冷热分离1. 适用边界适合场景2. 核心设计思路3. 方案短板 升级路线短板升级路线二、查询分离1. 适用边界适合场景2. 核心设计思路3. 方案短板 升级路线短板升级路线三、分库分表1. 适用边界适合场景2. 核心设计思路3. 方案短板 组合搭配短板四、全局决策树常用组合方案五、统一架构思想总结极简一句话收尾数据持久化层场景《从程序员到架构师》数据持久化 1-3 章的学习总结仅自用复习不作商用。前言存储优化递进思维线上数据库单表数据量膨胀、查询 / 写入变慢时架构优化存在清晰的成本递进路线轻度改造改动小、上线快冷热分离中度改造解决复杂查询瓶颈查询分离重度重构解决读写双瓶颈、亿级数据分库分表三者并非互斥生产环境常组合使用。本文统一梳理三类方案的选型标准、核心设计、缺陷与升级路线用于后续快速复盘。一、冷热分离1. 适用边界适合场景业务数据存在终态归档后极少修改、仅低频查询冷数据够冷可区分冷热数据前端 / 接口支持分开查询工期紧张不允许大规模重构业务与库表2. 核心设计思路核心目标缩小热表数据体量减少常规查询扫描行数两阶段迭代方案一期过渡冷热数据统一使用 MySQL 存储整体改造量小、可快速上线。根据数据迁移的触发时机行业内分为业务代码埋点、Binlog 日志监听、定时任务扫描三种实现方案通过表格直观对比选型差异实现方案核心逻辑优点缺点适用业务场景业务代码埋点在业务更新 / 完结逻辑内同步增加冷热数据迁移逻辑数据迁移实时性最高无延迟强侵入业务代码大量老系统改动风险高业务逻辑臃肿业务代码量少、冷热状态变更逻辑集中的小型系统Binlog 日志监听基于 Canal 监听 MySQL 数据变更日志自动识别终态数据并迁移零业务代码侵入不影响主流程性能组件部署维护成本高存在少量同步延迟故障排查链路长存量老旧单体系统禁止大面积修改业务代码定时任务扫描定时器周期批量扫描热库根据冷热标记批量归档冷数据零业务侵入、开发最快、运维简单存在固定迁移延迟归档不实时订单、工单等按时间划分冷热的绝大多数业务通用首选方案 1业务代码埋点 流程图否是业务写操作数据是否变为冷态热数据库同步执行数据迁移冷数据库方案 2Binlog 日志监听 流程图是业务写操作热数据库Canal监听Binlog日志识别冷态数据执行迁移逻辑冷数据库方案 3定时任务扫描 流程图多线程并发热冷冷写操作热数据查询操作判断冷热冷数据定时器扫描热数据冷热识别移动冷热数据统一落地保障机制三种方案通用,无论选用哪种迁移方式都必须配套三层机制保障数据一致性状态标记增加冷热标识字段区分归档数据行级分布式锁避免多线程并发迁移造成数据重复幂等写入归档操作支持重复执行防止宕机丢数二期长期冷数据迁移至 HBase 等低成本海量存储解决冷库单表膨胀、归档查询卡顿问题查询路由逻辑常规操作只查热库需要历史归档数据时主动切换冷库查询入口3. 方案短板 升级路线短板冷热业务边界变更后整套迁移逻辑需要全量改造归档冷库不支持复杂多表关联查询仅优化读查询无法缓解数据库写入压力升级路线复杂检索需求 → 叠加查询分离写入持续打满数据库 → 升级分库分表二、查询分离1. 适用边界适合场景单表千万级多表联查、模糊检索导致 SQL 耗时极高数据无明显归档冷热区分任意时间的数据都可能读写系统写入性能正常瓶颈集中在查询侧2. 核心设计思路分层职责拆分MySQL 主库只承担增删改事务操作复杂多条件检索、分页、模糊查询、聚合统计全部交给专用搜索引擎 Elasticsearch实现读写分离减轻数据库查询压力。多模式数据同步方案提供异步 MQ 同步、同步直写、Canal 增量同步三种数据同步模式适配不同业务实时性、稳定性需求统一增加数据同步标记字段用于全量 / 增量数据补偿解决消息丢失、同步延迟、数据不一致问题。存储分层设计MySQL 主库存储完整事务原始数据保证数据一致性与事务可靠性ES 文档采用扁平化结构冗余关联表检索字段规避 ES 复杂联表查询提升检索性能。同步模式实时性业务代码侵入并发适配同步直写最高高低并发场景Canal 增量同步中等无全量 / 存量数据同步MQ 异步同步毫秒级延迟低高并发大流量整体方案数据同源兜底校验写操作主数据 MySQL通知MQ消息队列更新查询数据服务查询数据 Elasticsearch查询操作3. 方案短板 升级路线短板数据同步存在毫秒秒级延迟无法做到强实时一致无法解决数据库写入瓶颈ES 有分页、分片、数据持久化天然限制升级路线存量数据持续膨胀搭配冷热分离归档历史数据主库读写双瓶颈升级分库分表三、分库分表1. 适用边界适合场景单库单表达到亿级读写 CPU/IO 持续打满数据长期活跃无明确归档条件冷热分离无法治本业务长期增长可提前做分片扩容规划2. 核心设计思路核心目标将数据均匀打散至多库多表分摊读写压力分片选型优先客户端中间件Sharding-JDBC减少代理层运维开销分片键设计原则分布均匀、业务查询高频、极少变更上线配套全量历史数据迁移 binlog 增量同步灰度切换流量保障无缝上线3. 方案短板 组合搭配短板跨库分页、聚合、联查成本极高分布式事务实现复杂维护成本上升后期扩容需要数据重分布迁移工作量大四、全局决策树常用组合方案分库分表基础存储 查询分离复杂检索 冷热分离海量归档是否是否仍有复杂检索需求数据持续膨胀、写入承压数据持续膨胀、写入承压数据库查询缓慢能否划分归档冷数据?优先冷热分离 轻度优化瓶颈仅在查询,写入正常?使用查询分离 中度优化读写均存在瓶颈 → 分库分表五、统一架构思想总结技术无银弹架构本质是取舍冷热分离、查询分离、分库分表各有适用边界与缺陷不存在万能存储方案架构设计就是结合业务条件做权衡妥协。海量数据优化坚持渐进迭代拒绝过度设计遵循轻量→中度→重度改造顺序先冷热归档再检索分层最后分库分表优先低成本方案不盲目上重型架构。分层隔离 异常兜底是落地必备双核心通过数据分层拆分压力同时必须配套幂等、锁、数据补偿、灰度迁移等异常保障只考虑正常流程的架构无法稳定线上运行。极简一句话收尾存储架构的核心按业务数据特征分层减负循序渐进改造接受方案短板并做好异常兜底。