【发布时间】:2020-07-01 10:06:27
【问题描述】:
我有大量文档(约 200 万份)。我必须查询给定字典键的最高 num。
对于给定键 '85642768',以下两个文档的预期输出将是 '3'。
文档1:
{
"id": "fb41ecd9-2761-41f4-87ca-aa4bf59f9d83",
"Key": "Key123",
"Dict": {
"85642766": {
"num": 1,
"str": "str1"
},
"85642767": {
"num": 1,
"str": "str2"
},
"85642768": {
"num": 2,
"str": "str3"
}
}
}
文档2:
{
"id": "821cf017-421a-422a-b082-45e77228dca3",
"Key": "Key456",
"Dict": {
"85642766": {
"num": 1,
"str": "str1"
},
"85642767": {
"num": 2,
"str": "str2"
},
"85642768": {
"num": 3,
"str": "str3"
}
}
}
目前我有 250K 的唯一文档。我正在下载基于Key 列表的文档列表,每批 8000 个。在同一位置需要 14 分钟,10000 个 RU。
我也有一个基于Key 的索引。有没有更好的方法来减少搜索时间?
【问题讨论】:
-
CosmosDB 是一个数据库。您无需下载所有文档并在本地处理它们,而是向其发送查询以生成结果。 250K 几乎没有数据——笔记本电脑上的小型 SQL Server 数据库可以处理 GB 的数据。
-
CosmosDB allows querying using SQL,包括 GROUP BY 和聚合函数。你试过吗?
-
你写的代码会很有用,但我同意其他人的观点,听起来你正在下载所有数据以在本地处理它,而不是要求服务器产生答案。
-
除了其他人所说的(您不应该下载整个集合来进行本地搜索和聚合):您应该重新考虑您的数据模型:您的
Dict子文档正在使用键的值正如它的名字一样,这意味着没有实用的方法来搜索任意键。
标签: c# azure-cosmosdb