Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs 菜单
Docs 主页
/ /

分片键

分片键可以是单个索引的 字段,也可以是复合索引覆盖的多个字段,该复合索引决定集合document在集群分片之间的分布。有关详细信息,请参阅分片键索引

MongoDB将分片键(或哈希分片键键值)的范围划分为多个不重叠的范围。每个范围都与一个数据块相关联, MongoDB会尝试在集群中的分片之间平均分配数据段。

分片键值空间被分割为较小范围或数据块的示意图。

您可以使用 mongosh 方法 sh.shardCollection() 对集合分片。要对集合分片,必须指定要分片的集合的完整命名空间和分片键。

sh.shardCollection(<namespace>, <key>) // Optional parameters omitted

namespace

指定您想要对其进行分片的集合的完整命名空间 ("<database>.<collection>")。

key

指定文档 { <shard key field1>: <1|"hashed">, ... },其中

  • 1 表示基于范围的分片

  • "hashed" 表示哈希分片

有关分片方法的更多信息,请参阅 sh.shardCollection()

分片键的选择会影响可用分片之间的数据创建和分布。理想的分片键允许MongoDB在整个集群中均匀分布文档,同时也有利于常见的查询模式。

有关详细信息,请参阅选择分片键页面。

您可以通过两种方式更改分片键:

有关详细信息,请参阅更改分片键页面。

您可以更改集合中任何 document 的分片键字段的值,除非分片键字段是 _id字段。这可能会影响 document 所在的分片。

有关详细信息,请参阅更改文档的分片键值

集合中的文档可能缺少分片键指定的字段。默认下,缺少分片键指定字段的文档与具有 null 值的分片键位于同一数据块范围内。

有关详细信息,请参阅设置缺失的分片键字段。

使用db.printShardingStatus() 显示用于您的集合的分片键。

有关详细信息,请参阅显示分片键

由次优分片键导致的常见问题是:

  • 巨型数据块

  • 负载分布不均

  • 查询性能下降

有关详细信息,请参阅分片键故障排除

后退

路由器 (mongos)

获得技能徽章

免费掌握“分片策略”!

了解详情

在此页面上