azure-cosmosdb - Cosmos DB "In" 运算符 SQL 查询
问题描述
我需要根据批处理请求中的唯一键按文档(cosmos DB)查询。
我对上述要求的方法
- 由于我的密钥说 customerId 是唯一的,因此我将 customerId 作为 Id 并将分区密钥也作为 /id。
- 由于它的批量读取请求(25 个调用/每个请求和 10 个批量请求/秒),我在 SQL 查询中使用“in”运算符并通过 CosmosClient.CreateDocumentQuery 函数提取所有文档 例如:我的 SQL 查询看起来像“Select *从 c where c.Id in ('a1','b1')
以下是我的提要选项:
新 FeedOptions { MaxItemCount = -1,EnableCrossPartitionQuery = true,MaxDegreeOfParallelism = -1,MaxBufferedItemCount = -1 }
基于以上场景:
我实际上是否很好地利用 Id 查询功能来实现更快的响应时间?
EnableCrossPartitionQuery 在当前场景中是否有意义?
我做的分区对吗?
有没有更好的方法可以利用提取数据的能力是键值对方式?
解决方案
1.EnableCrossPartitionQuery 在当前场景下有意义吗?
是的。由于您的分区键是唯一的 id,因此您需要EnableCrossPartitionQuery =true
确保在查询id
列时查询可以扫描所有分区。
2.我实际上是否很好地利用了 Id 查询功能来实现更快的响应时间?我在做分区吗?
根据您在问题中提到的场景,我相信您已经阅读了在 cosmos db 中选择分区键的概述。由于您设置MaxItemCount= -1
(返回所有过滤器数据而不分页),您必须按照提到的规则平衡 RUs 设置在上面的链接中:
Azure Cosmos 容器的最小吞吐量为每秒 400 个请求单位 (RU/s)。在数据库上预配吞吐量时,每个容器的最小 RU 为每秒 100 个请求单位 (RU/s)。对同一分区键的请求不能超过分配给分区的吞吐量。如果请求超过分配的吞吐量,则请求会受到速率限制。因此,选择一个不会导致应用程序中出现“热点”的分区键很重要。
如果你不想提高 RUs 设置,你可以考虑设置MaxItemCount = some page
size 并加载所有数据continuation token
。
3.有没有更好的方法可以利用提取数据的能力是键值对方式?
如果您的 deviceIds 有一些通用的命名规则,也许您可以考虑以下 2 个想法:
1.根据本文档调整devideId的索引策略:https ://docs.microsoft.com/en-us/azure/cosmos-db/index-policy
2.尝试通过以下链接创建合成分区键:https : //docs.microsoft.com/en-us/azure/cosmos-db/synthetic-partition-keys,例如,在devideId前添加一些后缀。
推荐阅读
- c# - 给定一个整数数组,如何找到最大数的所有公倍数?
- php - 将scount与elasticsearch一起使用时,如何在laravel搜索中排序和组合相同索引的类型?
- javascript - 每次点击api端点时如何进行api调用以获取新数据
- java - Recyclerview - cardview onclick改变图像?
- react-native - 反应导航问题
- html - Bootstrap 中的响应式表单
- python - 如何使用 seaborn 或 matplotlib 绘制热图?
- odoo - 如何将发票的总价格转换为 odoo 11 中的字母?
- swift - 在 iPhone X 及更高版本的 UIScrollView 中没有 UIImage 的全屏
- planning - PDDL 中的变量可以是多于一种类型?