对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

对全局集合进行分片

重要

该功能在弹性集群中不可用

Flex 集群目前不支持此功能。要了解更多信息,请参阅 Atlas Flex 限制。

注意

  • 只有全球集群才支持全局写入,而全球集群需要 M30+ 集群层级。

  • 启用全局写入后,Atlas 全球集群不支持专用搜索节点。

  • 只有启用 Atlas 管理分片的全局集群才能使用 Atlas UI 对全局集合进行分片。

  • 本文档假定用户事先了解分片语义。继续本教程之前,请查看“分片”文档。

在分片集群中,可以根据分片键创建分片数据区域。您的区域可根据地理区域分割数据。如需详细了解如何根据地理区域进行分片,请参阅按位置分割数据。

Atlas用户界面仅支持对使用 Atlas 托管分片的全局集群的全局写入集合进行分片。要对使用自管理分片的非全局写入集合或全局写入集合进行分片,必须使用mongosh 或应用程序代码。要学习;了解更多信息,请参阅部署分片集群。

您必须拥有集群的 Atlas 项目的 Project Owner(项目所有者)或 Organization Owner(组织所有者)角色,才能在 Atlas 用户界面中对全局写入集合进行分片。

在开始此过程之前,请查看:

在Atlas Core 集群上,您可以配置 Online 存档 ,将Atlas 集群中不常访问的数据移至MongoDB托管的只读联合数据库实例,而不是对集合分片或升级集群层。在Atlas无限集群上,公共预览版不支持 Online 存档 。要学习;了解有关 Online 存档 的更多信息,请参阅管理 Online Archive。

通过 Atlas 用户界面选择片键后,Atlas 会尝试对目标集合分片。在此期间,确保没有用户手动对集合分片。如果 Atlas 检测到目标集合的片键与通过 Atlas 用户界面选择的键不同,Atlas 会停止此过程,并在 Atlas 用户界面中显示针对该集合的警告。您可以单击 Unmanage Collection 清除警告。此操作会将集合从 Atlas 管理中删除,同时保留底层集合和手动选择的片键。

您可以更新文档的分片键值,除非分片键字段是不可变的 _id 字段。 如需了解更多信息,请参阅更改文档的分片键值。

在 MongoDB 6.0 版本中,无法更新已启用“全局写入”的集合中现有文档的片键字段值。

重要

分片键值和 Atlas 全球集群

在所有 MongoDB 版本中,都无法对 Atlas 全球集群中的集合重新分片。如需了解更多信息,请参阅对用于全局写入的集合分片。

对“全球集群”中的集合分片:

1
  1. 如果尚未显示,请从导航栏上的 Organizations 菜单中选择包含项目的组织。

  2. 如果尚未显示,请从导航栏的 Projects 菜单中选择您的项目。

  3. 在侧边栏中,单击 Database 标题下的 Data Explorer。

    The 数据浏览器 displays.

重要提示:您还可以单击集群的名称以打开 Cluster侧边栏,然后单击Data Explorer Shortcuts标题下的 。

2
3
4
5

您可以选择以下选项之一:

Default

Atlas 使用指定一个或多个字段作为分片键的文档。

Use unique index as the shard key

Atlas 使用底层索引对“全局集合”的片键 强制执行唯一性约束。

Use hashed index as the shard key

Atlas 对分片键的第二个字段进行散列,从而使分片数据均匀分布。

您可以选择 Pre-split data for even distribution(对数据进行预拆分以实现均匀分布),以指定是否根据为集合定义的区域和区域范围,执行空集合或不存在集合的初始数据块创建和分配。

如果选择Pre-split data for even distribution选项,还可以在使用哈希分片键对空集合分片时,指定初始创建数据段的最小数量。初始数据块分布允许 Atlas 快速设置分区分片。Atlas 创建的数据块数量取决于您定义的区域数量。默认情况下,Atlas 会为每个位置代码创建一个数据块,然后将数据块平均分配给所有分片。

