• mongodb 系列~ chunk原理


     
    一 定义
       1 基本单位为chunk,chunk中包含数条doc记录.chunk默认大小是64M,写满后就生成新的chunk,我们可以打个比方.mongodb是一所学校,chunk是班级,初始时候只有一个班级,doc记录则相当于学生,片键是指根据什么样的规则分配学生到班级,初始只有一个班级,随着入学的学生越来越多,会演变成越来越多的班级.每个办公楼就相当于分片成员,move chunk就相当于调度班级的成员在办公楼之间移动,对于mongo而言,chunk就是基本单位
    二 负责进程
       1 3.2 版本 balancer 在 mongos 4.0 版本 balancer 在 config moveChunk 过程和删除数据的逻辑基本没有差
       2 一个分片不能同时参与多个块的迁移。要从一个分片迁移多个块,平衡器一次迁移一个块。。最后,本次检测出的迁移任务完成以后才开始下次 balancer 过程。
       3 balancer 过程中,会对集合做一次随机排序,当有多个集合的数据需要均衡时,迁移时也是随机的,并不是迁移完一个集合开始下一个集合。
    三 拆分阈值
        4.0 以上版本,chunks 数量差距大于 2 的时候就会发生迁移, balance 认为是不均衡的,会发生迁移.我们可以发现,高版本mongo会产生更加频繁的迁移,可能消耗更多的资源
    四 拆分流程
       1 原分片开始启动moveChunk命令,在移动的过程中,所有的操作还会指向原来的分片
       2 目标分片开始创建所需要的索引,在3.0以后,moveChunk需要在移动之前,目标分片中存在所有的索引,可以理解为先在目标分片中创建这个索引。
       3 目标分片开始向原分片请求数据,并复制数据
       4 当数据全部写入到目标分片中,目标分片连接并更新config数据库对应的块信息
       5 原分片将这部分块数据进行异步删除。
    五 迁移-性能影响
       1  moveChunk 可能对系统的负载产生影响,主要是删除数据阶段的影响,一般迁移中的插入数据影响较小;
    六 平衡器设置
        创建窗口期,平时关闭balance,在业务低峰期开启(move chunk的消耗资源很大,建议这样做)
        use config
        db.settings.update({ _id : "balancer" }, { $set : { activeWindow : { start : "23:00", stop : "6:00" } } }, true )
        取消时间窗口设置:
        db.settings.update({ _id : "balancer" }, { $unset : { activeWindow : true } })

  • 相关阅读:
    微信支付:redirect-uri参数错误 的解决办法
    PHP计划任务之关闭浏览器后仍然继续执行的函数
    windows7安装phpnow Apache非管理员权限不能操作Windows NT服务的解决方法
    php 本周开始时间和结束时间;本月开始时间结束时间;上月开始时间结束时间
    图片预览
    生成随机验证码(记得下载字体文件啊)
    git ,github实际操作指南
    git,github初识命令
    博客园项目(BBS)
    django之分页器
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/15138519.html
Copyright © 2020-2023  润新知