您的位置:首页 > 数据库 > Mongodb

mongoDB——split&balance操作

2016-03-31 22:17 495 查看

split&balance整体流程

正如三国中说的,分久必合合久必分、mongoDB数据库也是处于分分合合的动态平衡中。但这里所谓的“合”,只是针对shard所属的chunk块而言的。

split&balance处理示意图:



处理流程

①、发送write请求。
②、数据写之前,检测到chunk块的大小超过了预设值(默认是64MB,可变动),进行split
③、chunk数据信息发生变化,更新config server中的metadata信息
④、由于shard中chunk的个数引发数据不均衡,经过判断,chunk块向相邻的shard中做copy
⑤、由于chunk块位置信息发生变化,再次更新config server中的metadata信息
⑥、删除copy源的chunk块
⑦、反馈write结果
⑧、传送
➈、客户端显示写成功信息

这里为了描述整个流程,特意串行处理了,实际上,逻辑处理时,write操作引发的split跟balance是不同的线程并行去处理的,大家不要误解。

Split

split示意图如下所示:



处理流程:

chunk的size默认是64MB,可变更的。
insert/update操作会导致超出chunk的预设大小。
mongos进程一直开启,检测到后,会将目标chunk分裂成2个等大的新的chunk1和chunk2.
分裂成功后,更新config server中metadata的数据。

Balance

示意图如下所示:



处理流程:

#mongos检测到整个集群中chunk块的数据分布不均衡

mongos将moveChunk命令发送到Shard B中
内部命令moveChunk在Shard B中执行
Shard C从Shard B中获取需要移动的chunk块
获取后,同期化所有的变动
一同期化,立马更新config server中的metadata信息
chunk的copy成功后,删除Shard B中copy元的chunk块
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: