根据微软文档,ReadManyItemsAsync 应该使用最便宜的查找类型,每个项目的 RU 费用为 1。https://learn.microsoft.com/en-us/azure/cosmos-db/nosql/how-to-dotnet-read-item
为什么我在直接调用和跟踪中都看到 Query 的费用,而不仅仅是 Read?由于查询的成本至少是读取的 2.5 倍,这并没有道理。 我应该注意到,在我的测试中,我只发送了一个 id/partitionKey。它应该返回 1.xx 的费用。
我已经按照示例所述完全实现了代码,同时使用 ID 和 PartitionKeys。
但是当我看到那个调用时,我发现它正在使用查询并向我收费2.95RU。我完全意识到它也按有效载荷收费。这不是问题所在。问题是文档说它不执行查询...但我看到了查询。
所以我想问...这里到底发生了什么?
if (ids.Count != partitionKeys.Count)
throw new ArgumentOutOfRangeException("ids and partitionKey counts must match");
var container = Database.GetContainer(containerId);
List<(string, PartitionKey)> itemsToFind = new();
for (int i = 0; i < ids.Count(); i++)
{
itemsToFind.Add((ids[i],new PartitionKey(partitionKeys[i])));
}
var result = await container.ReadManyItemsAsync<T>(items: itemsToFind);
return result;
}
但是当我看到那个调用时,我发现它正在使用查询并向我收费2.95RU。我完全意识到它也按有效载荷收费。这不是问题所在。问题是文档说它不执行查询...但我看到了查询。
![enter image description here](https://istack.dev59.com/ENHN7.webp)
![enter image description here](https://istack.dev59.com/dsCFu.webp)
Container.ReadManyItemsAsync<>
根据您提供的唯一标识符和分区键返回项目列表。与查询相比,此操作通常更具性能,因为您将在列表中的所有项目上有效执行点读取操作。 我想票据中没有什么需要修复的,因为这是按设计实现的。 - macm