【MongoDB】查看集合是否分片 及片健创建、删除

查看分片键

MongoDB会把分片过的集合保存在config.collection集合中,若需要查看分片键,则需要根据该集合进行查找。官方的其他很多分片快捷命令也都处于config库

三种方式

去config库中查询

这种办法可以查看分片键信息

db.collections.find( {'dropped':{$ne:true},'_id':'dbname.collectname'})

查看数据分布

use dbname
 db.colname.getShardDistribution() #可以查看数据分布

最简单的方法

use databaseName;
db.collectionName.stats().sharded #简单的返回true或者false

查看分片状态

查看分片状态
use  dbname
sh.status()

创建片健

在 指定testdb分片生效   

mongodb 集群搭建:分片+副本集_我家小宝_朱朱的博客-CSDN博客

#指定test分片生效
db.runCommand( { enablesharding :"testdb"});
或者
sh.enableSharding("test")

在collectionname 所在的db_name建索引

在use  admin库执行shareCollection

指定分片的片键

片键有两种模式:hash模式,range模式

使用hash模式分片:  记录在各片上的分布比较平均

建索引:
mongos> db.person.ensureIndex({_id:" hashed"})
mongos> sh.shardCollection( "new.person", { "_id": "hashed" } )

使用range模式分片

mongos> sh.shardCollection( "new.person2", { "name": 1 } )

要分片的库原来有数据的情况下,先建index,然后再指定片键


mongos> sh.enableSharding("new2")
mongos> use new2
mongos> db.user2.createIndex( { "username": 1 } )
mongos> sh.shardCollection( "new2.user2", { "username": 1 } )

语法:

sh.shardCollection(namespacekeyuniqueoptions)

设置唯一性主键 

mongos> sh.shardCollection( "new2.user2", { "username": 1 } ,{unique:true})

测试分片配置结果

mongo  127.0.0.1:20000
#使用testdb
use  testdb;
#插入测试数据
for (var i = 1; i <= 100000; i++)
db.table1.save({id:i,"test1":"testval1"});
#查看分片情况如下,部分无关信息省掉了
db.table1.stats();
 
{
        "sharded" : true,
        "ns" : "testdb.table1",
        "count" : 100000,
        "numExtents" : 13,
        "size" : 5600000,
        "storageSize" : 22372352,
        "totalIndexSize" : 6213760,
        "indexSizes" : {
                "_id_" : 3335808,
                "id_1" : 2877952
        },
        "avgObjSize" : 56,
        "nindexes" : 2,
        "nchunks" : 3,
        "shards" : {
                "shard1" : {
                        "ns" : "testdb.table1",
                        "count" : 42183,
                        "size" : 0,
                        ...
                        "ok" : 1
                },
                "shard2" : {
                        "ns" : "testdb.table1",
                        "count" : 38937,
                        "size" : 2180472,
                        ...
                        "ok" : 1
                },
                "shard3" : {
                        "ns" : "testdb.table1",
                        "count" :18880,
                        "size" : 3419528,
                        ...
                        "ok" : 1
                }
        },
        "ok" : 1
}

可以看到数据分到3个分片,各自分片数量为: shard1 “count” : 42183,shard2 “count” : 38937,shard3 “count” : 18880。已经成功了!

发片后,片健不可改变;一个集合只能有一个片健;片健必须有索引

删除片健

发片后,片健不可改变;一个集合只能有一个片健;片健必须有索引,再建片健

--导出整张表
mongoexport -h ip  --port 27017 -d db_nane -c collectionname -o /data/zcy/pdm1

-- 删除表
> db.PDM_产品小类.drop()

-- 导入数据
mongoimport -h ip --port 27017  -d db_nane -c collectionname --upsert --file /data/zcy/pdm1

-- 建索引 (业务索引)

db.collectionname.createIndex({"metadata.id":1,"metadata.systemtag":1}) 

--千万不要建 ,{unique: true} 唯一,否则建片健是使用唯一时 会报错

--建已有表的片健前,建索引

 db.collectionname.createIndex({"metadata.systemtag":1,"metadata.id":1},{unique: true}) 

--建片健

sh.shardCollection( "dbname.collectionname",{"metadata.systemtag":1,"metadata.id":1} ,{unique:true} )

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MongoDB分片集群是一种将数据分布在多个服务器上的方式,以实现高可用性和横向扩展性。下面是一些关于MongoDB分片集群的常见问题和答案: 1. 什么是MongoDB分片集群? MongoDB分片集群是一种将数据分割成多个片段并分布在多个服务器上的方法。每个片段(shard)都是一个独立的MongoDB实例,可以存储一部分数据。通过将数据分散在多个片段上,可以实现数据的水平扩展和负载均衡。 2. 如何设置MongoDB分片集群? 要设置MongoDB分片集群,需要遵循以下步骤: a. 部署和配置一个或多个Config Server。Config Server用于存储集群的元数据,如分片键范围和配置信息。 b. 部署和配置一个或多个mongos路由器。mongos路由器是客户端与分片集群交互的入口点。 c. 部署和配置一个或多个shard服务器。每个shard服务器都是一个独立的MongoDB实例,可以存储一部分数据。 d. 启动mongos路由器,并将其连接到Config Server和shard服务器。 e. 创建分片集合,并根据需要启用分片。 3. 分片键是什么?如何选择分片键? 分片键是用来决定将数据分配到哪个片段的字段。选择合适的分片键非常重要,以确保数据在分片集群中均匀分布。通常,一个好的分片键应该满足以下条件: a. 数据均匀分布:分片键的值应该能够在不同的分片之间平均分配。 b. 查询性能:选择经常被查询的字段作为分片键,以便查询可以在单个片段上执行而不需要扫描整个集群。 c. 数据增长:选择一个能够支持数据增长的分片键,以避免在未来需要重新分片。 4. 如何监控和管理MongoDB分片集群? MongoDB提供了一些工具和功能来监控和管理分片集群。一些常见的方法包括: a. 使用mongos路由器的命令行工具或管理界面来管理集群配置、添加/删除shard以及监控性能指标。 b. 使用MongoDB的内置监控工具,如mongostat和mongotop,来监视集群的吞吐量、延迟和负载情况。 c. 使用第三方监控工具,如Prometheus、Grafana等,来获取更详细的指标和可视化。 这些是关于MongoDB分片集群的一些常见问题和答案。希望能对你有所帮助!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值