要了解有关这些选项的详情,请参阅 Atlas 全球集群分片引用。

6

配置集合后,Atlas 会在 Global Writes 标签页顶部附近显示组合分片键。

以下各节将介绍分片行为,以及如何为管理全球集群启用分片。

对于启用Atlas托管分片的Atlas全球集群,未分片的集合必须在分片之前满足以下兼容性要求,才能在分片时使用全局写入:

  • 集合中的每个文档都必须包含一个 location(位置)字段。

  • location字段的值必须是 ISO-3166 -1 alpha2 国家/地区代码("US" 、"DE" 、"IN" )或受支持的 ISO-3166 -2 细分代码("US-DC" 、"DE-BE" 、"IN-DL" )。不符合此条件的文档无法路由到集群中的任何分片。要查看当前支持的国家/地区或分区代码的完整列表,请参阅 云 。

仅在 location 字段上使用分片键可能会导致瓶颈,尤其是在国家/地区或子行政区子集接收大多数写操作的工作负载中。Atlas“全局写入”需要组合分片键,以便促进分片数据在整个集群中有效分布。Atlas Global Cluster 片键与 MongoDB 片键具有相同的限制。适用以下 Atlas Global Cluster 限制:

  • 组合分片键的第一个字段必须是 location(位置),且不能散列。

  • 组合分片键中只能有一个二级分片键字段。

  • 复合分片键的二级分片键字段可以进行哈希处理。

  • 从节点分片键字段不能是数组。

要详细了解关于:

重要

更改分片键

分片后,可以修改的内容取决于运行的 MongoDB 版本:

MongoDB 版本
修改分片键
修改分片键值

MongoDB 7.0

是的,只能使用 Atlas 用户界面为键添加字段。

是

MongoDB 8.0

是的,只能使用 Atlas 用户界面为键添加字段。

是

在所有 MongoDB 版本中,都无法对 Atlas 全球集群中的集合重新分片。

Atlas 用户界面支持创建分片集合,并对“全局写入”进行特定验证。要了解更多信息,请参阅在 Atlas 用户界面中对用于全局写入的集合分片。

您也可以使用mongosh 来执行sh.shardCollection() 。对集合分片后,必须使用Atlas用户界面为该集合启用全局写入。

警告:如果对已有MongoDB搜索索引的集合分片,当在分片索引构建索引时,您可能会遇到短暂的不完整搜索结果。此外,如果您为包含MongoDB Search索引 的已分片的集合添加分片,针对该集合的搜索查询可能会返回不完整的结果,直到添加的分片完成初始同步进程为止。要学习;了解详情,请参阅初始同步进程。

如需了解通过 Atlas 用户界面对集合分片的更多信息,请参阅“在 Atlas 用户界面中对全局写入的全局集合分片”。

分片键使用哈希分片和预分片数据,以实现均匀分布。

如果执行了以下操作之一, Atlas 会散列片键的第二个字段来实现分片数据平均分布:

  • 通过在 Atlas 用户界面中选择 Use hashed index as the shard key(使用哈希索引作为分片键),来启用哈希索引分片键。

  • 通过 API 设置 isCustomShardKeyHashed。

您可以选择是否为空或不存在的集合执行初始数据段创建和分布。 该操作 基于已定义的集合区域和区域范围。 为此,请执行以下操作之一:

  • 在 Atlas 用户界面中选择 Pre-split data for even distribution(对数据进行预拆分以实现均匀分布)。

  • 使用 API 设置 presplitHashedZone。

使用组合哈希分片键为 Global Clusters 创建分片集合时,Atlas 会为每个位置代码创建至少 1 个数据块,并尝试在集群中的各个分片之间均匀分布这些数据块。

numInitialChunks您还可以使用Atlas用户界面或通过API设置 参数来指定在对使用哈希分片键的集合分片最初创建的最小数据段数。

注意

