数据分片是什么
数据分片把数据按分片键拆分到多个节点,突破单机存储与写入上限:写入压力打散到多台机器,单表规模下降带来更好的查询与维护表现。关键决策是分片键选择与再均衡方案,难点在于跨分片查询与事务的复杂度会明显上升。分片是最后手段之一,在读多写少的场景里,读写分离与索引优化往往能先撑住一段时间。
基本信息
| 分片键 | 要求分布均匀且贴合高频查询条件 |
|---|---|
| 路由 | 客户端路由或中间件路由,需维护分片映射关系 |
| 再均衡 | 扩容时迁移分片,预分片可降低迁移成本 |
| 全局唯一 | 主键需全局唯一方案,如雪花 ID 或分段号段 |
| 跨片代价 | 跨分片查询需归并,跨分片事务需分布式方案 |
分片键选择参考
| 候选键 | 优点 | 风险 |
|---|---|---|
| 用户 ID | 分布均匀、查询可收敛到单片 | 跨用户统计需汇总层 |
| 时间 | 便于归档与冷热分离 | 新数据集中到单一分片形成热点 |
| 业务域 | 运维边界清晰、便于拆分 | 各域规模不均,资源利用不平衡 |
| 复合键 | 兼顾分布与查询模式 | 路由逻辑更复杂,迁移更麻烦 |
| 哈希值 | 分布最均匀 | 范围查询无法收敛,需全片扫描 |
典型使用场景
- 单表数据量过亿:索引深度与维护窗口都无法接受
- 写入吞吐达上限:单实例磁盘与内存成为瓶颈
- 多租户隔离:按租户分片,便于独立扩容与迁移
- 冷热分离:按时间分片,把冷数据迁到低成本存储
- 地域就近访问:按区域分片降低跨地域访问延迟
- 大促削峰:写入分散到多个分片提升整体吞吐
分片数量要留出扩容空间:分片过少会导致单分片过大,后续迁移时间超出维护窗口;分片过多则元数据与连接数管理成本上升。
跨分片事务与聚合查询成本高;设计前先确认业务查询能否收敛到分片键边界内,否则分片只会把问题从单机搬到中间件。