分片与水平扩展
分片(Sharding)通过把数据水平切分到多个分片来突破单副本集的容量与吞吐上限。但分片引入 mongos 路由、config server、chunk 迁移与分片键约束等复杂度。分片不是一般性能问题的第一解决方案——先穷尽索引、建模、副本集读扩展。
本章条目
| 编号 | 条目 | 类型 | 难度 | 一句话摘要 |
|---|---|---|---|---|
| SHARD-01 | 分片集群与分片键设计 | 指南 | 高级 | 组件、分片键约束、range/hash、热点、chunk、resharding |
核心原则
分片是最后手段,不是第一选择
分片建议必须基于:数据量、增长率、工作集大小、吞吐、查询模式和故障域。把分片当作「查询慢」的通用解法,往往在错误的分片键上制造出更难解决的热点与运维负担。
- 分片键决定一切:基数、频率、单调性、查询隔离性决定数据分布与路由效率,且难以更改。
- targeted 查询 vs scatter-gather:查询含分片键 → 定向到单/少数分片;不含 → 广播到所有分片。
- 迁移有代价:balancer 迁移 chunk 消耗资源,jumbo chunk 无法迁移。
