shardCollection

在本页面

定义

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

shardCollection具有以下形式:

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

shardCollection有以下字段:

领域类型描述
shardCollection要以[2_]形式分片的集合的命名空间
key文献索引规范文档用作碎片 key。 shard key 确定 MongoDB 如何在分片之间分发文档。
索引规范文档的 key 是用作分片 key 的字段。文档的 value 必须是以下之一:
1 for 基于范围的分片
"hashed"指定哈希碎片 key
除非集合为空,否则索引必须存在于shardCollection命令之前。如果集合为空,则 MongoDB 在分片集合之前创建索引,如果尚不存在可支持 shard key 的索引。
另见Shard Key 索引
uniquebooleantrue时,unique选项确保基础索引强制执行唯一约束。散列分片键不支持唯一约束。默认为false
numInitialChunks整数指定在使用哈希碎片 key分片空集合时最初创建的块数。 MongoDB 然后将在 cluster 中创建和平衡块。每个分片的numInitialChunks必须小于8192
在 version 3.4 中更改:如果集合不为空或者 shard key 不是哈希 key,则操作将返回错误。
collation文献可选的。如果为shardCollection指定的集合具有默认整理,则必须包含带{ locale : "simple" }的排序规则文档,否则shardCollection命令将失败。至少有一个字段支持 shard key pattern 的索引必须具有简单的排序规则。

注意事项

使用

您只能对集合进行一次分片。

不要****在同一个 time 上运行同一个集合上的多个shardCollection命令。

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

碎片钥匙

选择最好的 shard key 以在分片中有效地分配负载需要一些规划。查看碎片钥匙有关选择分片 key 和限制的信息。

哈希碎片键

散列分片键使用单个字段的哈希指数作为分片 key。

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

注意 如果在创建散列碎片 key 集合时正在进行块迁移,则初始块分布可能不均匀,直到平衡器自动平衡集合。

也可以看看 哈希碎片

唯一性

如果指定unique: true

  • 如果集合为空,则shardCollection在分片 key 上创建唯一索引(如果此类索引尚不存在)。

  • 如果集合不为空,则必须先使用shardCollection创建索引。

虽然在 shard key 是字首的情况下可以有一个唯一的复合指数,但如果使用unique参数,则该集合必须具有 shard key 上的唯一索引。

另见Sharded Collection 和 Unique Indexes

整理

更改了 version 3.4.

如果集合具有缺省整理,则shardCollection命令必须包含带 value { locale: "simple" }collation参数。对于具有默认排序规则的 non-empty 集合,您必须至少有一个具有简单排序规则的索引,其字段支持 shard key pattern。

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

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

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

也可以看看 拆分