Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

moveRange

在此页面上

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • Considerations
  • 举例
moveRange

6.0 版本中的新功能

在分片之间移动范围。使用管理员数据库时,通过mongos实例运行 moveRange命令。

此命令可用于以下环境中托管的部署:

  • MongoDB Atlas :用于在云中部署 MongoDB 的完全托管服务

注意

所有 MongoDB Atlas 集群都支持此命令。有关所有命令的信息,请参阅不支持的命令

该命令具有以下语法:

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 ,则为必填项。

如果未指定min ,则给定数据段C ,其中maxC的独占上边界或C包含分片键max ,则min通过以下方式确定:

  • 如果min(C)max之间范围的数据大小小于每个collection的数据块大小或默认数据块大小,则选择该数据块的min值,因为min = min(C)

  • 否则,键min > min(C) ,其中min取决于配置的数据块大小。

max
key

要移动范围的最大键。 如果不指定min ,则为必填项。

如果不指定max ,则给定包含分片键min的数据块C ,则按以下方式确定max

  • 如果minmax(C)之间范围的数据大小小于每个collection的数据块大小或默认数据块大小,则选择该数据块的最大值为max = max(C)

  • 否则,密钥max < max(C) ,其中max取决于配置的数据块大小。

布尔

可选。

确定命令是否可以移动过大而无法迁移的范围的标志。 该范围可能会也可能不会标记为jumbo。

  • 如果为true ,则该命令可以移动范围。

  • 如果为false ,则该命令无法移动范围。

默认为 false

警告:

带有forceJumbo=truemoveRange命令会阻止对集合的读取和写入操作。

此选项会导致分片迁移数据段,即使数据段大于配置的数据段大小。 该集合在迁移期间保持不可用状态。

要在没有这么长的阻塞期的情况下迁移这些大数据段,请参阅平衡超出大小限制的范围

writeConcern
文档
secondaryThrottle
布尔

可选。

  • 如果true ,则数据块迁移期间的每个文档移动都会传播到至少一个从节点,然后负载均衡器才会继续处理下一个文档。这相当于{ w: 2 }的写关注(write concern)。

    使用writeConcern选项指定不同的写关注(write concern)。

  • 如果为false ,负载均衡器不会等待复制到从节点,而是继续处理下一个文档。

有关更多信息,请参阅辅助限制。

范围迁移部分描述了范围如何在 MongoDB 上的分片之间移动。

仅在以下情况下使用moveRange

  • 初始数据摄取

  • 大批量导入操作

在大多数情况下,允许负载均衡器在分片集群中创建和平衡范围。

提示

另请参阅:

以下示例使用具有以下内容的collection:

  • 片键 x

  • 已配置数据块大小为 128 MB

  • 有边界的数据块: [x: 0, x: 100)

下表列出将minmax设置为各种值的结果:

min
max
结果
0
100
将范围内的所有文档移至接收分片。
10
30

创建三个子范围:

  • [x: 0, x: 10)

  • [x: 10, x: 30)

  • [x: 30, x: 100)

[x: 10, x: 30)中的所有文档移至接收分片。

0
20

创建两个子范围:

  • [x: 0, x: 20)

  • [x: 20, x: 100)

[x: 0, x: 20)中的所有文档移至接收分片。

40
100

创建两个子范围:

  • [x: 0, x: 40)

  • [x: 40, x: 100)

[x: 40, x: 100)中的所有文档移至接收分片。

下表列出了将min设置为各种值的结果:

min
键范围内的数据量
结果
0
x: 0x: 100之间包含的大小小于 128 MB。
将范围内的所有文档移至接收分片。
10
x: 0x: 100之间包含的大小小于 128 MB。

创建两个子范围:

  • [x: 0, x: 10)

  • [x : 10, x: 100)

[x: 10, x: 100)中的所有文档移至接收分片。

10
x: 10x: 30之间包含 128 MB。

创建三个子范围:

  • [x: 0, x: 10)

  • [x: 10, x: 30)

  • [x: 30, x: 100)

[x: 10, x: 30)中的所有文档移至接收分片。

下表列出了将max设置为各种值的结果:

max
键范围内的数据量
结果
100
x: 0x: 100之间包含的大小小于 128 MB。
将范围内的所有文档移至接收分片。
10
x: 0x: 100之间包含的大小小于 128 MB。

创建两个子范围:

  • [x: 0, x: 10)

  • [x : 10, x: 100)

[x: 0, x: 10)中的所有文档移至接收分片。

30
x: 10x: 30之间包含 128 MB。

创建三个子范围:

  • [x: 0, x: 10)

  • [x: 10, x: 30)

  • [x: 30, x: 100)

[x: 10, x: 30)中的所有文档移至接收分片。

后退

movePrimary