Azure cosmosdb UniqueId或UniqueId的子串作为Cosmos DB中的分区键?
我们有一个Cosmos数据库集合,其中包含大约100万个包含用户信息的文档。每天添加或更新的内容不多。然而,我们需要非常高的读吞吐量 大多数查询将基于UserId。UserId属性是由一个运行数字和一个校验数字组成的数值 根据官方文件Azure cosmosdb UniqueId或UniqueId的子串作为Cosmos DB中的分区键?,azure-cosmosdb,partitioning,Azure Cosmosdb,Partitioning,我们有一个Cosmos数据库集合,其中包含大约100万个包含用户信息的文档。每天添加或更新的内容不多。然而,我们需要非常高的读吞吐量 大多数查询将基于UserId。UserId属性是由一个运行数字和一个校验数字组成的数值 根据官方文件 有些人可能会认为,完整的UserId和UserId的子字符串(比如最后4位)都可以成为一个好的分区键,即 平均分配请求和存储 查询可以“高效地”路由到相应的分区 提供高基数 将来,我们每个用户ID可能有多个文档,但假设不超过5个 我的理解是,分区数量和
- 平均分配请求和存储
- 查询可以“高效地”路由到相应的分区
- 提供高基数
根据@RafatSarosh的评论和进一步的研究,我了解到拥有数百万个分区和每个分区一个文档并不是一个坏做法,我们可以依靠Cosmos DB查询执行优化 我们将使用userId作为分区键
HTH据我所知,在大多数情况下,您将使用直接获取用户ID,而无需任何高RU查询。在这种情况下,我最好将userId保留为partitionKey。但是,您将失去使用1个以上的用户changesThanks@OlgaShumeliuk运行存储过程、触发器等的能力。我们正在探索这一选择。我们对跨多个用户标识的事务没有任何要求,所以这不是问题。所以问题是,每个分区只有很少的文档(大部分只有一个)和那么多的分区是否会影响性能?这是推荐的做法吗?我猜您的困惑源于试图将分区键映射到物理分区。您不应该担心物理分区与分区键的映射。您应该努力拥有数百万个分区密钥,CosmosDB将在5个分区或500个分区上智能地分发它们。你不用担心。每个分区1到5个文档是完全可以的,但正如Oolga所说,SP将一次处理一个分区。可能这段视频会清除Hi@Paco de la Cruz,我面临的情况与您完全相同,但我的问题是我将拥有100万到200万用户,我需要确保查询四个字段中的一个字段,而这些字段不是用户ID。因此,当您说“我们可以依赖Cosmos DB查询执行优化”时你指的是这类查询吗?查看我的文章,这在您的场景中可能很有用。