MongoDB ·sharding chunk 分裂与迁移详解

本文详细解释了MongoDB3.2中Sharding的工作原理,涉及primaryshard、chunk的分配和迁移,以及如何通过配置自动分裂(autoSplit)、预分片(pre-splitting)和balancer来管理数据分布。特别关注了chunk分裂和迁移的触发条件及其对chunksize的依赖。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MongoDB Sharding

关于 MongoDB sharding 的原理,如果不了解请先参考

注:本文的内容基于 mongoDB 3.2 版本。

Primary shard

使用 MongoDB sharding 后,数据会以 chunk 为单位(默认64MB)根据 shardKey 分散到后端1或多个 shard 上。

每个 database 会有一个 primary shard,在数据库创建时分配

  • database 下启用分片(即调用 shardCollection 命令)的集合,刚开始会生成一个[minKey, maxKey] 的 chunk,该 chunk 初始会存储在 primary shard 上,然后随着数据的写入,不断的发生 chunk 分裂及迁移,整个过程如下图所示。
  • database 下没有启用分片的集合,其所有数据都会存储到 primary shard

_2017_05_30_7_11_09

何时触发 chunk 分裂?

mongos 上有个 sharding.autoSplit 的配置项,可用于控制是否自动触发 chunk 分裂,默认是开启的。如无专业人士指导,强烈建议不要关闭 autoSplit,更好的方式是使用「预分片」的方式来提前分裂,后面会详细介绍。

mongoDB 的自动 chunk 分裂只会发生在 mongos 写入数据时,当写入的数据超过一定量时,就会触发 chunk 的分裂,具体规则如下。

int ChunkManager::getCurrentDesiredChunkSize() const {
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值