shardCollection

在本页面

Definition

要运行shardCollection,请使用db.runCommand( { <command> })方法。

shardCollection的格式如下:

{
   shardCollection: "<database>.<collection>",
   key: <shardkey>,
   unique: <boolean>,
   numInitialChunks: <integer>,
   collation: { locale: "simple" }
}

shardCollection具有以下字段:

Field Type Description
shardCollection string 集合的namespace<database>.<collection>的形式分片。
key document 用作shard key的索引规范文档。分片键确定 MongoDB 如何在分片之间分配文档。

索引规范文档的* key *是用作分片键的字段。文档的“值”必须是以下值之一:
1 for 范围分片
"hashed"以指定哈希分片键
除非集合为空,否则索引必须在shardCollection命令之前存在。如果集合为空,则如果尚不存在可支持分片键的索引,则 MongoDB 会在分片集合之前创建索引。
另请参见分片索引
unique boolean 当为true时,unique选项可确保基础索引强制执行唯一约束。哈希分片键不支持唯一约束。默认为false
numInitialChunks integer 指定使用哈希分片键分片* empty *集合时最初要创建的块数。然后,MongoDB 将在整个集群中创建和平衡块。每个分片的numInitialChunks必须小于8192
在版本 3.4 中更改:如果集合不为空或分片键不是哈希键,则该操作将返回错误。
collation 文档 可选。如果指定给shardCollection的集合具有默认的collation,则必须包含带有{ locale : "simple" }的排序规则文档,否则shardCollection命令将失败。 至少一个其字段支持分片键模式的索引必须具有简单的排序规则。

Considerations

Use

您只能将一个集合分片一次。

不要对同一集 Contract 时运行多个shardCollection命令。

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

Shard Keys

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

哈希分片键

哈希分片键使用单个字段的hashed index作为分片键。

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

Note

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

See also

Hashed Sharding

Uniqueness

如果指定unique: true

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

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

Collation

在版本 3.4 中更改。

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

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

Example

以下操作为records数据库中的people集合启用分片,并将zipcode字段用作shard key

db.adminCommand( { shardCollection: "records.people", key: { zipcode: 1 } } )

See also

Sharding

首页