集群中chunk的分裂¶
On this page
当数据块的大小增长到超过 :ref:` 设定的数据块大小 <sharding-chunk-size>` 时,一个 mongos 会试图将这个数据块分裂成两个,分裂可能会导致不同分片之间数据块数量的不均衡.在这种情况下, mongos 会开始一次分片间的迁移使数据块重新均衡,参见 开启分片集合的均衡 获取更多分片间数据块均衡的细节.
数据块大小¶
MongoDB中默认的 chunk 大小是64M,你可以 调整数据块的大小,但要注意到这有可能会集群造成性能影响.
数据块大小较小时可以使得分片间的数据更均衡,但是是以频繁的迁移为代价的,会对 mongos 造成压力.
数据块大小较大时会使得均衡较少,这从网络传输 与 mongos 的角度来说更高效,但是,这种高效是通过数据不均衡的加重为代价的.
- Chunk size affects the Maximum Number of Documents Per Chunk to Migrate.
在很多情况下,以分片间数据略微的不均衡来防止频繁的迁移或者无效的迁移,是合理的.
限制¶
修改数据块大小影响数据块的分裂,但他的影响受到其他的一些限制.
自动分裂只在数据插入与更新时发生,因此如果你减小了数据块的大小,需要花费一些时间使所有数据块分裂成新大大小.
分裂不能被回滚,如果你增加了数据块大小,现有的数据块只有通过插入与更新才能逐渐达到新的设定值.
注解
数据块的范围包含了范围中的最小值,不包含最大值.
Indivisible Chunks¶
In some cases, chunks can grow beyond the specified chunk size but cannot undergo a split; e.g. if a chunk represents a single shard key value. See 选择片键需要考虑的事情 for considerations for selecting a shard key.