On this page
shardCollection
在本页面
Definition
shardCollection
- Shards集合,用于在各个分片之间分发其文档。在运行shardCollection命令之前,必须在数据库上运行enableSharding。 shardCollection命令必须在
admin
数据库上运行。
- Shards集合,用于在各个分片之间分发其文档。在运行shardCollection命令之前,必须在数据库上运行enableSharding。 shardCollection命令必须在
要运行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
哈希分片键
哈希分片键使用单个字段的hashed index作为分片键。
使用格式{field: "hashed"}
指定散列的分片键。散列键可能不是复合索引。
Note
如果在创建哈希分片键集合时正在进行块迁移,那么直到平衡器自动平衡集合之前,初始块分布可能会不均匀。
See also
Uniqueness
如果指定unique: true
:
如果集合为空,则shardCollection在分片键上创建唯一索引(如果该索引尚不存在)。
如果集合不为空,则必须先使用shardCollection创建索引。
尽管您可以具有唯一的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