mongodb片健的选取及更改

1、总的原则:选键的时候多考虑以下问题。
  1. 写操作是怎么样的,有多大?
  2. 系统每小时会写多少数据,每天呢,高峰期呢
  3. 那些字段是随机的,那些是增长的
  4. 读操作是怎么样的,用户在访问那些数据
  5. 数据索引做了吗?应不应该索引呢?
  6. 数据总量有多少
总的来说,在进行分片前,你需要清楚的了解你的数据。
 
2、注意事项:
分片后,片健不可改变;一个集合只能有一个片健;片健必须有索引。
 
3、工作案例讲解:
在工作的时候由于没有和研发沟通,按id分片了,后来研发发现没法update
先按id分片
激活数据库及集合的分片
mongos> use admin
mongos> db.runCommand({ enablesharding:"mobstat " })
mongos> db.runCommand({ shardcollection: "mobstat.datelocos", key: { _id:1 }})
mongos> use mobstat
mongos> db.datelocos.update({ "date" : 20170816 , "loc" : 0 , "event" : 5 , "os" : 1 , "strvalue" : "123.abc.com"}, { "$inc" : { "count" : 1}})
报错如下:For non-multi updates, must have _id or full shard key ({ _id: 1.0 }) in query
更改date做片健
mongos> db.runCommand({ shardcollection: "mobstat.datelocos", key: { date:1 }})
{ "ok" : 0, "errmsg" : "already sharded" }
 
那么问题来了,怎么更改片健呢?
先备份当前的集合,删除当前集合,再导入集合
mongodump  -d mobstat -c datelocos  --port 30000 -o /tmp
mongorestore  -d mobstat -c datelocos   --port 30000   /tmp/mobstat/datelocos.bson
 
mongos> use mobstat
mongos> db.datelocos.ensureIndex({date:1})
mongos> use admin
mongos> db.runCommand({ shardcollection: "mobstat.datelocos", key: {date:1 }})
再次update
mongos> db.datelocos.update({ "date" : 20170816 , "loc" : 0 , "event" : 5 , "os" : 1 , "strvalue" : "123.abc.com "}, { "$inc" : { "count" : 1}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
看到已经成功更新了
 
再看下集合分片状态
mongos> db.datelocos.stats()
{
        "sharded" : true,
        "systemFlags" : 0,
        "userFlags" : 1,
        "ns" : "mobstat.datelocos",
        "count" : 164791,
        "numExtents" : 24,
        "size" : 58698512,
        "storageSize" : 131325952,
        "totalIndexSize" : 10980368,
        "indexSizes" : {
                "_id_" : 5543328,
                "date_1" : 5437040
        },
        "avgObjSize" : 356.1997439180538,
        "nindexes" : 2,
        "nchunks" : 112,
        "shards" : {
                "shard1" : {
                        "ns" : "mobstat.datelocos",
                        "count" : 53002,
                        "size" : 20424032,
                        "avgObjSize" : 385,
                        "storageSize" : 22507520,
                        "numExtents" : 7,
                        "nindexes" : 2,
                        "lastExtentSize" : 11325440,
                        "paddingFactor" : 1,
                        "systemFlags" : 0,
                        "userFlags" : 1,
                        "totalIndexSize" : 3744608,
                        "indexSizes" : {
                                "_id_" : 1806896,
                                "date_1" : 1937712
                        },
                        "ok" : 1
                },
                "shard2" : {
                        "ns" : "mobstat.datelocos",
                        "count" : 55952,
                        "size" : 21596800,
                        "avgObjSize" : 385,
                        "storageSize" : 22507520,
                        "numExtents" : 7,
                        "nindexes" : 2,
                        "lastExtentSize" : 11325440,
                        "paddingFactor" : 1,
                        "systemFlags" : 0,
                        "userFlags" : 1,
                        "totalIndexSize" : 3989888,
                        "indexSizes" : {
                                "_id_" : 1913184,
                                "date_1" : 2076704
                        },
                        "ok" : 1
                },
                "shard3" : {
                        "ns" : "mobstat.datelocos",
                        "count" : 55837,
                        "size" : 16677680,
                        "avgObjSize" : 298,
                        "storageSize" : 86310912,
                        "numExtents" : 10,
                        "nindexes" : 2,
                        "lastExtentSize" : 27869184,
                        "paddingFactor" : 1,
                        "systemFlags" : 1,
                        "userFlags" : 1,
                        "totalIndexSize" : 3245872,
                        "indexSizes" : {
                                "_id_" : 1823248,
                                "date_1" : 1422624
                        },
                        "ok" : 1
                }
        },
        "ok" : 1
}
看到集合已经均衡的分配到了3个shard上
 
 
 
 
原文地址:https://www.cnblogs.com/manger/p/7380703.html