分片键可以是单个索引的 字段,也可以是复合索引覆盖的多个字段,该复合索引决定集合document在集群分片之间的分布。有关详细信息,请参阅分片键索引。
MongoDB将分片键(或哈希分片键键值)的范围划分为多个不重叠的范围。每个范围都与一个数据块相关联, MongoDB会尝试在集群中的分片之间平均分配数据段。
将集合分片
您可以使用 mongosh 方法 sh.shardCollection() 对集合分片。要对集合分片,必须指定要分片的集合的完整命名空间和分片键。
sh.shardCollection(<namespace>, <key>) // Optional parameters omitted
| 指定您想要对其进行分片的集合的完整命名空间 ( |
|
有关分片方法的更多信息,请参阅 sh.shardCollection()。
选择分片键
分片键的选择会影响可用分片之间的数据创建和分布。理想的分片键允许MongoDB在整个集群中均匀分布文档,同时也有利于常见的查询模式。
有关详细信息,请参阅选择分片键页面。
更改分片键
您可以通过两种方式更改分片键:
您可以通过向现有键添加字段来优化分片键。
您可以完全更改分片键,并使用新键对集合重新分片。
有关详细信息,请参阅更改分片键页面。
更改 document 的分片键字段值
您可以更改集合中任何 document 的分片键字段的值,除非分片键字段是 _id字段。这可能会影响 document 所在的分片。
有关详细信息,请参阅更改文档的分片键值。
设置缺失分片键字段
集合中的文档可能缺少分片键指定的字段。默认下,缺少分片键指定字段的文档与具有 null 值的分片键位于同一数据块范围内。
有关详细信息,请参阅设置缺失的分片键字段。
显示分片键
使用db.printShardingStatus() 显示用于您的集合的分片键。
有关详细信息,请参阅显示分片键。
故障排除
由次优分片键导致的常见问题是:
巨型数据块
负载分布不均
查询性能下降
有关详细信息,请参阅分片键故障排除。