>>>>>>> cn
翻译或纠错本页面

集群中chunk的分裂

当数据块的大小增长到超过 :ref:` 设定的数据块大小 <sharding-chunk-size>` 时,一个 mongos 会试图将这个数据块分裂成两个,分裂可能会导致不同分片之间数据块数量的不均衡.在这种情况下, mongos 会开始一次分片间的迁移使数据块重新均衡,参见 开启分片集合的均衡 获取更多分片间数据块均衡的细节.

Diagram of a shard with a chunk that exceeds the default chunk size of 64 MB and triggers a split of the chunk into two chunks.

数据块大小

MongoDB中默认的 chunk 大小是64M,你可以 调整数据块的大小,但要注意到这有可能会集群造成性能影响.

  1. 数据块大小较小时可以使得分片间的数据更均衡,但是是以频繁的迁移为代价的,会对 mongos 造成压力.

  2. 数据块大小较大时会使得均衡较少,这从网络传输 mongos 的角度来说更高效,但是,这种高效是通过数据不均衡的加重为代价的.

  3. 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.