我需要根据批处理请求中的唯一密钥按文档(cosmos DB(进行查询。
我对上述要求的方法
- 由于我的密钥说customerId是唯一的,我将customerId设为Id,分区密钥也设为/Id
- 由于它的批读取请求(每个请求25个调用,每秒10个批请求(,我在SQL查询中使用"in"运算符,并通过CosmosClient提取所有文档。CreateDocumentQuery函数例如:我的SQL查询看起来像"从c中选择*,其中c.Id在('a1','b1'(
-
以下是我的订阅源选项:
新FeedOptions{MaxItemCount=-1,EnableCrossPartitionQuery=true,最大平行度=-1,MaxBufferedItemCount=-1}
基于上述场景:
-
我是否真的很好地利用了按Id查询功能来实现更快的响应时间?
-
EnableCrossPartitionQuery在当前场景中有意义吗?
-
我参加派对对吗?
有没有更好的方法可以利用密钥-值对方式提取数据?
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之前添加一些后缀。