On this page
sh.removeRangeFromZone()
在本页面
Definition
sh.
removeRangeFromZone
(* namespace , minimum , maximum *)- 3.4 版的新功能。
删除一系列分片键值和zone之间的关联。
sh.removeRangeFromZone()接受以下参数:
Parameter | Type | Description |
---|---|---|
namespace |
string | 分片集合的namespace与区域关联。 |
必须将收集分片以使操作成功。
| minimum
| document | shard key值范围的下限。
以<fieldname> : <value>
的形式指定分片键的每个字段。该值必须与分片键具有相同的 BSON 类型。
| maximum
| document | shard key个值的范围的上限。
以<fieldname> : <value>
的形式指定分片键的每个字段。该值必须与分片键具有相同的 BSON 类型。
使用sh.removeRangeFromZone()删除未使用的,过期的或有冲突的范围与区域之间的关联。
如果没有范围与传递给removeShardFromZone()的最小和最大范围匹配,则不会删除任何内容。
连接到mongos实例时仅发出sh.removeTagRange()。
Behavior
sh.removeShardFromZone()不会删除与指定范围关联的区域。
有关分片群集中区域的更多信息,请参见zone手册页。
Balancer
删除范围和区域之间的关联会删除约束,使该区域内的碎片上的范围保持的块数保持不变。在下一轮平衡器中,平衡器可以迁移该区域先前覆盖的块。
有关迁移如何在分片群集中工作的更多信息,请参见分片集群平衡器的文档。
Security
对于以authentication运行的分片群集,您必须通过以下任一方式进行身份验证:
or, alternatively
- 特权包括cluster资源上的enableSharding的用户(从版本 3.6.16 开始可用)。
内置clusterAdmin或clusterManager角色具有发布sh.removeRangeFromZone()的适当权限。有关更多信息,请参见基于角色的访问控制的文档页面。
Example
给定一个具有{ a : 1 }
的分片键的分片集合exampledb.collection
,以下操作将删除范围为1
的下限和10
的上限的范围:
sh.removeRangeFromZone( "exampledb.collection",
{ a : 1 },
{ a : 10 }
)
min
和max
必须与目标范围的边界完全匹配。以下操作尝试删除以前创建的范围,但将{ a : 0 }
指定为min
绑定:
admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 0 },
max : { a : 10 },
zone : null
}
)
尽管{ a : 0 }
和{ a : 10 }
的范围涵盖了现有范围,但它并不完全匹配,因此sh.removeRangeFromZone()不会删除任何内容。
复合分片键
给定一个具有{ a : 1, b : 1 }
的分片键的分片集合exampledb.collection
,以下操作将删除范围为{ a : 1, b : 1}
的下限和{ a : 10, b : 10 }
的上限的范围:
sh.removeRangeFromZone( "exampledb.collection",
{ a : 1, b : 1 },
{ a : 10, b : 10 }
)
在前面的示例中,如果存在一个范围为{ a : 1, b : 5 }
的下限和{ a : 10, b : 1 }
的上限,则该操作不会删除该范围,因为它与传递给sh.removeRangeFromZone()的最小值和最大值不完全匹配。