mongodb 系列~ chunk原理

一 定义    1 基本单位为chunk,chunk中包含数条doc记录.chunk默认大小是64M,写满后就生成新的chunk    2 存在chunk超过64M的情况,单条doc记录大小超过64M,被称为big chunk,需要手动进行拆分 二 负责进程     3.2 版本 balancer 在 mongos 4.0 版本 balancer 在 config moveChunk 过程和删除数据的逻辑基本没有差 三 拆分阈值     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 } })

上一篇:简明学习webpack


下一篇:消息队列与无锁队列实现