updateZoneKeyRange
¶3.4版的新功能。
的updateZoneKeyRange
管理命令可以创建或删除范围片键值和之间的关联
区域。
在MongoDB中4.0.2开始,您可以运行
updateZoneKeyRange
数据库命令及其助手
sh.updateZoneKeyRange()
和sh.addTagRange()
上unsharded集合或不存在的集合。
要运行updateZoneKeyRange
,请使用方法。db.runCommand( { <command> } )
您必须addShardToZone
在管理数据库上运行。
该updateZoneKeyRange
命令具有以下语法:
该命令包含以下字段:
参数 | 类型 | 描述 |
---|---|---|
updateZoneKeyRange |
串 | 与范围关联的集合的名称空间。 必须将收集分片,命令才能成功执行。 |
min |
文献 | 分片键值范围的下限值。 以形式指定分片键的每个字段。该值必须与分片键具有相同的BSON类型。 |
max |
文献 | 分片键值范围的排他上限。 以形式指定分片键的每个字段。该值必须与分片键具有相同的BSON类型。 |
zone |
串 | 该区域的名称与由界定的范围相关联
如果该值与现有区域不匹配,则命令失败。 指定 |
如果没有区域范围与传递给的最小和最大边界匹配
updateZoneKeyRange
,则不会删除任何内容。
仅updateZoneKeyRange
在连接到mongos
实例时
发出。
该mongo
外壳提供了两种帮助方法:
sh.updateZoneKeyRange()
用于将一定范围的分片键值添加到区域中。sh.removeRangeFromZone()
用于从区域中删除一定范围的分片键值。您无法创建范围上限和下限与分片集合的现有范围重叠的分片键值范围。例如,给定现有的1
to 范围10
,您不能创建5
to 20
的新范围,因为新范围将与现有范围重叠。
一个区域可以具有与其关联的多个数据范围,但是一个范围最多可以与一个区域关联。
删除范围和区域之间的关联时,
updateZoneKeyRange
请勿删除该区域。使用
removeShardFromZone
命令删除区域和碎片之间的关联。
有关分片群集中区域的更多信息,请参见区域手册页。
在MongoDB中4.0.2开始,您可以运行
updateZoneKeyRange
数据库命令及其助手
sh.updateZoneKeyRange()
和sh.addTagRange()
上unsharded集合或不存在的集合。
小费
在版本4.0.3中更改:通过在分片一个空的或不存在的集合之前定义区域和区域范围,分片收集操作将为定义的区域范围以及所有其他覆盖整个区域范围的块创建块。分片键值,并根据区域范围执行初始块分配。块的这种初始创建和分配允许更快地设置分区分片。在初始分配之后,平衡器将管理后续的块分配。
有关示例,请参见为空集合或不存在的集合预定义区域和区域范围。
成功运行之后updateZoneKeyRange
,在下一轮平衡器中可能会有块迁移。
将范围添加到区域后,必须先运行平衡器,才能将范围覆盖的任何块迁移到该区域内的碎片。给定分片集群的已配置区域,在平衡完成之前,某些块可能驻留在错误的分片上。
删除范围和区域之间的关联会删除约束,使该区域内的分片上的范围内的块保持覆盖。在下一轮平衡器期间,平衡器可以迁移该区域先前覆盖的块。
有关迁移如何在分片群集中工作的更多信息,请参见分片群集平衡器的文档。
区域范围始终包括下边界,不包括上边界。
从MongoDB 4.0.2开始,删除集合将删除其关联的区域/标签范围。
在早期版本中,MongoDB不会删除已删除集合的标签关联,并且如果您以后创建具有相同名称的新集合,则旧标签关联将应用于新集合。
对于以身份验证运行的分片群集,您必须以以下任一身份进行身份验证:
具有特权的用户包括对config
数据库中各种集合的指定操作的用户:
或者,
特权包含enableSharding
在群集资源上的
用户(从版本4.2.2、4.0.14、3.6.16开始可用)。
在clusterAdmin
或clusterManager
内置角色有发放相应的权限updateZoneKeyRange
。有关
更多信息,请参见基于角色的访问控制的文档页面。
给定一个分片exampledb.collection
键为的分片集合,以下操作
将在区域上创建一个范围为下限和上限为的范围:{ a
: 1 }
1
10
alpha
以下操作通过传递null
到该zone
字段来删除先前创建的范围
。
在min
和max
必须在目标范围内的完全范围一致。以下操作尝试删除先前创建的范围,但将其指定为界限:{ a : 0 }
min
虽然的范围为,但包含现有范围,但这不是完全匹配,因此
不会删除任何内容。{ a : 0 }
{ a : 10 }
updateZoneKeyRange
给定一个分片exampledb.collection
键为的分片集合,以下操作将创建一个范围,该范围覆盖of的下限和上限,并将其与区域关联:{ a
: 1, b : 1 }
{ a: 1, b : 1 }
{ a : 10, b : 10}
alpha