Docs 菜单

Docs 主页开发应用程序MongoDB Manual

范围分片

基于范围的分片涉及将数据划分为由分片键值确定的连续范围。在此模型中,具有“close”分片键值的文档很可能位于同一数据或分片中。这样可以在读取连续范围内的目标文档时进行高效查询。但是,由于分片键选择不当,读写性能可能会下降。请参阅分片键选择。

分片键值空间被分割为较小范围或数据块的示意图。

如果没有配置其他选项(例如哈希分片区域所需的选项),则默认分片方法是基于范围的分片。

当分片键显示以下特征时,范围分片最有效:

下图展示使用字段 X 作为分片键的分片集群。如果 X 的值范围较大、频率较低且以非单调速率变化,则插入操作的分布可能会如下所示:

良好的分片键分配示意图
点击放大

使用 sh.shardCollection() 方法,指定集合的全名空间以及用作分片键的目标索引复合索引

sh.shardCollection( "database.collection", { <shard key> } )

重要

如果对已填充的集合分片,最初只会创建一个数据段。然后负载均衡器会根据配置的范围大小,在必要时迁移该数据段中的范围。

如果您对空集合分片:

  • 没有为空集合或不存在的集合指定区域和区域范围

    • 分片操作创建一个空数据段来覆盖分片键值的整个范围。

    • 创建初始数据段后,负载均衡器会根据需要在分片之间迁移初始数据段,并管理未来的数据段分配。

  • 为空集合或不存在的集合指定了区域和区域范围(从 MongoDB 4.0.3 开始提供)。

    • 分片操作为定义的区域范围创建空数据段以及任何附加数据段以覆盖分片键值的整个范围,并根据区域范围执行初始数据段分发。数据段的初始创建和分发可以更快地设置区域分片。

    • 在初始分布之后,负载均衡器将管理未来的数据段分布。

提示

另请参阅:

要了解如何部署分片集群以及实施范围分片,请参阅部署分片集群

← 哈希分片