MongoDB使用与集合关联的分片键将数据划分为大块。阿块包括分片数据的子集的。每个分块都有一个基于分片键的上下限范围。
该mongos
路线写入基础上,适当的块
片键值。当MongoDB超出配置的块大小时,MongoDB会对其进行拆分。插入和更新都可以触发块拆分。
块可以代表的最小范围是单个唯一的分片键值。仅包含具有单个分片键值的文档的块无法拆分。
numInitialChunks
option指定不同数量的初始块。块的这种初始创建和分配允许更快地设置分片。MongoDB中的默认块大小为64 MB。您可以 增加或减少块大小。考虑更改默认块大小的含义:
mongos
)层产生了费用。Maximum Number of Documents Per Chunk to Migrate
existing collection
对于许多部署而言,避免频繁且可能是虚假的迁移是有道理的,但代价是分布的数据集分布得不太均匀。
更改块大小会影响块分割的时间,但对其效果有一些限制。
拆分是防止块增长太大的过程。当一个块增长到超过指定的块大小时,或者如果该块中的文档数超过,MongoDB会根据该块代表的分片键值拆分该块。必要时可以将一个大块拆分为多个大块。插入和更新可能会触发拆分。拆分是有效的元数据更改。要创建拆分,MongoDB的确实不迁移任何数据或影响的碎片。Maximum Number of Documents
Per Chunk to Migrate
分割可能会导致碎片中各个集合的块分布不均。在这种情况下,平衡器会在各个分片之间重新分配块。有关在各个分片之间平衡块的更多详细信息,请参见Cluster Balancer。
MongoDB在分片群集中迁移块,以在分片之间平均分配分片集合的块。迁移可能是:
在某些情况下,块可以增长到超过指定的块大小,但不能进行split。最常见的情况是大块表示单个分片键值。由于块无法拆分,因此它将继续增长,超出块大小,成为巨型块。随着它们不断增长,这些巨型块可能会成为性能瓶颈,尤其是如果分片键值出现频率很高时 。
moveChunk
目录¶在MongoDB 2.6和MongoDB 3.0中,sharding.archiveMovedChunks
默认情况下处于启用状态。默认情况下,所有其他MongoDB版本均禁用此功能。与sharding.archiveMovedChunks
启用,源碎片档案的迁移数据块文件的下集命名空间命名的目录
moveChunk
中的目录storage.dbPath
。
如果在迁移过程中发生某些错误,这些文件可能有助于恢复在迁移过程中受影响的文档。
迁移成功完成后,无需从这些文件中恢复文档,则可以安全地删除这些文件。或者,如果您具有可用于恢复的数据库现有备份,则也可以在迁移后删除这些文件。
要确定所有迁移是否已完成,请sh.isBalancerRunning()
在连接到mongos
实例时运行
。