如何解释 Cosmos DB 查询的“RequestCharge”?
How to interpret `RequestCharge` for Cosmos DB query?
对于一个项目,我正在考虑使用 Cosmos DB (SQL API) 作为我的数据库解决方案。阅读有关请求单位的文档,我了解到 here and here 读取 1 KB 大小的项目占用 1 RU(请求单位)。
当我执行下面的查询时(我查询单个分区中的所有项目(性别是 PartitionKey)),我得到了 5.000 个项目的结果(在 1.000 个项目的五个块中)。每个项目在 1.5 KB 中大小,因此每个项目应该超过 1 RU。但是,header 指出 RequestCharge
总共只有 88.12,对于 1.000 个项目。遵循每个大小为 1 的项目 1 RU 的规则KB 我预计至少 1000 RU。
有人知道如何正确解释 RequestCharge
吗?
代码与查询:
public async Task<List<Profile>> GetAllProfilesByGender(string gender)
{
var container = GetContainer();
var queryIterator = GetQueryIterator(container, gender);
var profiles = new List<Profile>();
while (queryIterator.HasMoreResults)
{
var resultSet = await queryIterator.ReadNextAsync();
foreach (var profile in resultSet)
{
profiles.Add(profile);
}
}
return profiles;
}
private FeedIterator<Profile> GetQueryIterator(Container container, string gender)
{
var query = new QueryDefinition($"SELECT * FROM c WHERE c.Gender = '{gender}'");
return container.GetItemQueryIterator<Profile>(query);
}
请求单位 (RU) 费用与检索的文档数量不成线性比例。涉及的因素很多:查询的复杂度、索引的使用等
"One read of one 1K document costs 1 RU" 的概念完全不同。很多时候,需要一个文档(这就是为什么有 read API 调用,而不是 query 调用)。如果您比较同一文档的 read 与 query,您会发现 query 版本文档检索的成本更高,RU-wise,比 read 版本(因为它必须调用查询引擎,处理索引等)。
附带说明:我不确定您是否希望看到 RU 使用规模(在您的示例中,1,000 RU 用于 1,000 个返回的文档)- 这最终会非常昂贵。多年来,查询引擎经过多次优化,以降低 RU 成本。
对于一个项目,我正在考虑使用 Cosmos DB (SQL API) 作为我的数据库解决方案。阅读有关请求单位的文档,我了解到 here and here 读取 1 KB 大小的项目占用 1 RU(请求单位)。
当我执行下面的查询时(我查询单个分区中的所有项目(性别是 PartitionKey)),我得到了 5.000 个项目的结果(在 1.000 个项目的五个块中)。每个项目在 1.5 KB 中大小,因此每个项目应该超过 1 RU。但是,header 指出 RequestCharge
总共只有 88.12,对于 1.000 个项目。遵循每个大小为 1 的项目 1 RU 的规则KB 我预计至少 1000 RU。
有人知道如何正确解释 RequestCharge
吗?
代码与查询:
public async Task<List<Profile>> GetAllProfilesByGender(string gender)
{
var container = GetContainer();
var queryIterator = GetQueryIterator(container, gender);
var profiles = new List<Profile>();
while (queryIterator.HasMoreResults)
{
var resultSet = await queryIterator.ReadNextAsync();
foreach (var profile in resultSet)
{
profiles.Add(profile);
}
}
return profiles;
}
private FeedIterator<Profile> GetQueryIterator(Container container, string gender)
{
var query = new QueryDefinition($"SELECT * FROM c WHERE c.Gender = '{gender}'");
return container.GetItemQueryIterator<Profile>(query);
}
请求单位 (RU) 费用与检索的文档数量不成线性比例。涉及的因素很多:查询的复杂度、索引的使用等
"One read of one 1K document costs 1 RU" 的概念完全不同。很多时候,需要一个文档(这就是为什么有 read API 调用,而不是 query 调用)。如果您比较同一文档的 read 与 query,您会发现 query 版本文档检索的成本更高,RU-wise,比 read 版本(因为它必须调用查询引擎,处理索引等)。
附带说明:我不确定您是否希望看到 RU 使用规模(在您的示例中,1,000 RU 用于 1,000 个返回的文档)- 这最终会非常昂贵。多年来,查询引擎经过多次优化,以降低 RU 成本。