通常情况下,MongoDB的分割一个块,如果块超过了最大的插入物之后的块大小。但是,在以下情况下,您可能需要手动拆分块:
300
和
之间400
,但是所有分片键值都位于之间250
,
500
并且在单个块中。注意
MongoDB提供了mergeChunks
将连续块范围合并为单个块的命令。有关更多信息,请参见分
片群集中的合并块。
该平衡器近期可能分裂块迁移到立即如果此举有利于未来插入一个新片段。平衡器不区分手动拆分的块和系统自动拆分的块。
警告
在分片集合中拆分数据以创建新块时,请务必小心。在分片具有现有数据的集合时,MongoDB会自动创建块以均匀分布该集合。为了有效地在分片群集中拆分数据,您必须考虑一个块中的文档数和平均文档大小才能创建统一的块大小。当块的大小不规则时,碎片可能具有相同数量的块,但数据大小却大不相同。避免创建导致集合大小不同的集合的拆分。
使用sh.status()
以确定跨集群当前块的范围。
要手动拆分块,请将该split
命令与middle
或一起使用find
。该mongo
外壳提供了辅助方法sh.splitFind()
和sh.splitAt()
。
splitFind()
将包含
与该查询匹配的返回的第一个文档的块分为两个大小相等的块。您必须将分片<database>.<collection>
集合的完整名称空间(即“ ”)指定为splitFind()
。查询in
splitFind()
不需要使用分片键,尽管这样做几乎总是有意义的。
例
下面的命令拆分包含的值块
63109
的zipcode
该领域中people
的收集records
数据库:
使用splitAt()
以一分为二块,使用在新的块下界查询文件:
例
以下命令拆分包含数据库集合中63109
for zipcode
字段的值的块
。people
records
注意
splitAt()
不一定将块分割成两个大小相等的块。拆分发生在与查询匹配的文档的位置,而不管该文档在块中的位置。
也可以看看