moveRange
定义
moveRange
6.0 版本中的新功能。
在 分片 之间移动 个 范围 。
moveRange
mongos
使用 管理员数据库 时,通过 实例运行 命令。
兼容性
此命令可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
注意
所有MongoDB Atlas集群都支持此命令。有关Atlas支持所有命令的信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
语法
该命令具有以下语法:
db.adminCommand( { moveRange: <namespace>, toShard: <ID of the recipient shard>, min: <min key of the range to move>, // conditional max: <max key of the range to move>, // conditional forceJumbo: <bool>, // optional waitForDelete: <bool>, // optional writeConcern: <write concern>, // optional secondaryThrottle: <bool> // optional } )
命令字段
该命令接受以下字段:
字段 | 类型 | 说明 |
---|---|---|
toShard | 字符串 | 接收分片的 ID。 |
min | key | 要移动范围的最小键。 如果不指定 如果未指定
|
max | key | 要移动范围的最大键。 如果不指定 如果不指定
|
布尔 | 可选。 确定命令是否可以移动过大而无法迁移的范围的标志。 该范围可能会也可能不会标记为jumbo。
默认为 警告: 带有 此选项会导致分片迁移数据段,即使数据段大于配置的数据段大小。 该集合在迁移期间保持不可用状态。 要在没有这么长的阻塞期的情况下迁移这些大数据段,请参阅平衡超出大小限制的范围。 | |
writeConcern | 文档 | |
secondaryThrottle | 布尔 | 可选。
有关更多信息,请参阅辅助限制。 |
范围迁移部分描述了范围如何在 MongoDB 上的分片之间移动。
Considerations
仅在以下情况下使用moveRange
:
初始数据摄取
大批量导入操作
在大多数情况下,允许负载均衡器在分片集群中创建和平衡范围。
示例
以下示例使用具有以下内容的collection:
片键
x
已配置数据块大小为 128 MB
有边界的数据块:
[x: 0, x: 100)
同时指定min
和max
下表列出将min
和max
设置为各种值的结果:
min | max | 结果 |
---|---|---|
0 | 100 | 将范围内的所有文档移至接收分片。 |
10 | 30 | 创建三个子范围:
将 |
0 | 20 | 创建两个子范围:
将 |
40 | 100 | 创建两个子范围:
将 |
指定min
但不指定max
下表列出了将min
设置为各种值的结果:
min | 键范围内的数据量 | 结果 |
---|---|---|
0 | 键 x: 0 和x: 100 之间包含的大小小于 128 MB。 | 将范围内的所有文档移至接收分片。 |
10 | 键 x: 0 和x: 100 之间包含的大小小于 128 MB。 | 创建两个子范围:
将 |
10 | 键 x: 10 和x: 30 之间包含 128 MB。 | 创建三个子范围:
将 |
指定max
但不指定min
下表列出了将max
设置为各种值的结果:
max | 键范围内的数据量 | 结果 |
---|---|---|
100 | 键 x: 0 和x: 100 之间包含的大小小于 128 MB。 | 将范围内的所有文档移至接收分片。 |
10 | 键 x: 0 和x: 100 之间包含的大小小于 128 MB。 | 创建两个子范围:
将 |
30 | 键 x: 10 和x: 30 之间包含 128 MB。 | 创建三个子范围:
将 |