MongoDB Sharding分片技术

分片是一种将数据分布在不同机器上的方法。MongoDB 可以使用分片来支持在非常大规模的数据集和高吞吐量操作上的部署。

一、MongoDB sh.addShard(<url>) 命令

使用此命令添加到分片集群的分片副本集。如果我们将它添加到集群的分片中,它会影响块的平衡。它开始传输块以平衡集群。

<replica_set>/<hostname><:port>,<hostname><:port>, ...

语法:

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 根据分片键值自动将其拆分为块。

sh.disableAutoSplit() 只能从连接到指定 mongos 实例的 mongo shell 执行。如果在 mongod 实例上运行 sh.disableAutoSplit() 命令会返回错误

八、MongoDB updateZoneKeyRange 命令

将在此命令的帮助下创建或删除一系列分片键值和区域之间的关系。使用 db.runCommand( { <command> } ) 方法运行 updateZoneKeyRange。您必须在管理数据库上运行 addShardToZone。

语法:

{  
  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"  
   }  
)  

以下查询通过将 null 传递给 zone 字段来删除先前创建的范围。

admin = db.getSiblingDB("admin")  
admin.runCommand(  
   {  
      updateZoneKeyRange : "exampledb.collection",  
      min : { a : 1 },  
      max : { a : 10 },  
      zone : null  
   }  
)  

现在检查分片的状态:

热门文章

优秀文章