MongoDB 分片命令
分片是一种将数据分布在不同机器上的方法。MongoDB可以使用分片来支持在非常庞大的数据集和高吞吐量操作上的部署。
MongoDB sh.addShard() 命令
使用此命令添加分片的复制集到分片集群。如果我们将其添加到集群的分片中,它会影响数据块的平衡。它开始转移数据块以实现集群的平衡。
语法:
sh.addShard("<replica_set>/<hostname><:port>")
示例:
sh.addShard("repl0/mongodb3.example.net:27327")
输出:
它将添加一个分片,用于指定副本集的名称和至少一个副本集成员的主机名。
MongoDB sh.addShardTag()命令
该命令在分片中使用标签或标识符进行支持。 MongoDB 使用这些标识符将处于标记范围内的线程发送到指定的分片。
示例:
sh.addShardTag("shard0000", "NYC")
sh.addShardTag("shard0001", "LAX")
sh.addShardTag("shard0002", "NRT")
它将为三个不同的片段添加三个标签。
MongoDB sh.addShardToZone(shard, zone) 命令
此命令将指定的分片添加到指定的分区。此命令在3.4版本中引入。只有在分区范围内的那些块才会被分配到这些分片上。
示例:
sh.addShardToZone("shard0000", "JFK")
sh.addShardToZone("shard0001", "LAX")
sh.addShardToZone("shard0002", "NRT")
// 将LGA与shard0000关联起来:
sh.addShardToZone("shard0000", "LGA")
// shard0000与LGA区域和JFK区域都相关联。
MongoDB的sh.addTagRange(namespace, min, max, tag)命令
使用此命令,将分片键值范围附加到分片标签。区域范围始终排除上限,并包括下限。
示例:
我们有一个分片键{state: 1, zip: 1},
下面的示例生成一个特定的标签范围,覆盖加利福尼亚州的邮政编码:
sh.addTagRange( "statedb.collection",
{ state: "CA", zip: MinKey },
{ state: "CA", zip: MaxKey },
"NY"
)
MongoDB sh.disableBalancing(name_space) 命令
使用该命令可以禁用参数中指定的分片。对于相同集群中的其他分片集合,它不会对分块的平衡产生任何影响。
MongoDB sh.enableBalancing(namespace) 命令
使用该命令可以启用参数中指定的分片。对于相同集群中的其他分片集合,它不会对分块的平衡产生任何影响。
MongoDB sh.disableAutoSplit 命令
该命令会从配置设置集合中移除自动分割标志。当分片集群启用了自动分割选项后,MongoDB会根据分片键值自动将其分割成分块。
只能在连接到指定mongos实例的mongo shell中执行sh.disableAutoSplit()命令。如果在mongod实例上运行此命令,将返回错误。
MongoDB updateZoneKeyRange 命令
使用此命令可以创建或删除分片键值范围与区域之间的关系。使用db.runCommand( {
语法:
{
updateZoneKeyRange: <string>,
min: <document>,
max: <document>,
zone: <string> | <null>
}
示例:
下面的示例在alpha区域创建了一个下界为1、上界为10的范围:
admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : "alpha"
}
)
以下查询通过将zone字段设置为null来移除先前创建的范围。
admin = db.getSiblingDB("admin")
admin.runCommand(
{
updateZoneKeyRange : "exampledb.collection",
min : { a : 1 },
max : { a : 10 },
zone : null
}
)
现在检查你的分片的状态: