zoukankan      html  css  js  c++  java
  • MongoDB 分片管理(四)数据均衡 -- 特大快

    1.1 特大快形成

    如果用date字段作为片键,集合中date是一个日期字符串,如:year/month/day,也就是说,mongoDB一天创建一个块。因块内所有文档的片键一样,因此这些块是不可拆分的。如果块超出了config.settings中设置的最大块大小,那么均衡器就无法移动这个块了。

    这种不可拆分和移动的块就叫做特大快,这种快相当难对付。

    1.2 特大快的表现

    出现特大快的表现之一是,某分片的大小增长速度要比其他分片快得多。也可使用sh.status()来检查

    是否出现了特大快:特大快会存在一个jumbo属性。

    可以使用dataSize命令检查块大小

    1)首先用config.chunks集合,产看块范围

    >use config

    >var chunks= db.chunks.find({"ns":"acme.analytics"}).toArray()

    2)根据这些块范围,找出可能的特大快

    >use dbName

    要小心,因为dataSize命令要扫描整个块的数据才知道块的大小。因此,要根据自己对数据了解,尽可能缩小

    搜索范围:比如,特大快是特定日期出现的吗?如11月11日系统很繁忙。。。

    1.3 分发特大快(修复特大快)

    未修复由特大快引发的集群不均衡,就必须将特大快均衡的分发到其他分片上。

    下面用from分片来代指特大快分片,以to分片来代指特大快即将迁至的分片。

    注意:多个from分片,则需要对每个from分片重复下列步骤

    1、关闭均衡器

    >sh.setBalancerState(false)

    2、MongoDB默认不允许移动大小超过最大快大小设定值的块。因此,需要调整最大快大小。单位MB

    >use config

    >db.setting.findOne({_id:chunksize})

    >db.settings.save({"_id":"chunksize","value":10000})

    3、使用moveChunk命令将特大快从from分片移至to分片

    如担心迁移对性能影响,可使用secondaryThrootle选项,放慢迁移过程,减缓对系统性能影响

    >db.adminCommand(

    {"moveChunk":"acme.analytics",

    "find":{"date":new Date("10/23/2012"},

    "to":""shard0002,

    "secondaryThrootle":true

    }

    )

    4、使用splitChunk命令对from分片剩余的块进行拆分,这样可以增加from分片的块数,直到实现from分片

    与其他分片块数均衡。

    5、块大小修改回最初值

    >db.settings.save({"_id":"chunksize","value":64})

    6、启用均衡器

    >sh.setBalancerState(true)

    1.4 防止出现特大快

    1、可修改片键、细化片键的粒度

    2、尽可能保证每个文档都拥有唯一的片键值,或者至少不要出现某个片键值的数据超出最大块大小

    设定值的情况

    3、添加辅助字段作为片键

  • 相关阅读:
    基本数据结构:链表(list)
    字符串函数
    TCHAR
    开源库链接
    视频 链接
    tabbar
    加密
    安全类链接,https
    资本
    审核 -链接 - 发布证书
  • 原文地址:https://www.cnblogs.com/xibuhaohao/p/11274123.html
Copyright © 2011-2022 走看看