【问题标题】:DocumentDB request charge when no results无结果时的 DocumentDB 请求费用
【发布时间】:2017-12-07 00:12:49
【问题描述】:

我希望 CosmosDB 团队的人能澄清这一点。

例如,如果我们看一下官方“性能提示”中的示例:

IDocumentQuery<Document> query = (from doc in client.CreateDocumentQuery(colSelfLink) where doc.Id == "myId" select document).AsDocumentQuery(); 
            Document myDocument = null;
            while (query.HasMoreResults)
            {
                FeedResponse<Document> res = await query.ExecuteNextAsync<Document>();
                if (res.Count != 0) {
                    myDocument = res.Single();
                    break;
                }
           }

参考:https://azure.microsoft.com/en-us/blog/performance-tips-for-azure-documentdb-part-1-2/

ref2:https://docs.microsoft.com/en-us/azure/cosmos-db/performance-tips

在上面的例子中,如果我们假设查询没有返回任何结果,这意味着HasMoreResults从一开始就是假的,2个问题:

  1. 如果ExecuteNextAsync 根本不运行,是否会收取任何请求费用? (因为HasMoreResults 总是假的)?

  2. 如果问题 1) 的答案是“是”,那么如何收取该请求费用?

【问题讨论】:

    标签: azure azure-cosmosdb


    【解决方案1】:

    IDocumentQuery 实现总是在第一次调用时返回 HasMoreResultstrue,因此 ExecuteNextAsync 将始终至少执行一次。每个查询都提交到服务器,并产生最低的 RU 费用。

    【讨论】:

    • 感谢您的回答。好吧,我可能有点不精确。让我补充一点:如果第二次HasMoreResults 返回false,那么ExecuteNextAsync 不会被第二次执行,HasMoreResults 是否会引入额外的请求费用?如果是这样 - 如何获取相关信息?
    • 或者实际上,默认情况下第一个可能是true,后续的可能是由之前的ExecuteNextAsync 调用设置的。是这样吗?
    • 是的,“第一个默认为真,后续的由之前的 ExecuteNextAsync 调用设置”。 HasMoreResults 只是 (lastContinuationToken != null)
    • 哦,哦,对了。现在它是有道理的。感谢您的澄清!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 1970-01-01
    相关资源
    最近更新 更多