• 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上
     
     
     
     
  • 相关阅读:
    Android应用程序资源的查找过程分析
    Android应用程序资源管理器(Asset Manager)的创建过程分析
    Android应用程序资源的编译和打包过程分析
    跨平台的高性能的C++通讯库
    函数memstr
    chrome必备插件
    01背包的优化问题
    高精度小结/。。。
    关于日期的计算问题。。。。。
    终于入手了01背包问题!!
  • 原文地址:https://www.cnblogs.com/manger/p/7380703.html
Copyright © 2020-2023  润新知