MongoDB Sharding分片方法

一、sh.addShard(<url>)

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

例子

必须指定副本集和主机名。如果您为副本集的任何一个成员指定额外的主机名,那么如果我们指定任何额外的主机名,则所有主机名都必须与同一个副本集相关。

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

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

二、sh.addShardTag(shard, tag)

该方法用于返回 sh.addShardToZone() 并为每个 shard 分配一个 shard id。指定的功能仍然适用于 MongoDB 3.2。但在 MongoDB 3.4 中,它提供区域分片作为标签感知分片的子节点。

例子

下面的例子添加三个标签,Java, MongoDB, 和Python, 到三个分片:

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)

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

六、convertShardKeyToHashed(<Object>)

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

例子

考虑一个使用散列分片键的分片 key [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 的新范围,因为新范围会与现有范围重叠。

例子

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

sh.updateZoneKeyRange(  
   "yiidian.collection",  
   { t : 10 },  
   { t : 20 },  
   "alpha"  
)  

现在,通过将 null 传递给 zone 字段,下面的操作将删除先前创建的范围。

sh.updateZoneKeyRange(  
   "yiidian.collection",  
   { t : 10 },  
   { t : 20 },  
   null  
)  

目标范围的边界必须匹配最小值和最大值。下面的查询尝试删除旧范围,但指定 { t : 0 } 作为最小范围:

sh.updateZoneKeyRange(  
   "yiidian.collection",  
   { t : 0 },  
   { t : 20 },  
   null  
)  

热门文章

优秀文章