分片集实例开启数据分片模式
更新时间:2026-05-11
适用背景
购买分片集实例后,默认并不会开启对分片集群实例中的集合设置数据分片,如果不手动对数据集合设置数据分片,数据将被集中存放在一个Shard节点中,这将导致其他Shard节点的存储空间和计算性能无法被充分利用。
版本差异
-
MongoDB 对片键(Shard Key)的修改能力随着版本迭代不断增强:
- 4.4 版本以前:片键一旦设置,则固定不变,无法修改或删除。
- 从 4.4 版本开始:可以使用 refineCollectionShardKey 命令,通过为片键添加后缀字段的方式来优化它。
- 从 5.0 版本开始:引入了 reshardCollection 命令,支持完全更换一个集合的片键。
- 执行了数据分片操作后,均衡器会对满足条件的数据进行拆分,这将占用实例的资源,请在业务低峰期操作。
操作步骤
- 通过Mongo Shell登录分片集群实例
- 对整个数据库启用分片功能
如果您的实例是MongoDB 6.0及以上版本,可跳过此步骤,更多信息,请参见sh.enableSharding()
Bash
1sh.enableSharding("<database>")
2
3参数说明:<database>为数据库名。
4示例:sh.enableSharding("mongodb_test")
- 查看分片状态
Bash
1sh.status()
- 对片键的字段建立索引
Bash
1db.<collection>.createIndex(<keyPatterns>,<options>)
2
3参数说明:
4<collection>:集合名。
5<keyPatterns>:包含用于建立索引的字段和索引类型。常见的索引类型如下:
61:创建升序索引
7-1:创建降序索引
8"hashed":创建哈希索引
9<options>:表示接收可选参数。
创建升序索引示例:db.collection_test.createIndex({name:1})
创建哈希索引示例:db.collection_test.createIndex({name:"hashed"})
- 对单个集合设置数据分片
Bash
1sh.shardCollection("<database>.<collection>",{ "<key>":<value> } )
2
3
4参数说明:
5<database>:数据库名。
6<collection>:集合名。
7<key>:分片的键,MongoDB将根据片键的值进行数据分片。
8<value>
91:表示基于范围分片,通常能很好地支持基于片键的范围查询。
10"hashed":表示基于哈希分片,通常能将写入均衡分布到各Shard节点中。
基于范围分片的配置示例:sh.shardCollection("mongodb_test.collection_test",{"name":1})
基于哈希分片的配置示例:sh.shardCollection("mongodb_test.collection_test",{"name":"hashed"})
评价此篇文章
