mongodb表由未分片修改为分片

环境:

mongodb:4.4.22

 

1.范围分片:

刚开始没有使用分片,后面写入数据了使用分片
在路由服务器上执行:

复制代码

mongos> use admin
mongos> sh.shardCollection("db_pushmsg.app_message_nofenpian",{"user_id": 1})
{
        "ok" : 0,
        "errmsg" : "Please create an index that starts with the proposed shard key before sharding the collection",
        "code" : 72,
        "codeName" : "InvalidOptions",
        "operationTime" : Timestamp(1689918228, 5),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1689918228, 5),
                "signature" : {
                        "hash" : BinData(0,"MLDP+DoqO+0iD9jhEzrBb2dB+Lw="),
                        "keyId" : NumberLong("7257793727152783361")
                }
        }
}
复制代码

 

解决办法:
创建索引

mongos> use db_pushmsg
mongos>db.app_message_nofenpian.createIndex({"user_id":1})
mongos>db.app_message_nofenpian.getIndexes()

再次执行分片

复制代码
mongos> use admin
mongos>  sh.shardCollection("db_pushmsg.app_message_nofenpian",{"user_id": 1})
{
        "collectionsharded" : "db_pushmsg.app_message_nofenpian",
        "collectionUUID" : UUID("5382ae8e-2e07-4185-bdd0-db8ee85bad5e"),
        "ok" : 1,
        "operationTime" : Timestamp(1689918641, 5),
        "$clusterTime" : {
                "clusterTime" : Timestamp(1689918641, 5),
                "signature" : {
                        "hash" : BinData(0,"WSjbiHdll3P7O1ITDltvVdMijwk="),
                        "keyId" : NumberLong("7257793727152783361")
                }
        }
}
复制代码

 

查看是否平衡
mongos> sh.isBalancerRunning()
true

平衡完成后会变成false
mongos> sh.isBalancerRunning()
false

发现这个输出不是很正确,输出false后,看到后台日志还在进行分片

 

{"t":{"$date":"2023-11-08T20:20:17.446-05:00"},"s":"I",  "c":"SHARDING", "id":20997,   "ctx":"Uptime-reporter","msg":"Refreshed RWC defaults","attr":{"newDefaults":{}}}
{"t":{"$date":"2023-11-08T20:20:27.451-05:00"},"s":"I",  "c":"SHARDING", "id":20997,   "ctx":"Uptime-reporter","msg":"Refreshed RWC defaults","attr":{"newDefaults":{}}}

 

 

 

 

 

2.hash分片

 

复制代码
mongos> use admin
mongos>db.runCommand({enablesharding:"db_pushmsg" })

mongos>use db_pushmsg
mongos>db.app_message_all.createIndex({"_id":"hashed"})

mongos> use admin
mongos> sh.shardCollection("db_pushmsg.app_message_all",{"_id": "hashed"})
复制代码

 

 

 

创建索引(注意这里必须指定hashed)

mongos> use db_pushmsg
mongos> db.app_message_all.createIndex({"_id":"hashed"})

 

发现分片后,要等很久,原有分片的数据才自动删除。

 

posted @   slnngk  阅读(221)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
历史上的今天:
2022-07-21 安装部署opengauss主从(轻简版,非OM方式1主2从)
点击右上角即可分享
微信分享提示