如果指定了每个分片的数据段数量,Atlas 至少会创建 您指定的最小数据段数量,每个位置代码的数据段数量相同。 如果指定了 最小数据段数量,Atlas 会快速设置分区分片, 尤其是在分片前已经知道如何在地理上分布数据的情况下。

如果 Atlas 在对用于全局写入的集合分片时遇到错误, 屏幕顶部的横幅中会显示信息。

  1. 单击 See Details 以学习;了解错误以及发生错误的命名空间。此时会出现一个模态窗口,其中包含完整的错误消息和 Fix Now 按钮。

  2. 单击 Close(关闭),导航到 Atlas 用户界面中的集合。您还可以单击 Fix Now(立即修复)按钮,进入该 Atlas 集群的 Atlas 用户界面。

  3. 单击错误消息中提到的集合的 Global Writes 标签页。

  4. 单击 Unmanage Collection(取消托管集合),以取消全局写入分片操作。您必须拥有 Project Data Access Admin 角色,才能取消分片操作。

根据错误信息的提示对集合进行必要更改后,就可以再次启动分片过程。

可能出现的错误包括:

自定义分片键上已经存在一个索引。
如果被选为组合片键第二部分的字段已被索引,分片操作可能会失败。
已经对集合进行分片。
如果已对集合手动分片,则操作失败。
该集合具有自定义默认排序规则。
集合上的自定义默认排序规则可能会导致分片错误。

对于写入操作中的每个文档,MongoDB 都会使用分片键的 location 字段(如果包含)来确定要将数据路由到哪个区域。MongoDB 会选择与该区域相关联的分片作为写入文档的目标,从而便于从地理上隔离和分割数据存储。

警告

如果写入操作中没有包含分片键,或者包含了分片键但没有 location(位置)字段,则写入操作会成功,但不会分布生成的文档。

MongoDB可以保证仅对符合用于全局写入的分片集合中定义的条件的插入文档执行此行为。具体来说, MongoDB可以将location 字段不符合 ISO-3166 -1 alpha2 或 ISO-3166 -2 的文档路由到集群中的任何分片。

MongoDB查询路由取决于读取操作是否包含完整分片键,以及 location值是否对应于受支持的 ISO-3166 -1 alpha2 国家/地区代码("US" 、"DE" 、"IN" )或受支持的 ISO-3166 -2 细分代码("US-DC" 、"DE-BE" 、"IN-DL" )。

  • 对于包含完整分片键且其 location 值符合“全局写入”要求的查询,MongoDB 会将读取操作定向至映射到查询中指定的一个或多个 location 值的区域。

  • 对于不包含location 值的读取操作,或者 值与支持的location ISO-3166 -1 alpha2 国家/地区代码或 ISO-3166 -2 细分代码, MongoDB必须将读取操作广播到集群中的每个区域。

  • Read-only对于在地理位置相距较远的区域具有 节点的全局写入区域,这些区域中的客户端可以查询该区域的本地Read-only 节点,方法是指定完整分片键作为查询的一部分,并发出带有读取偏好的读取操作的 nearest。

重要

辅助读取可能会返回过时数据, 具体取决于辅助节点和主节点之间的复制延迟程度。

要了解更多信息,请参阅 MongoDB 读取偏好和 MongoDB 查询路由。

“全局写入”集群支持与标准 Atlas 分片集群相同的“范围和哈希”分片策略。对于分片键和文档模式不支持“全局写入”的分片集合,MongoDB 会根据所选的分片键,将分片数据平均分配到集群中的可用分片上。对于无法利用“全局写入”功能的数据,可考虑使用单独的分片集群。

分片后无法修改集合以支持“全局写入”。 我们建议您选择片键, 以便将来在某个集合中使用“全局写入”功能。

提示

要了解有关“全局写入”分片要求的更多信息,请参阅对用于全局写入的集合分片。

全球集群为非分片集合提供与标准Atlas分片集群相同的支持。对于集群中的每个数据库, MongoDB都会将其未分片集合存储在主分片上。使用 sh.status()中的mongosh 确定数据库的主分片。