对DocumentDB中的查询收取RU费用

luc*_*uma 6 azure-cosmosdb

使用.NET库,如何确定查询的RU费用.它返回IQueryable,我不知道如何记录它.如何记录所有请求的RU的奖励点.

简单的代码,但不返回RU:

 var docs = DocumentDBRepository<CampaignMessage>.client.
         CreateDocumentQuery<CampaignMessage>(UriFactoryExtensions.CreateCollectionUri(), new FeedOptions() { MaxItemCount = -1, MaxDegreeOfParallelism = 5 }).Where(x => x.BlastKey == "abc-796").
Run Code Online (Sandbox Code Playgroud)

Bru*_*hen 5

使用.NET库,如何确定查询的RU费用.它返回IQueryable,我不知道如何记录它.

作为Mikhail提供的链接,您需要调用docs.AsDocumentQuery().ExecuteNextAsync 以从DocumentDB服务检索结果,您可以从中获取查询的RU费用FeedResponse<T>.RequestCharge.

对于log all request的RU,我在使用.NET客户端SDK记录操作日志时检查了客户端日志,但只有错误操作具有响应头的日志.我假设您需要编写代码来记录每个请求的RU费用,这里是代码片段,您可以参考它:

public static class DocumentDBExtension
{
    public static async Task<IEnumerable<TSource>> QueryWithRuLog<TSource>(this IQueryable<TSource> source)
    {
        List<TSource> items = new List<TSource>();
        double totalRuCost = 0;
        var query = source.AsDocumentQuery();
        while (query.HasMoreResults)
        {
            var result =await query.ExecuteNextAsync<TSource>();
            items.AddRange(result);
            //log RU
            totalRuCost += result.RequestCharge;
        }
        //log totalRuCost
        Console.WriteLine($"RUs cost:{totalRuCost}");
        return items;
    }
}

//Usage
var result=docs.QueryWithRuLog<CampaignMessage>();
Run Code Online (Sandbox Code Playgroud)