MongoDB 实现分片(Sharding)主要是为了突破单机存储和性能瓶颈,把数据分布到多个机器上。下面从概念 → 部署架构 → 实操步骤给你一个清晰说明。
一个完整的 MongoDB 分片集群包含三类角色:
| 角色 | 作用 |
|---|---|
| Shard(分片) | 真正存储数据的 MongoDB 实例(通常是一个副本集) |
| Config Server(配置服务器) | 存储集群元数据和分片信息(必须是副本集) |
| Mongos(路由) | 客户端入口,负责路由请求到对应分片 |
Client
↓
mongos
↓
Config Servers (副本集)
↓
Shard1 (副本集)
Shard2 (副本集)
Shard3 (副本集)
以 MongoDB 6.x / 7.x 为例(生产推荐副本集)
mongod --configsvr --replSet cfgRS --port 27019 --dbpath /data/configdb
初始化:
rs.initiate({
_id: "cfgRS",
configsvr: true,
members: [
{ _id: 0, host: "cfg1:27019" }
]
})
mongod --shardsvr --replSet shard1RS --port 27018 --dbpath /data/shard1
初始化副本集(略,类似普通副本集)。
mongos --configdb cfgRS/cfg1:27019 --port 27017
sh.addShard("shard1RS/shard1a:27018,shard1b:27018")
sh.addShard("shard2RS/shard2a:27018,shard2b:27018")
sh.enableSharding("mydb")
sh.shardCollection(
"mydb.orders",
{ user_id: 1 }
)
✅ 到这里,数据就会按 user_id 分布到不同分片。
❌ 不好的例子:
| 策略 | 说明 |
|---|---|
| 范围分片 | 按区间(适合范围查询) |
| 哈希分片 | 数据更均匀(推荐) |
| 复合分片键 | { region: 1, user_id: 1 } |
哈希分片示例:
sh.shardCollection("mydb.logs", { _id: "hashed" })
sh.status()
如果你愿意,我可以:
你现在是学习、测试还是生产环境?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。