文档菜单
文档首页
/
MongoDB 手册
/ / /

moveRange

本页内容

  • 定义
  • 兼容性
  • 语法
  • 命令字段
  • 注意事项
  • 示例
moveRange

新功能在版本6.0.

中移动范围之间分片。运行moveRange命令,同时使用mongos实例和管理数据库

此命令在以下环境中部署的部署中可用

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

注意

此命令在所有MongoDB Atlas集群中都受支持。有关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,给定一个包含分片键min的块C,其中maxC的排他性上限或C包含分片键max,则以下方式确定min

  • 如果min(C)max之间的数据量小于每个集合的块大小或默认块大小,则选择块的最低值作为min = min(C)

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

max
key

要移动的键范围的最高键。如果不指定min,则为必需。

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

  • 如果minmax(C)之间的数据量小于每集合块大小或默认块大小,则块的最大值将选择为max = max(C)

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

布尔值

可选。

标志,用于确定命令是否可以移动一个范围,该范围太大而无法迁移(请参阅迁移块大小限制)。该范围可能或可能没有标记为大块。

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

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

默认为false

警告

带有forceJumbo=truemoveRange命令会阻止集合上的读写操作。

此选项会导致即使块的大小大于配置的块大小,也会迁移块。在迁移期间,集合保持不可用。

要在此长时间阻塞期间迁移这些大块,请参阅平衡超出大小限制的范围

writeConcern
文档

可选。

具有写入关注点的文档。

默认是w: majority

secondaryThrottle
布尔值

可选。

  • 如果true,则在平衡器处理下一个文档之前,每个文档移动都至少传播到一个辅助节点。这相当于写入关注点为{ w: 2 }

    使用writeConcern选项指定不同的写入关注点。

  • 如果false,则平衡器不会等待复制到辅助节点,而是继续处理下一个文档。

有关更多信息,请参阅辅助节点节流

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

仅在某些场景下使用 moveRange,例如

  • 数据初始导入

  • 大量批量导入操作

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

提示

另请参阅

以下示例使用一个具有

  • 分片键 x

  • 配置的128MB分片大小

  • 边界为 [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
小于 128 MB 的数据包含在键 x: 0x: 100 之间。
将范围内的所有文档移动到接收器分片。
10
小于 128 MB 的数据包含在键 x: 0x: 100 之间。

创建两个子范围

  • [x: 0, x: 10)

  • [x : 10, x: 100)

[x: 10, x: 100) 区间内的所有文档移动到接收器分片。

10
128 MB 的数据包含在键 x: 10x: 30 之间。

创建三个子范围

  • [x: 0, x: 10)

  • [x: 10, x: 30)

  • [x: 30, x: 100)

[x: 10, x: 30) 区间内的所有文档移动到接收器分片。

以下表格列出了将 max 设置为各种值的测试结果

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

创建两个子范围

  • [x: 0, x: 10)

  • [x : 10, x: 100)

[x: 0, x: 10) 区间内的所有文档移动到接收器分片。

30
128 MB 的数据包含在键 x: 10x: 30 之间。

创建三个子范围

  • [x: 0, x: 10)

  • [x: 10, x: 30)

  • [x: 30, x: 100)

[x: 10, x: 30) 区间内的所有文档移动到接收器分片。

返回

movePrimary