克服 CosmosDB 20GB 逻辑分区大小
Posted
技术标签:
【中文标题】克服 CosmosDB 20GB 逻辑分区大小【英文标题】:Overcoming CosmosDB 20GB logical partition size 【发布时间】:2021-12-23 08:03:41 【问题描述】:目前在 CosmosDB 中存储来自多个客户(公司)的遥测数据。由于某些安全合规性,我们至少必须坚持客户数据的“逻辑”分区。所以很自然,客户“corporationId”是一个指导,对我们的分区键最有意义。在我们的应用程序代码中,每当我们执行查询时,我们必须始终包含分区键,这样可以确保我们不会意外查询客户之间的数据(并提高查询性能)。
CosmosDB 当前有 20GB 的分区大小限制。对于与我们合作的 99% 的团队,他们永远不会接近这个限制,因为我们计划在 6 个月后归档数据。一个特定的公司产生的数据比其他所有公司都多,我们估计我们将在 60 天后达到这个限制。
我的问题
-
cosmosdb 会在达到 20gb 逻辑分区后停止插入数据,还是会将其分离到第二个分区中?如果性能受到轻微影响,我会没事的。
当然我们可以使用 /id 作为分区键,或者其他独特的东西,但这会破坏我们按客户的逻辑分区... 有没有其他人想出一个聪明的方法来按客户 ID 和另一个字段组合进行分区?其他建议
为了澄清,这是一个 .NET Core 应用程序,我们正在使用 .NET Core CosmosDB SDK 使用 SQL api
【问题讨论】:
你看过hierarchical partition keys吗?目前是私人预览版,但听起来很理想,因此值得联系一下,看看在生产中获得此支持的时间表可能是什么。我也很好奇,如果你在 50GB 的物理分区上,20GB 是否真的在实践中被强制执行,尽管如果他们的活动比其他租户成倍增加,你不希望一个物理分区上的所有数据用于 RU 容量和配置原因。 在没有分层分区键的情况下,最好为 mega corp 提供自己的集合,而不是使用一刀切的方法。 分层分区键正是我所需要的!!截至目前,它说我需要注册此功能....我将密切关注这一点。曾考虑为 mega corp 提供自己的集合,但又会导致在代码中添加一个边缘情况,仅针对这家公司进行插入/查询....我认为我们将把存档时间延长到 2 个月以下暂时 【参考方案1】:1 的答案是您将开始遇到 StatusCode 403,子状态 1014 的故障,如下所述:https://docs.microsoft.com/azure/cosmos-db/sql/troubleshoot-forbidden#partition-key-exceeding-storage
对于 2,cmets 已经提到了潜在的替代方案,例如分层分区键。目前没有办法提高上限。
【讨论】:
以上是关于克服 CosmosDB 20GB 逻辑分区大小的主要内容,如果未能解决你的问题,请参考以下文章