Cosmos DB "In"运算符 SQL 查询



我需要根据批处理请求中的唯一密钥按文档(cosmos DB(进行查询。

我对上述要求的方法

  1. 由于我的密钥说customerId是唯一的,我将customerId设为Id,分区密钥也设为/Id
  2. 由于它的批读取请求(每个请求25个调用,每秒10个批请求(,我在SQL查询中使用"in"运算符,并通过CosmosClient提取所有文档。CreateDocumentQuery函数例如:我的SQL查询看起来像"从c中选择*,其中c.Id在('a1','b1'(
  3. 以下是我的订阅源选项:

    新FeedOptions{MaxItemCount=-1,EnableCrossPartitionQuery=true,最大平行度=-1,MaxBufferedItemCount=-1}

基于上述场景:

  1. 我是否真的很好地利用了按Id查询功能来实现更快的响应时间?

  2. EnableCrossPartitionQuery在当前场景中有意义吗?

  3. 我参加派对对吗?

有没有更好的方法可以利用密钥-值对方式提取数据?

1.EnableCrossPartitionQuery在当前场景中有意义吗?

是。由于您的分区键是唯一的id,因此在查询id列时,您需要EnableCrossPartitionQuery =true来确保查询能够扫描所有分区。

2.我是否真的很好地利用了按Id查询功能来实现更快的响应时间?我参加派对对吗?

根据您在问题中提到的场景,我相信您已经阅读了在cosmos数据库中选择分区键的概述。由于您设置了MaxItemCount= -1(返回所有过滤数据而不分页(,因此您必须按照上面链接中提到的规则来平衡RU设置:

Azure Cosmos容器的最低吞吐量为400个请求单元每秒(RU/s(。当在数据库上提供吞吐量时,每个容器的最小RU是每秒100个请求单元(RU/s(。对同一分区键的请求不能超过分配给分区。如果请求超过所分配的吞吐量,请求受到速率限制。因此,选择分区键很重要这不会在应用程序中产生"热点"。

如果不想提高RU设置,可以考虑设置MaxItemCount = some page大小并通过continuation token加载所有数据。

3.有没有更好的方法可以利用提取数据是键值对时尚?

如果你的设备ID有一些通用的命名规则,也许你可以考虑以下两个想法:

1.根据本文档调整devideId的索引策略:https://learn.microsoft.com/en-us/azure/cosmos-db/index-policy

2.尝试按照此链接创建一个合成分区键:https://learn.microsoft.com/en-us/azure/cosmos-db/synthetic-partition-keys例如,在devideId之前添加一些后缀。

相关内容

  • 没有找到相关文章

最新更新