适用场景
分库分表是"最后手段":先优化索引与 SQL、再加缓存与只读实例,最后才考虑拆分。因为拆分之后,跨库查询与事务都会成为长期成本。
配置步骤(拆分方案设计)
# 1) 现状分析:单表行数、QPS、TPS、磁盘占用
# 2) 拆分维度:按用户 ID 哈希(8 库 64 表)
# 3) 分片键与路由规则文档化
# 4) 全局 ID 方案:号段模式(DB 申请区间)
# 5) 迁移方案:双写 + 数据校验
关键参数与建议
- 拆分时机:单表数据量、写入压力、单机容量达到瓶颈
- 拆分维度:按业务(订单/用户)、按时间(月份)、按哈希(用户 ID)
- 分片键选择:高频查询条件优先,避免跨分片查询
- 全局唯一 ID:雪花算法或号段模式
- 跨分片查询:尽量在应用层聚合,避免中间件复杂 JOIN
容易踩的坑
- 按时间分表却按 ID 查,跨表查询频繁
- 分片数拍脑袋定,后期扩容困难
- 无全局 ID 方案,主键冲突
验证与巡检
# 验证:按路由规则抽样验证数据分布是否均匀
- 巡检:分片分布均匀、路由规则文档化
小结
分库分表的验收:写入压力分摊、热点分片可控、跨分片查询有明确方案与性能数据。没有数据的拆分是拍脑袋。
> 说明:文中命令为通用写法,不同型号/版本可能略有差异,落地前请对照设备实际版本的官方文档;带外管理与安全设备变更建议先在测试设备验证。