Azure Cosmos DB for NoSQL での操作の要求ユニット料金の確認

適用対象: NoSQL

Azure Cosmos DB では、多くの API (SQL、MongoDB、Cassandra、Gremlin、Table など) がサポートされています。 各 API には、固有のデータベース操作のセットがあります。 これらの操作の範囲は、単純なポイント読み取り/書き込みから、複雑なクエリにまで及びます。 各データベース操作は、それらの操作の複雑さに基づいて、システム リソースを消費します。

すべてのデータベース操作のコストは Azure Cosmos DB によって正規化され、要求ユニット (RU) によって表されます。 要求の料金は、すべてのデータベース操作で使用される要求ユニットです。 RU は、Azure Cosmos DB によってサポートされるデータベース操作を実行するために必要な CPU、IOPS、メモリなどのシステム リソースを抽象化する、パフォーマンスの通貨と考えることができます。 お使いのコンテナーの操作にどの API 使用するかに関係なく、コストは RU で測定されます。 データベース操作が書き込み、ポイント読み取り、またはクエリのいずれの場合でも、コストは常に RU で測定されます。 詳細については、Azure Cosmos DB の要求ユニットに関するページを参照してください。

この記事では、Azure Cosmos DB for NoSQL のコンテナーに対して実行された任意の操作の要求ユニット (RU) 消費量を確認するさまざまな方法を紹介します。 別の API を使用している場合は、MongoDB 用 APICassandra 用 APIGremlin 用 APITable 用 API の記事をご覧ください。

消費量は現在、Azure portal を使用するか、いずれかの SDK を通じて Azure Cosmos DB からの応答を調べることによってのみ測定できます。 NoSQL 用 API を使用している場合、ある操作の要求料金をいくつかの方法で確認できます。

Azure ポータルの使用

  1. Azure portal にサインインします。

  2. 新しい Azure Cosmos DB アカウントを作成してデータを取り込むか、既にデータが存在する既存の Azure Cosmos DB アカウントを選択します。

  3. [データ エクスプローラー] ウィンドウに進み、操作の対象となるコンテナーを選択します。

  4. [新しい SQL クエリ] を選択します。

  5. 有効なクエリを入力し、 [クエリの実行] を選択します。

  6. [Query Stats](クエリの統計) を選択すると、実行した要求の実際の使用量が表示されます。

    Screenshot of a SQL query request charge in the Azure portal.

.NET SDK を使用する

.NET SDK v2 から返されたオブジェクトにより RequestCharge プロパティが公開されます。

ResourceResponse<Document> fetchDocumentResponse = await client.ReadDocumentAsync(
    UriFactory.CreateDocumentUri("database", "container", "itemId"),
    new RequestOptions
    {
        PartitionKey = new PartitionKey("partitionKey")
    });
var requestCharge = fetchDocumentResponse.RequestCharge;

StoredProcedureResponse<string> storedProcedureCallResponse = await client.ExecuteStoredProcedureAsync<string>(
    UriFactory.CreateStoredProcedureUri("database", "container", "storedProcedureId"),
    new RequestOptions
    {
        PartitionKey = new PartitionKey("partitionKey")
    });
requestCharge = storedProcedureCallResponse.RequestCharge;

IDocumentQuery<dynamic> query = client.CreateDocumentQuery(
    UriFactory.CreateDocumentCollectionUri("database", "container"),
    "SELECT * FROM c",
    new FeedOptions
    {
        PartitionKey = new PartitionKey("partitionKey")
    }).AsDocumentQuery();
while (query.HasMoreResults)
{
    FeedResponse<dynamic> queryResponse = await query.ExecuteNextAsync<dynamic>();
    requestCharge = queryResponse.RequestCharge;
}

Java SDK の使用

Java SDK から返されたオブジェクトにより getRequestCharge() メソッドが公開されます。

RequestOptions requestOptions = new RequestOptions();
requestOptions.setPartitionKey(new PartitionKey("partitionKey"));

Observable<ResourceResponse<Document>> readDocumentResponse = client.readDocument(String.format("/dbs/%s/colls/%s/docs/%s", "database", "container", "itemId"), requestOptions);
readDocumentResponse.subscribe(result -> {
    double requestCharge = result.getRequestCharge();
});

Observable<StoredProcedureResponse> storedProcedureResponse = client.executeStoredProcedure(String.format("/dbs/%s/colls/%s/sprocs/%s", "database", "container", "storedProcedureId"), requestOptions, null);
storedProcedureResponse.subscribe(result -> {
    double requestCharge = result.getRequestCharge();
});

FeedOptions feedOptions = new FeedOptions();
feedOptions.setPartitionKey(new PartitionKey("partitionKey"));

Observable<FeedResponse<Document>> feedResponse = client
    .queryDocuments(String.format("/dbs/%s/colls/%s", "database", "container"), "SELECT * FROM c", feedOptions);
feedResponse.forEach(result -> {
    double requestCharge = result.getRequestCharge();
});

詳細については、Azure Cosmos DB for NoSQL アカウントを使用して Java アプリケーションを構築するクイックスタートを参照してください。

Node.js SDK の使用

Node.js SDK から返されるオブジェクトは、headers サブオブジェクトを公開します。基になる HTTP API から返されるすべてのヘッダーが、このサブオブジェクトによってマップされます。 要求の使用量は、x-ms-request-charge キーで得られます。

const item = await client
    .database('database')
    .container('container')
    .item('itemId', 'partitionKey')
    .read();
var requestCharge = item.headers['x-ms-request-charge'];

const storedProcedureResult = await client
    .database('database')
    .container('container')
    .storedProcedure('storedProcedureId')
    .execute({
        partitionKey: 'partitionKey'
    });
requestCharge = storedProcedureResult.headers['x-ms-request-charge'];

const query = client.database('database')
    .container('container')
    .items
    .query('SELECT * FROM c', {
        partitionKey: 'partitionKey'
    });
while (query.hasMoreResults()) {
    var result = await query.executeNext();
    requestCharge = result.headers['x-ms-request-charge'];
}

詳細については、Azure Cosmos DB for NoSQL アカウントを使用して Node.js アプリを構築するクイックスタートを参照してください。

Python SDK の使用

Python SDKContainer オブジェクトは、last_response_headers ディクショナリを公開します。直前に実行された操作に関して、基になる HTTP API から返されるすべてのヘッダーが、このディクショナリによってマップされます。 要求の使用量は、x-ms-request-charge キーで得られます。

new_item = {
    "id": "70b63682-b93a-4c77-aad2-65501347265f",
    "partition_key": "61dba35b-4f02-45c5-b648-c6badc0cbd79",
    "name": "Yamba Surfboard"
}
container.create_item(new_item)

request_charge = container.client_connection.last_response_headers["x-ms-request-charge"]
existing_item = container.read_item(
    item="70b63682-b93a-4c77-aad2-65501347265f"
    partition_key="61dba35b-4f02-45c5-b648-c6badc0cbd79"
)

request_charge = container.client_connection.last_response_headers["x-ms-request-charge"]

詳細については、「クイックスタート: Azure Cosmos DB for NoSQL アカウントを使用して Python アプリを構築する」を参照してください。

次のステップ

RU 使用量を最適化する方法については、次の記事をご覧ください。