sh.addTagRange()
定义
sh.addTagRange(namespace, minimum, maximum, tag)
注意
此方法的别名为
sh.updateZoneKeyRange()
。 MongoDB提供区域分片作为标签感知分片的后继方案。将一系列分片键值附加到使用
sh.addShardTag()
方法创建的分片标签。您可以在未分片的集合或不存在的集合上运行
updateZoneKeyRange
数据库命令及其助手sh.updateZoneKeyRange()
和sh.addTagRange()
。sh.addTagRange()
采用以下参数:Parameter类型说明namespace
字符串要标记的collection的命名空间。minimum
文档要包含在标签中的分片键范围的最小值。 最低限度是包含性匹配。 以<fieldname>:<value>
的形式指定最小值。 此值必须与分片键属于相同的 BSON 类型。maximum
文档要包含在标签中的分片键范围的最大值。 最大值为独占匹配。 以<fieldname>:<value>
的形式指定最大值。 此值必须与分片键属于相同的 BSON 类型。tag
字符串要附加由minimum
和maximum
参数指定的范围的标签的名称。使用
sh.addShardTag()
可确保负载均衡器将指定范围内存在的文档迁移到特定分片或分片集。仅在连接到 实例时发出
sh.addTagRange()
mongos
。
兼容性
此方法可用于以下环境中托管的部署:
MongoDB Atlas:用于云中 MongoDB 部署的完全托管服务
重要
M 0 、M 2和 M 5集群不支持此命令。 有关更多信息,请参阅不支持的命令。
MongoDB Enterprise:基于订阅、自我管理的 MongoDB 版本
MongoDB Community:源代码可用、免费使用且可自行管理的 MongoDB 版本
行为
边界
区域范围始终包括下边界,但不包括上边界。
空集合或不存在集合的初始数据段分布
如果您考虑对空集合或不存在的集合执行 区域分片sh.addTagRange()
,请在对集合分片 之前 使用 创建区域和区域范围。在空集合或不存在的集合上创建区域和区域范围允许MongoDB在对集合进行分片数据块优化初始数据段创建和分配进程。 与在分片后创建区域相比,这种优化的进程支持更快地设置分区分片,并且负载负载均衡器开销更少。 负载均衡器在优化初始数据块创建和分配后执行所有数据块管理。
有关为初始数据块分布定义区域和区域范围的示例,请参阅为空的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" )