10

提供された .NET クライアント ライブラリを介して DocumentDB クエリ リクエストを実行するときに、「リクエスト チャージ」を取得できるかどうかを調べています。詳細は、基礎となる HTTP ヘッダー "x-ms-request-charge" に返されます。これは、Fiddler などを介して監視できますが、.NET を介して直接取得できれば望ましいと思います。

誰かがこれをしましたか?または、少なくともそれが不可能かどうかを確認できますか?

アップデート:

他の操作ではなく、クエリを実行するときにリクエスト料金が発生するという明確化を追加しました。

4

2 に答える 2

12

.Net ライブラリを介してそれを取得できるはずです。たとえば、Create New User操作の応答を示す以下のスクリーンショットを見てください。結果は、Microsoft.Azure.Client.ResourceResponse<T>というプロパティを持つタイプRequestChargeです。

ここに画像の説明を入力

アップデート

そのため、クエリ結果を確認しましたが、.Net ライブラリで直接公開されていないことは間違いありません。ただし、これはResponseHeadersプロパティで利用可能であり、以下のようなものを使用して見つけることができます。

FeedResponse<Microsoft.Azure.Documents.Document> queryResult = await documentClient.CreateDocumentQuery<Microsoft.Azure.Documents.Document>(collectio‌​nSelfLink, query, options).AsDocumentQuery().ExecuteNextAsync<Microsoft.Azure.Documents.Document>(‌​);
var requestCharge = queryResult.ResponseHeaders["x-ms-request-charge"];

Fiddler で検査する代わりに。

ノート

ExecuteNextAsync継続トークンを含む結果のサブセットを返す場合があります。すべての結果が必要な場合は、ドキュメント データベースが継続トークンを送信しなくなるまで反復する必要があります。

var docDbQueryable = documentClient.CreateDocumentQuery<Document>(collectio‌​nSelfLink, query, options).AsDocumentQuery();
var docDbResults = new List<Document>();
do
{
    var batchResult = await docDbQueryable.ExecuteNextAsync<Document>(‌​);;
    docDbResults.AddRange(batchResult);
}
while (docDbQueryable.HasMoreResults);
return docDbResults;
于 2014-11-09T21:21:26.950 に答える
7

各クエリのコストをログに記録し、ページングも処理するために必要なものは次のとおりです。

public async Task<IEnumerable<T>> Query<T>(string databaseId, string collectionId, SqlQuerySpec sqlQuery, int take)
where T : Resource
{
    double queryCost = 0;
    const int maxPageSize = 100;

    var query = _client.CreateDocumentQuery<T>(
        UriFactory.CreateDocumentCollectionUri(databaseId, collectionId),
        sqlQuery,
        new FeedOptions() {MaxItemCount = Math.Min(maxPageSize, take)}).AsDocumentQuery();

    var response = await query.ExecuteNextAsync<T>();
    queryCost += response.RequestCharge;
    var entities = response.ToList();

    while (entities.Count < take && query.HasMoreResults)
    {
        var nextResponse = await query.ExecuteNextAsync<T>();
        queryCost += nextResponse.RequestCharge;
        entities.AddRange(nextResponse);
    }

    Debug.WriteLine(
        "Query [{0}] for {1} documents in collection [{2}] cost {3} RUs.",
        sqlQuery.QueryText,
        take,
        collectionId,
        queryCost);

    return entities.Take(take).ToList(); // We may end up with more than the requested number of items.
}
于 2015-12-03T03:10:55.453 に答える