首页 > 解决方案 > 如何设计一个 cosmos DB 来对非分区键进行高效查询

问题描述

我是 Cosmos DB 的新手,在设计我的数据库时遇到了问题。

我有一个类似于以下结构的数据

{
   "userId": "64_CHAR_ID",
   "gpId": "34_CHAR_ID"
   ... Other data
}

目前我的数据库在 userId 上有分区,因为到目前为止所有查询都是由 userId 进行的。现在我想在 userId 未知时根据 gpId 查询我的数据库。所以它最终成为跨分区查询,它需要大量的时钟时间(超过 5 分钟)和 RU(超过 3k RU)。

我正在使用的查询是

SELECT * FROM c WHERE c.gpId='SOME_GPID'

根据Microsoft Doc,当数据集很大时,我们应该避免跨分区查询,在我的情况下,数据集非常大(~80 GB)。

那么在 cosmos db 中通过 gpId 查询数据的更好设计/策略是什么。我的要求是通过 gpId 几乎实时查询。

注意: RU 的当前限制设置为 500000 RU/s,并且还设置了 AutoScale。

标签: azure-cosmosdbpartitioningdatabase-partitioningazure-cosmosdb-sqlapi

解决方案


推荐阅读