MongoDB 分片方法

MongoDB 分片方法

sh.addShard(<url>)

在任何分片集群中,我们可以使用这个方法来添加一个分片副本集。添加分片的方法总是在mongos实例上运行。

示例

必须指定副本集和主机名。如果为副本集的任何一个成员指定了额外的主机名,则所有的主机名在指定了额外主机名的情况下,都必须与同一个副本集相关。

下面的示例添加了一个名为replJTP的副本集,并且还指定了副本集的一个成员:

sh.addShard("replJTP/mongodb3.example.net:27327")

sh.addShardTag(shard, tag)

此方法用于返回sh.addShardToZone()并将每个shard分配一个shard id。在MongoDB 3.2中仍适用指定的功能。但在MongoDB 3.4中,它提供了Zone sharding作为tag-aware sharding的子功能。

示例

以下示例将三个标记, Java 、 MongoDB 和 Python 添加到三个shards:

sh.addShardTag("shard0000", "Java")
sh.addShardTag("shard0001", "MongoDB")
sh.addShardTag("shard0002", "Python")

sh.enableSharding(database, primaryShard)

正如方法名称所示,它用于在参数中指定的数据库上启用分片。当我们为任何数据库启用分片时,可以使用sh.shardCollection()方法来对指定数据库的集合进行分片。该方法包装了enableSharding命令。

语法

sh.enableSharding(
   <database>,
   <primary shard> 
)

示例

以下示例启用从mongos运行的JTP数据库的分片:

sh.enableSharding("JTP")

sh.startBalancer(timeout, interval)

此方法用于启动指定时间和间隔的分片集群负载均衡器。可以使用此方法启用分片集群的自动拆分选项。此方法也是对balencerStart命令的包装。即启动负载均衡器的方法不会等待。

sh.stopBalancer(timeout, interval)

停止平衡器方法用于停用分片集群中的正在运行的平衡器。可以使用此方法移除指定分片集群的自动拆分。如果在mongod实例上运行sh.stopBalancer()方法会返回错误,我们只能在mongos实例上运行。

convertShardKeyToHashed(<Object>)

该方法返回指定参数的输入对象的散列值。该方法将指定的分片键转换为使用散列索引使用的类似散列函数的方法。此外,对于参数中的特定键,该方法可用于查看散列值将是什么。

示例

考虑一个使用哈希分片键的分片集合[1]

use JTP
db.orders.createIndex( { _id: "hashed" } )
sh.shardCollection( "JTP.tutorial", { _id : "hashed" } )

如果集合中存在以下文档,则使用_id字段的哈希值来分发文档:

{
  _id: ObjectId("5b2be413c06d26ff9ca"),
  "item" : "Java",
  "qty" : 25
}

sh.updateZoneKeyRange(namespace, minimum, maximum, zone)

将一段分片键值范围与区域关联起来。该方法的辅助方法sh.updateZoneKeyRange()和sh.addTagRange()可以在数据库命令或未分片的集合上运行该方法。如果一个分片键有一个有下限和上限的重叠范围,则不能使用现有的分片集合范围来创建该范围。

让我们举一个示例,假设我们有一个现有的10到20的键值范围。我们无法创建一个新的15到30的范围,因为新范围会与现有范围重叠。

示例

在下面的示例查询中,我们有一个名为javaTpoint.collection的分片集合,使用{t: 10}作为分片键。它在alpha区域创建了一个下限为10、上限为20的范围:

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
)

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程