Vyhledání poplatku za jednotku žádosti pro operace ve službě Azure Cosmos DB for NoSQL

PLATÍ PRO: NoSQL

Azure Cosmos DB podporuje mnoho rozhraní API, jako jsou SQL, MongoDB, Cassandra, Gremlin a Table. Každé rozhraní API má vlastní sadu databázových operací. Tyto operace se liší od jednoduchých bodů čtení a zápisů až po složité dotazy. Každá databázová operace využívá systémové prostředky na základě složitosti operace.

Služba Azure Cosmos DB normalizuje náklady na všechny databázové operace a vyjadřuje je jednotkami žádostí (RU). Poplatky za žádosti jsou jednotky žádostí spotřebované všemi databázovými operacemi. Jednotky RU si můžete představit jako měnu výkonu, která abstrahuje systémové prostředky, jako jsou procesor, IOPS a paměť, které jsou potřeba k provádění databázových operací podporovaných službou Azure Cosmos DB. Bez ohledu na to, které rozhraní API používáte k interakci s kontejnerem, se náklady vždy měří v RU. Ať už je operací databáze zápis, čtení, nebo dotazování, náklady se vždy měří v jednotkách RU. Další informace najdete v tématu Jednotky žádostí ve službě Azure Cosmos DB.

Tento článek představuje různé způsoby, jak najít spotřebu jednotek žádosti pro jakoukoli operaci spuštěnou v kontejneru ve službě Azure Cosmos DB for NoSQL. Pokud používáte jiné rozhraní API, přečtěte si téma API pro MongoDB, rozhraní API pro Cassandra, rozhraní API pro Gremlin a rozhraní API pro tabulky.

V současné době můžete měřit spotřebu pouze pomocí webu Azure Portal nebo kontrolou odpovědi odeslané ze služby Azure Cosmos DB prostřednictvím jedné ze sad SDK. Pokud používáte rozhraní API pro NoSQL, máte několik možností pro vyhledání poplatku za žádost pro operaci.

Použití portálu Azure Portal

  1. Přihlaste se k portálu Azure.

  2. Vytvořte nový účet Služby Azure Cosmos DB a nasílte ho daty nebo vyberte existující účet služby Azure Cosmos DB, který už obsahuje data.

  3. Přejděte do podokna Průzkumník dat a vyberte kontejner, na který chcete pracovat.

  4. Vyberte Nový dotaz SQL.

  5. Zadejte platný dotaz a pak vyberte Spustit dotaz.

  6. Výběrem statistik dotazu zobrazíte skutečné poplatky za žádost, kterou jste provedli.

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

Použití sady .NET SDK

Objekty vrácené ze sady .NET SDK v2 zpřístupňují RequestCharge vlastnost:

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;
}

Použití sady Java SDK

Objekty vrácené ze sady Java SDK zpřístupňují metodu 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();
});

Další informace najdete v tématu Rychlý start: Vytvoření aplikace v Javě pomocí účtu Azure Cosmos DB for NoSQL.

Použití sady Node.js SDK

Objekty vrácené ze sady Node.js SDK zpřístupňují headers podobjekt, který mapuje všechny hlavičky vrácené podkladovým rozhraním HTTP API. Poplatek za žádost je k dispozici v rámci x-ms-request-charge klíče:

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'];
}

Další informace najdete v tématu Rychlý start: Vytvoření aplikace Node.js pomocí účtu Azure Cosmos DB for NoSQL.

Použití sady Python SDK

Objekt Container ze sady Python SDK zveřejňuje slovník, který mapuje last_response_headers všechny hlavičky vrácené podkladovým rozhraním HTTP API pro poslední provedenou operaci. Poplatek za žádost je k dispozici v rámci x-ms-request-charge klíče:

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"]

Další informace najdete v tématu Rychlý start: Vytvoření aplikace v Pythonu pomocí účtu Azure Cosmos DB for NoSQL.

Další kroky

Informace o optimalizaci spotřeby RU najdete v těchto článcích: