范围分片
基于范围的分片涉及将数据划分为由分片键值确定的连续范围。在这个模型中,具有“接近”分片键值的文档很可能在同一个块或分片中。这允许在连续范围内读取目标文档的高效查询。但是,读取和写入性能可能会因分片键选择不当而降低。
如果没有配置散列分片或 区域所需的其他选项,则基于范围的分片是默认的分片方法。
片键选择
当分片键显示以下特征时,远程分片最有效:
- 大分片键基数
- 低分片键频率
- 非单调变化的分片键
下图说明了使用字段作为分片键的分片集群X
。如果 的值X
范围较大、频率较低且以非单调速率变化,则插入的分布可能类似于以下内容:
分片集合
使用sh.shardCollection()
方法,指定集合的完整命名空间和目标索引或复合索引以用作分片键。
sh.shardCollection( "database.collection", { <shard key> } )
重要的
- 从 MongoDB 5.0 开始,您可以通过更改集合的分片键来重新分片集合。
- 从 MongoDB 4.4 开始,您可以通过向现有分片键添加一个或多个后缀字段来优化分片键。
- 在 MongoDB 4.2 及更早版本中,分片键的选择在分片后无法更改。
分片填充集合
如果您对填充的集合进行分片,则最初只会创建一个块。然后,平衡器根据配置的范围大小在必要时从该块迁移范围。
分片空集合
如果你分片一个空集合:
- 没有为空的或不存在的集合指定区域和区域范围:
- 分片操作创建一个空块以覆盖分片键值的整个范围。
- 在创建初始块后,平衡器会根据需要在分片之间迁移初始块,并管理未来的块分布。
- 为空集合或不存在的集合指定区域和区域范围(从 MongoDB 4.0.3 开始可用)
- 分片操作为定义的区域范围创建空块以及任何其他块以覆盖分片键值的整个范围,并根据区域范围执行初始块分布。这种块的初始创建和分布允许更快地设置分区分片。
- 在初始分配之后,平衡器管理接下来的块分配。
原文链接:https://www.mongodb.com/docs/manual/core/ranged-sharding/
译者:陆文龙