sh.shardCollection()

在本页面

Definition

  • sh. shardCollection(* namespace key unique options *)
ParameterTypeDescription
namespacestring集合的namespace<database>.<collection>的形式分片。
keydocument用作shard key的索引规范文档。分片键确定 MongoDB 如何在分片之间分配文档。

索引规范文档的* key *是用作分片键的字段。文档的“值”必须是以下值之一:
1 for 范围分片
"hashed"以指定哈希分片键
除非集合为空,否则索引必须在shardCollection命令之前存在。如果集合为空,则如果尚不存在可支持分片键的索引,则 MongoDB 会在分片集合之前创建索引。
另请参见分片索引
unique布尔值可选。当true时,unique选项可确保基础索引强制执行唯一约束。哈希分片键不支持唯一约束。默认为false。如果指定options文档,则 必填unique 。在为options文档指定值的同时省略unique的值可能会导致分片的集合不正确。
options文档可选。包含可选字段(包括numInitialChunkscollation)的文档。

options参数支持以下选项:

ParameterTypeDescription
numInitialChunksinteger可选的。指定使用哈希分片键分片* empty *集合时最初要创建的块数。然后,MongoDB 将在整个集群中创建和平衡块。每个分片numInitialChunks必须小于8192


在版本 3.4 中更改:如果集合不为空或分片键不是哈希键,则该操作将返回错误。
| collation |文档|可选。如果指定给shardCollection的集合具有默认的collation,则必须包含带有{ locale : "simple" }的排序规则文档,否则shardCollection命令将失败。 |至少一个其字段支持分片键模式的索引必须具有简单的排序规则。

Considerations

在调用shardCollection之后,MongoDB 没有提供任何方法来停用集合的分片。此外,在shardCollection之后,您无法更改分片键或修改分片键索引中使用的任何字段的值。

Shard Keys

选择最佳的分片密钥以有效地在各个分片之间分配负载需要进行一些计划。查看Shard Keys有关选择分片键和限制的信息。

哈希分片键

哈希分片键使用单个字段的哈希索引作为分片键。

使用格式{field: "hashed"}指定散列的分片键。散列键可能不是复合索引。

Note

如果在创建哈希分片键集合时正在进行块迁移,那么直到平衡器自动平衡集合之前,初始块分布可能会不均匀。

Uniqueness

如果指定unique: true

尽管您可以具有唯一的compound index,其中分片键是prefix,但是如果使用unique参数,则集合必须在分片键上具有唯一索引。

另请参见分片集合和唯一索引

Collation

在版本 3.4 中更改。

如果集合具有默认的collation,则sh.shardCollection命令必须包含一个值为{ locale: "simple" }collation参数。对于具有默认排序规则的非空集合,您必须至少具有一个简单排序规则的索引,该索引的字段支持分片键模式。

您无需为没有排序规则的集合指定collation选项。如果确实为没有排序规则的集合指定排序规则选项,则它将无效。

Examples

Simple Usage

给定名为records的数据库中的名为people的集合,以下命令通过zipcode字段对该集合进行分片:

sh.shardCollection("records.people", { zipcode: 1 } )

选项的用法

phonebook数据库具有集合contacts,没有默认值collation。以下示例使用sh.shardCollection()phonebook.contacts分片为:

sh.shardCollection(
  "phonebook.contacts",
  { last_name: "hashed" },
  false,
  {
    numInitialChunks: 5,
    collation: { locale: "simple" }
  }
)