【问题标题】:Azure CosmosDB - Partition key reached maximum size of 10 GBAzure CosmosDB - 分区键达到 10 GB 的最大大小
【发布时间】:2017-12-30 13:55:00
【问题描述】:

我已经使用分区键创建了一个 Cosmos DB 集合。由于它是一个开发环境,我已将吞吐量降低到 1000。现在我收到以下错误。

留言:

“错误”:[“分区键达到最大 10 GB”]

Azure Cosmos DB 容器可以创建为固定的或无限的。固定大小容器的最大限制为 10 GB 和 10,000 RU/s 吞吐量。要将容器创建为无限制,您必须指定至少 2,500 RU/s 的吞吐量。

现在我已将吞吐量增加到 2500。但是,我仍然遇到同样的错误。

【问题讨论】:

  • 您提供的是固定收藏还是无限收藏?
  • @RobReagan - 第一行 .... I have created a Cosmos DB collection with the partition key.
  • @GauravMantri 信息不足。您可以使用分区键创建固定大小的集合。

标签: azure azure-cosmosdb


【解决方案1】:

更新 - 2020 年 5 月 11 日

Microsoft 最近将逻辑分区的容量从 10 GB 增加到 20 GB。详情请查看:https://docs.microsoft.com/en-us/azure/cosmos-db/concepts-limits


我向 Azure Cosmos DB 团队的工程师 Aravind Krishna 发送了电子邮件,要求对这一点进行澄清。这是他的回答的摘要:

在 Cosmos DB 中,有物理分区和逻辑分区。在一个集合中,所有共享相同分区键值的文档都将存在于同一个逻辑分区中。一个或多个逻辑分区占用一个物理分区。作为开发人员,物理分区无关紧要;我们只能控制逻辑分区中的内容。

无论 Collection 是 Fixed (10GB) 还是 Unlimited,10GB 限制都适用于逻辑分区。时期。

因此,Sarva,您需要重新考虑分区键或实施滚动日志,以确保调试日志分区中的数据不超过 10GB 分区限制。

【讨论】:

  • 谢谢罗伯。我需要考虑一下。
  • 如何获得每个分区键的当前大小(已使用)以避免此问题? Anh 如何获得每个分区键的最大大小? (因为也许 azure 将来会改变每个分区键的最大值?)
  • @DucNguyen 应该能够在 Azure 门户中的 Cosmos 实例的 Metrics 刀片上找到该信息。如前所述,最大大小是每个逻辑分区 10GB。将来可能会发生变化,但很可能会提前宣布,您绝对不应将当前计划建立在可能发生或可能不会发生的事情上。
  • 此限制最近已提高到 20 GB。参考:docs.microsoft.com/en-us/azure/cosmos-db/concepts-limits
  • 您好,我在 Microsoft 学习内容中找到了这个。 “当逻辑分区的容量接近最大存储空间时,Azure Cosmos DB 会分配另一个物理分区。Azure Cosmos DB 在物理分区之间无缝拆分逻辑分区,即具有相同分区键值的文档组。” docs.microsoft.com/en-us/learn/modules/…
【解决方案2】:

更新 - 2020 年 5 月 11 日

Microsoft 最近将逻辑分区的容量从 10 GB 增加到 20 GB。详情请查看:https://docs.microsoft.com/en-us/azure/cosmos-db/concepts-limits


您收到此错误的原因是因为即使unlimited collection (a.k.a. partitioned collection) 没有该集合中的分区的大小限制,并且当前为 10 GB。由于您已达到分区的限制,因此您会收到此错误。来自link(问题6):

选择具有数字的分区键属性很重要 不同的值,并让您平均分配工作量 跨越这些价值观。作为分区的自然产物,请求 涉及相同分区键的受最大吞吐量限制 的单个分区。 此外,文档的存储大小 属于同一个分区键的限制为 10GB。 一个理想的 分区键是经常作为过滤器出现在您的 查询并具有足够的基数以确保您的解决方案是 可扩展。

我能想到的唯一解决方案是重新创建集合并选择一个您知道不会超过此 10 GB 限制的分区键。您还需要将数据从旧集合转移到新集合。

您可能会发现这篇文章对于为您的收藏选择分区键很有用:https://docs.microsoft.com/en-us/azure/cosmos-db/partition-data#design-for-partitioning

此外,根据blog post,无限收集的最低 RU/s 现在是 1000 而不是 2500。

【讨论】:

  • 我向@AzureCosmosDB 发送了类似的问题。他们把我推荐给docs.microsoft.com/en-us/azure/cosmos-db/partition-data。相关引用是“当物理分区 p 达到其存储限制时,Azure Cosmos DB 将 p 无缝拆分为两个新分区 p1 和 p2。它将对应于大约一半键的值分配给每个分区。这种拆分操作是不可见的到你的申请。”我相信这仅适用于无限收藏。我猜 Sarva 创建了一个 Fixed 集合,并且违反了单个分区的硬限制。
  • @RobReagan...有趣!我不知道。感谢分享。现在我很好奇为什么 Cosmos DB 团队在他们可以在后台拆分数据时甚至提到这个 10GB 的限制。一旦 Sarva 确认收藏是固定收藏,我将删除我的答案。
  • 我觉得文档很混乱。我认为 Fixed Collection 中的分区键是提供到 Unlimited Collection 的迁移路径。我似乎记得在某处读过,但不是 100% 确定。
  • @DucNguyen 不要在 cmets 中提出问题或作为单独的答案,而是提出一个新问题。
  • 此限制最近已提高到 20 GB。参考:docs.microsoft.com/en-us/azure/cosmos-db/concepts-limits
【解决方案3】:

CosmosDB 中的数据存储在集合中,这些集合使用您选择的分区键进行分区。 每个单独的分区限制为 10GB 数据。

无限集合在分区数量上是无限的,但固定集合将您限制为单个分区。这是唯一的区别。这就是为什么固定集合不需要设置分区键(因为所有内容都转到单个分区)以及为什么固定集合和分区的限制大小相同,均为 10GB。

这些分区在 CosmosDB 服务器上的实际存储方式是您无法控制的基础架构,它会自动管理以实现复制和性能。只要您可以将数据拆分到足够多的分区中,您就可以在集合中存储任意数量的数据。拥有更多的分区比拥有更少的分区更好,甚至选择ID 字段(在每个分区中放置一条记录)也可以正常工作。 CosmosDB 可以自动将分区组合在一起以填充服务器,但它不能将分区分开,因此在您的设计中要小心。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-11-26
  • 2021-12-23
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多