《后端存储实战课》笔记
2022/4/8大约 3 分钟
《后端存储实战课》笔记
极客时间教程 - 后端存储实战课 学习笔记
电商系统设计

订单创建与更新

商品详情页设计

购物车系统设计

分布式事务

常见解决方案:
- 2PC / 3PC
- TCC
- Saga
- 本地消息表
个人以前总结:分布式事务
Elasticsearch 搜索系统
- 全文检索的核心是倒排索引技术
- 关系型数据库(如 MySQL InnoDB 的 B 树索引)不适用于全文检索,只能全表扫描
- Elasticsearch 通过倒排索引支持全文检索,但写入/更新性能较差,不适合频繁更新的数据
MySQL 高可用
数据库超时排查
排查思路:
- 根据故障时段判断是否与用户访问功能相关
- 流量峰值后自动恢复 → 排除后台服务被打死
- CPU 周期性波动 → 检查定时任务(如刷新缓存)
- MySQL CPU 过高 → 排查慢 SQL 日志
预防措施:
- 开发时关注 SQL 性能,确保匹配索引,避免慢 SQL
- 使用缓存减少数据库查询次数
- 支持自动杀慢 SQL
- 支持熔断、降级,减少故障影响范围
慢 SQL 优化
- 数据表不宜过大,一般不要超过千万条数据
- 合理设计索引,提高查询、排序效率
- 出现慢 SQL 时,通过执行计划(EXPLAIN) 进行分析改造
走进黑盒:SQL 是如何在数据库中执行的?
缓存保护 MySQL


读写分离


主从同步
基于 binlog 进行数据同步。
历史数据归档
针对大表,可将历史数据归档到列式数据库(如 Hive)以优化查询性能。
分库分表

Redis 缓存集群
Redis 3.0 后,官方提供 Redis Cluster 解决数据量大、高可用和高并发问题。
相关文章:Redis 集群
MySQL to Redis 同步
- 缓存穿透:全量数据放 Redis,服务通过 MQ 消息触发缓存更新
- Binlog 实时更新:使用 Canal 监听 Binlog 同步 Redis
对象存储
- 图片、音频、视频等大文件使用对象存储(如 HDFS)
- 元数据管理:ZooKeeper、etcd、Nacos
- 对象拆分:将大文件分块(block),提升 IO 效率
跨系统数据同步
- 早期方案:ETL 定时同步(T+1)
- 实时方案:Binlog + MQ 构建实时数据同步系统
- 保证实时性:MQ 解耦上下游,增加分区数量实现并发同步,需将因果关系数据哈希到相同分区避免乱序
数据库迁移方案
| 方案 | 优点 | 缺点 |
|---|---|---|
| 停机迁移/扩容 | 简单,无数据一致性问题 | 需要停机 |
| 双写迁移 | 不需要停机 | 方案较复杂 |
| 主从升级 | 不需要停机,无需数据迁移 | 需要冗余从库 |
海量数据存储
- Kafka 暂存海量原始数据 + 大数据计算框架(Spark、Flink)
- 分布式流数据存储:Pravega、Pulsar 的 BookKeeper
- 时序数据库:InfluxDB、OpenTSDB
海量数据查询加速
- 实时计算:Flink、Storm
- 批处理计算:Map-Reduce、Spark
- 列式数据库(10GB 量级秒级返回):HBase、Cassandra
- 搜索引擎(TB 量级以下):Elasticsearch
NewSQL
CockroachDB、RocksDB、OceanBase 等 NewSQL 数据库解决了 MySQL 常见的高可用、分片问题。
RocksDB 与 LSM 树
- RocksDB 是持久化 KV 存储,基于 LSM 树结构,磁盘读写性能接近内存数据库
- 越来越多新生代数据库选择 RocksDB 作为存储引擎
- LSM-Tree(Log-Structured Merge-Tree)包含:
- WAL(Write Ahead Log)
- 跳表(SkipList)
- SSTable(Sorted String Table,分层有序表)
参考资料
- 后端存储实战课 - 极客教程【入门】:讲解存储在电商领域的种种应用和一些基本特性