定义
sh.addTagRange(namespace, minimum, maximum, tag)注意
此方法的别名为
sh.updateZoneKeyRange()。 MongoDB提供区域分片作为标签感知分片的后继方案。将一系列分片键值附加到使用
sh.addShardTag()方法创建的分片标签。You can run
updateZoneKeyRangedatabase command and its helperssh.updateZoneKeyRange()andsh.addTagRange()on an unsharded collection or a non-existing collection.sh.addTagRange()采用以下参数:Parameter类型说明namespace字符串
要标记的collection的命名空间。
minimum文档
要包含在标签中的分片键范围的最小值。 最低限度是包含性匹配。 以
<fieldname>:<value>的形式指定最小值。 此值必须与分片键属于相同的 BSON 类型。maximum文档
要包含在标签中的分片键范围的最大值。 最大值为独占匹配。 以
<fieldname>:<value>的形式指定最大值。 此值必须与分片键属于相同的 BSON 类型。tag字符串
要附加由
minimum和maximum参数指定的范围的标签的名称。使用
sh.addShardTag()可确保负载均衡器将指定范围内存在的文档迁移到特定分片或分片集。Only issue
sh.addTagRange()when connected to amongosinstance.
兼容性
此方法可用于以下环境中托管的部署:
- MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
M0 和 Flex 集群不支持此命令。有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
边界
区域范围始终包括下边界,但不包括上边界。
空集合或不存在集合的初始数据段分布
If you are considering performing zone sharding on an empty or non-existent collection, use sh.addTagRange() to create the zones and zone ranges before sharding the collection. Creating zones and zone ranges on empty or non-existing collections allows MongoDB to optimize the initial chunk creation and distribution process when sharding the collection. This optimized process supports faster setup of zoned sharding with less balancer overhead than creating zones after sharding. The balancer performs all chunk management after the optimized initial chunk creation and distribution.
有关为初始数据块分布定义区域和区域范围的示例,请参阅为空的collection或非现有的collection预定义区域和区域范围。
使用复合哈希分片键进行初始数据段分配
MongoDB 支持对复合哈希索引上的集合进行分片。 在复合哈希分片键上对空集合或不存在的集合进行分片时,MongoDB 可以执行优化的初始数据段创建和分配。
如果哈希字段是分片键的前缀(即分片键中的第一个字段),则必须满足以下所有条件,MongoDB 才能执行初始数据段创建和分发:
该集合具有单个区域范围,所有下限字段为
MinKey,所有上限字段为MaxKey。
如果哈希字段不是分片分片键的前缀(即分片分片键具有一个或多个非哈希前导字段),则必须满足以下所有条件, MongoDB才能执行初始数据块创建和分配:
该集合为不同前缀字段值的每个组合(即 哈希字段之前的所有字段)。
对于每个区域范围的下限,请为哈希字段和所有后续字段指定
MinKey。对于每个区域范围,至少有一个上限前缀字段必须与其对应的下限前缀字段不同。
有关在复合哈希分片键上为初始数据块分布定义区域和区域范围的更完整示例,请参阅为空或不存在的collection预定义区域和区域范围。
删除的集合
删除集合将删除其关联的区域/标记范围。
在早期版本中,MongoDB 不会删除已删除集合的标签关联,如果您稍后创建同名的新集合,则旧标签关联将应用于新集合。
例子
给定分片键{state: 1, zip: 1} ,以下操作创建一个涵盖纽约州邮政编码的标签范围:
sh.addTagRange( "exampledb.collection", { state: "NY", zip: MinKey }, { state: "NY", zip: MaxKey }, "NY" )