📅  最后修改于: 2020-11-23 01:31:32             🧑  作者: Mango
在任何分片群集中,我们都可以使用此方法向其中添加分片副本集。 add shard方法始终在mongos实例上运行。
例
必须指定副本集和主机名。如果您为副本集的任何一个成员指定其他主机名,那么如果我们指定任何其他主机名,则所有主机名都必须与同一副本集相关。
下面的示例添加了一个名为replJTP的副本集,并且还指定了副本集的一个成员:
sh.addShard("replJTP/mongodb3.example.net:27327")
此方法用于返回sh.addShardToZone()并为每个分片分配一个分片ID。指定的功能仍适用于MongoDB 3.2。但是在MongoDB 3.4中,它提供了区域分片作为标记感知分片的子级。
例
以下示例将三个标记Java,MongoDB和Python到三个分片:
sh.addShardTag("shard0000", "Java")
sh.addShardTag("shard0001", "MongoDB")
sh.addShardTag("shard0002", "Python")
顾名思义,该方法用于为参数中的指定数据库启用分片。当我们为任何数据库启用分片时,我们可以使用sh.shardCollection()方法对指定数据库的集合进行分片。此方法包装enableSharding命令。
句法
sh.enableSharding(
,
)
例
以下示例为从mongos运行的JTP数据库启用分片:
sh.enableSharding("JTP")
此方法用于分片群集在指定的时间和间隔内启动平衡器。可以使用此方法为分片群集启用自动拆分选项。此方法还是balencerStart命令的包装。即开始平衡方法不等待。
停止平衡方法用于禁用分片群集中正在运行的平衡器。可以使用此方法删除对指定分片群集的自动拆分。如果在mongod实例上运行,sh.stopBalancer()方法将返回错误,我们只能在mongos实例上运行它。
该方法返回在参数中指定的输入对象的哈希值。该方法将指定的分片键转换为使用哈希索引所使用的类似哈希函数的哈希方法。同样,对于参数中的特定键,可以使用该方法查看哈希值是什么。
例
考虑一个使用哈希分片键[1]的分片集合。
use JTP
db.orders.createIndex( { _id: "hashed" } )
sh.shardCollection( "JTP.tutorial", { _id : "hashed" } )
如果集合中存在以下文档,则_id字段的哈希值用于分发文档:
{
_id: ObjectId("5b2be413c06d26ff9ca"),
"item" : "Java",
"qty" : 25
}
将范围的分片键值范围与区域关联。该方法的助手sh.updateZoneKeyRange()和sh.addTagRange()可以在数据库命令和未分片的集合上运行此方法。具有下限和上限重叠的分片键值范围不能借助于分片集合的现有范围来创建。
让我们举一个例子,我们现有一个10到20个键值的范围。我们无法创建15到30的新范围,因为新范围将与现有范围重叠。
例
在下面的示例查询中,我们有一个分片集合,即javaTpoint.collection,其分片键为{t:10}。它创建一个范围,其下限为10,上限为20,位于alpha区域:
sh.updateZoneKeyRange(
"javaTpoint.collection",
{ t : 10 },
{ t : 20 },
"alpha"
)
现在,通过将null传递给zone字段,下面的操作将删除先前创建的范围。
sh.updateZoneKeyRange(
"javaTpoint.collection",
{ t : 10 },
{ t : 20 },
null
)
目标范围的边界必须与最小值和最大值匹配。以下查询尝试删除旧范围,但将{t:0}指定为最小范围:
sh.updateZoneKeyRange(
"javaTpoint.collection",
{ t : 0 },
{ t : 20 },
null
)