范围分片
基于范围的分片涉及将数据划分为由分片分片键确定的连续范围。 在此模型中,具有“close”分片分片键的文档可能位于同一数据数据块或分分片。 这样可以在读取连续范围内的目标文档时进行高效查询。 但是,由于分片键的选择,写入性能可能会下降。 请参阅分片键选择。
如果没有配置其他选项(例如哈希分片或区域所需的选项),则默认分片方法是基于范围的分片。
分片键选择
当分片键显示以下特征时,范围分片最有效:
下图展示使用字段 X
作为分片键的分片集群。如果 X
的值范围较大、频率较低且以非单调速率变化,则插入操作的分布可能会如下所示:
点击放大
将集合分片
使用 sh.shardCollection()
方法,指定集合的全名空间以及用作分片键的目标索引或复合索引。
sh.shardCollection( "database.collection", { <shard key> } )
对填充的集合进行分片
如果对已填充的集合分片,最初只会创建一个数据段。然后负载均衡器会根据配置的范围大小,在必要时迁移该数据段中的范围。
对空集合进行分片
如果您对空集合分片:
没有为空集合或不存在的集合指定区域和区域范围:
分片操作创建一个空数据段来覆盖分片键值的整个范围。
创建初始数据段后,负载均衡器会根据需要在分片之间迁移初始数据段,并管理未来的数据段分配。
为空集合或不存在的集合指定了区域和区域范围:
分片操作为定义的区域范围创建空数据段以及任何附加数据段以覆盖分片键值的整个范围,并根据区域范围执行初始数据段分发。数据段的初始创建和分发可以更快地设置区域分片。
在初始分布之后,负载均衡器将管理未来的数据段分布。