mongodb可以通过分片的方式扩展集群的性能,下面给出分片的具体操作方式。
添加一个分片
sh.addShard(“shardingName/127.0.0.1:27017”)
添加一个名为shardingName的分片,shardingName在搭建该副本集的时候已经指定,只需要指定一个副本集中的ip地址即可,集群会获取到新加进来的副本集的其他ip地址。当mongod服务的端口是27017时,端口可以不指定,默认27017。
分片
1.开启分片
sh.enableSharding(“dbName”)
对 dbName 数据库开启分片功能。
2.分片是针对于集合而言的,执行以下命令对集合进行分片。
sh.shardCollection(“dbName.collectionName”,{shardKey:1})
对 dbName 库的 collectionName 集合开启分片。片键为 shardKey 。shardKey可以是复合索引。shardKey请慎重选择,该字段无法重新选择,无法更新。
执行命令后,balancer会将原有数据切割为chunk,均匀分发到所有的分片上。
手动分片
有时候我们想要将某些集合分发到自己指定的目标分片上,这时候我们就要进行手动分片。
1.首先对目标分片打上标记。
sh.addShardTag(“shard1”,“targetShard”)
sh.addShardTag(“shard2”,“targetShard”)
2.进行分片
sh.addTagRange(“dbName.collectionName”,{shardKey:MinKey},{shardKey :MaxKey},“targetShard”)
该命令会将 dbName 库的 collectionName 集合的chunk均匀迁移到打了 targetShard 标记的分片上。{shardKey:MinKey},{shardKey :MaxKey}可以手动指定范围,容易造成chunk分布不均匀,谨慎选择。另外如果片键是复合索引,请不要使用shardKey代替具体字段名,会造成迁移chunk时报错。