split
¶拆分一个数据块的分片集群分为两个块。该mongos
实例自动拆分和管理块,但是在特殊情况下,该
split
命令确实允许管理员手动创建拆分。有关这些情况以及有关wrap的MongoDB shell命令的信息,请参阅分片群集中的拆分块split
。
该split
命令必须在admin
数据库中运行,并使用以下格式:
该split
命令获取包含以下字段的文档:
领域 | 类型 | 描述 |
---|---|---|
split |
串 | 该名称集合,其中块存在。指定集合的完整名称空间,包括数据库名称。 |
find |
文献 | 在分片键上指定相等匹配的查询语句。匹配选择包含指定文档的块。您必须指定只有以下情况之一: 您不能 |
bounds |
数组 | 2.4版的新功能:要分割的块的边界。 您不能 |
middle |
文献 | 用作创建两个块的分割点的文档。
split 需要下列选项之一:find ,
bounds 或middle 。 |
与find
或bounds
选项一起使用时,该
split
命令将沿中位数拆分块。因此,该命令不能使用find
或bounds
选项拆分空块,因为空块没有中间值。
要在空块中创建拆分,请middle
在split
命令中使用选项或使用splitAt
命令。
要创建块拆分,请连接到mongos
实例,然后向admin
数据库发出以下命令:
要么:
要么:
要为使用哈希分片键的集合创建拆分,请使用bounds
参数。千万不能使用middle
参数用于此目的。
警告
在分片集合中拆分数据以创建新块时,请务必小心。在分片具有现有数据的集合时,MongoDB会自动创建块以均匀分布该集合。为了有效地在分片群集中拆分数据,您必须考虑一个块中的文档数和平均文档大小才能创建统一的块大小。当块的大小不规则时,碎片可能具有相同数量的块,但数据大小却大不相同。避免创建导致集合大小不同的集合的拆分。
也可以看看
moveChunk
,sh.moveChunk()
,
sh.splitAt()
,和sh.splitFind()
,其中包裹的功能split
。
以下各节提供了该split
命令的示例。
该split
命令标识数据库people
集合中test
包含与之匹配的文档的块。不需要存在匹配项即可识别适当的块。然后,该命令将其拆分为两个大小相等的块。{
_id : 99 }
split
注意
split
按范围而不是大小创建两个相等的块,并且不使用所选点作为新块的边界
要定义任意分割点,请使用以下形式:
该split
命令标识数据库people
集合中的大块,该大块test
将保存与query匹配的文档。不需要存在匹配项即可识别适当的块。然后,该命令将其拆分为两个大块,并将匹配的文档作为拆分大块之一的下限。{ _id : 99 }
split
在对集合中的数据进行预拆分时,通常使用此形式。
本示例在
数据库集合中使用哈希分片键 。以下命令使用包含两个单字段文档的数组来表示用于拆分块的哈希分片键的最小值和最大值:userid
people
test
注意
MongoDB使用64位NumberLong 类型表示哈希值。
使用sh.status()
看碎片键的现有边界。