在分片集群中分割数据块
默认情况下,MongoDB 可能会分割一个只有在迁移属于它的数据时才会对数据块进行迁移。但是,如果您在集群中有大量数据并且数据块很少,您可能需要手动拆分数据块,例如在部署使用现有数据的集群之后。
要手动拆分数据块,请使用具有字段 middle
或 find
的 split
命令。mongosh
提供了辅助方法 sh.splitFind()
和 sh.splitAt()
。
splitFind()
将包含匹配此查询的第一个文档的数据块拆分为两个大小相等的数据块。您必须指定分片集合的完整命名空间(即,“<database>.<collection>
”)给 splitFind()
。在 splitFind()
中的查询不需要使用分片键,尽管这样做几乎总是合理的。
示例
以下命令拆分了包含 records
数据库中 people
集合 zipcode
字段值 63109
的数据块。
sh.splitFind( "records.people", { "zipcode": "63109" } )
使用 splitAt()
通过将查询的文档作为新数据块的下限来拆分数据块。
示例
以下命令拆分了包含 records
数据库中 people
集合 zipcode
字段值 63109
的数据块。
sh.splitAt( "records.people", { "zipcode": "63109" } )
注意
splitAt()
不一定将数据块拆分为两个大小相等的数据块。拆分发生在匹配查询的文档的位置,而不考虑该文档在数据块中的位置。