Appearance
MongoDB 分片
什么是分片?
分片(Sharding) 将数据水平拆分到多台机器(分片节点),以支持海量数据与高并发。MongoDB 分片集群由 mongos、config servers、shard(副本集)组成。
核心组件
| 组件 | 作用 |
|---|---|
| mongos | 路由,应用连接 mongos,由 mongos 将读写路由到对应 shard |
| config servers | 存储集群元数据(分片键、chunk 分布等),通常为副本集 |
| shard | 每个 shard 通常是一个副本集,存储数据子集 |
分片键(Shard Key)
选择集合的分片键决定数据如何分布。分片键应为常用查询条件,且尽量保证写入均匀。
- 范围分片:按分片键值范围划分 chunk,适合范围查询。
- 哈希分片:对分片键做哈希再分片,写入更均匀,范围查询需广播。
对集合启用分片并指定分片键示例:
javascript
sh.enableSharding("mydb")
sh.shardCollection("mydb.orders", { userId: 1, orderId: 1 })应用连接
应用连接 mongos 地址,而非直接连 shard:
mongodb://mongos1:27017,mongos2:27017/分片集群的部署与运维较复杂,建议参考官方 Sharding 文档。下一节介绍 MongoDB 备份与恢复。