文档数据库分片
Sharding 是什么?
按分片键把数据拆到多个分片,实现水平扩容
类比:按省份把档案分到不同仓库,查哪个省去哪个仓
三个角色
mongos 负责路由(无状态,可多部署);Config Server 存元数据(副本集);Shard 存实际数据(每个分片本身是副本集)。
分片键怎么选
这是分片方案成败的关键,选错了后期几乎无法挽回。
- 高基数:取值足够多,避免所有数据挤在一个分片
- 写分布均匀:单调递增的 _id 会导致写热点,考虑哈希分片
- 查询常用:查询带上分片键才能路由到单个分片,否则广播到所有分片
- 不可变:分片键字段不能更新(5.0 起有限支持)
范围分片 vs 哈希分片
范围分片适合范围查询(按时间查日志),但容易热点;哈希分片写入均匀,但范围查询要扫所有分片。业务上常见做法是按 tenantId 哈希,再按时间做子分片。