sh.updateZoneKeyRange()

在本页面

Definition

将一系列分片键值与zone关联。 sh.updateZoneKeyRange()接受以下参数:

Parameter Type Description
namespace string 分片集合的namespacezone关联。


必须将收集分片以使操作成功。
| minimum | document | shard key值范围的下限。
<fieldname> : <value>的形式指定分片键的每个字段。该值必须与分片键具有相同的 BSON 类型。
| maximum | document | shard key个值的范围的上限。
<fieldname> : <value>的形式指定分片键的每个字段。该值必须与分片键具有相同的 BSON 类型。
| zone | string |与以minimummaximum界定的分片键值范围相关联的区域的名称。

连接到mongos实例时仅发出sh.updateZoneKeyRange()

Behavior

您无法创建范围上限和下限与分片集合的现有范围重叠的分片键值范围。例如,给定现有范围110,则不能创建520的新范围,因为新范围将与现有范围重叠。

一个区域可以具有与其关联的多个数据范围,但是一个范围最多可以与一个区域关联。

有关分片群集中区域的更多信息,请参见zone手册页。

Balancer

将范围与区域关联后,必须先运行balancer,才能将区域覆盖的范围内的任何块迁移到该区域内的碎片。在平衡完成之前,给定分片群集的已配置区域,某些块可能驻留在错误的分片上。有关更多信息,请参见Balancer

有关迁移如何在分片群集中工作的更多信息,请参见分片集群平衡器手册页。

Bounds

区域范围始终包括下边界,不包括上边界。

Dropped Collections

如果您使用sh.updateZoneKeyRange()将区域范围添加到集合中,然后再删除该集合或其数据库,则 MongoDB 不会删除区域关联。如果以后创建具有相同名称的新集合,则旧区域关联将应用于新集合。

Security

对于以authentication运行的分片群集,您必须通过以下任一方式进行身份验证:

or, alternatively,

内置clusterAdminclusterManager角色具有发布sh.updateZoneKeyRange()的适当权限。有关更多信息,请参见基于角色的访问控制的文档页面。

Example

给定一个具有{ a : 1 }的分片键的分片集合exampledb.collection,以下操作将在alpha区域上创建范围为1下限和10上限的范围:

sh.updateZoneKeyRange(
   "exampledb.collection",
   { a : 1 },
   { a : 10 },
   "alpha"
)

以下操作通过将null传递到zone字段来删除先前创建的范围。

sh.updateZoneKeyRange(
   "exampledb.collection",
   { a : 1 },
   { a : 10 },
   null
)

minmax必须与目标范围的边界完全匹配。以下操作尝试删除以前创建的范围,但将{ a : 0 }指定为min绑定:

sh.updateZoneKeyRange(
   "exampledb.collection",
   { a : 0 },
   { a : 10 },
   null
)

尽管{ a : 0 }{ a : 10 }的范围涵盖了现有范围,但它并不完全匹配,因此updateZoneKeyRange不会删除任何内容。

复合分片键

给定分片集合exampledb.collection和分片密钥{ a : 1, b : 1 },以下操作将创建一个范围,该范围覆盖{ a: 1, b : 1 }的下限和{ a : 10, b : 10}的上限,并将其与alpha区域相关联:

sh.updateZoneKeyRange(
   "exampledb.collection",
   { a : 1, b : 1 },
   { a : 10, b : 10 },
   "alpha"
)

如果只想根据b的值创建范围,则在创建范围时必须指定a的整个范围。例如,以下操作在b上创建两个范围,并将它们与beta区域关联。

Note

先前定义的范围与本示例中定义的范围冲突。发出sh.removeRangeFromZone()操作以删除现有的冲突范围。

sh.updateZoneKeyRange(
   "exampledb.collection",
   { a : MinKey, b : 1 },
   { a : MaxKey, b: 10 },
   "alpha"
);

sh.updateZoneKeyRange(
   "exampledb.collection",
   { a : MinKey, b : 10 },
   { a : MaxKey, b: 20 },
   "beta"
);

MinKey总是比其他所有可能的值都低,而MaxKey总是比其他所有可能的值都低。将这些特殊值用于范围的上下限将捕获a的整个可能值空间。

首页