Поиск платы за единицу запроса для операций в Azure Cosmos DB для NoSQL
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
Azure Cosmos DB поддерживает многие интерфейсы API, такие как SQL, MongoDB, Cassandra, Gremlin и Таблицы. У каждого API есть собственный набор операций базы данных, начиная от простого считывания и записи точек и заканчивая сложными запросами. Каждая операция базы данных потребляет системные ресурсы. Потребление зависит от сложности операции.
Стоимость всех операций базы данных нормализуется с помощью Azure Cosmos DB и выражается в единицах запроса (ЕЗ). Расходы на запросы выражаются в единицах запроса, потребленных всеми операциями базы данных. ЕЗ можно считать единицей производительности, которая абстрагирует системные ресурсы (например, ЦП, операции ввода-вывода в секунду и память), необходимые для выполнения операций базы данных, поддерживаемых Azure Cosmos DB. Независимо от того, какой API вы используете для взаимодействия с контейнером, затраты всегда измеряются в ЕЗ. Независимо от типа операции базы данных (запись, чтение или запрос), затраты всегда измеряются в ЕЗ. Дополнительные сведения приведены в статье Единицы запроса в Azure Cosmos DB.
В этой статье представлены различные способы поиска потребления единиц запроса для любой операции, выполняемой в контейнере в Azure Cosmos DB для NoSQL. Если вы используете другой API, ознакомьтесь с API для MongoDB, API для Cassandra, API для Gremlin и API для таблицы.
В настоящее время потребление можно оценить только с помощью портала Azure или сведений из ответа, который Azure Cosmos DB направляет через один из пакетов SDK. Если вы используете API для NoSQL, у вас есть несколько вариантов поиска платы за запрос для операции.
Использование портала Azure
Войдите на портал Azure.
Создайте новую учетную запись Azure Cosmos DB и введите ее с данными или выберите существующую учетную запись Azure Cosmos DB, которая уже содержит данные.
Перейдите на панель обозревателя данных и выберите контейнер, с которым собираетесь работать.
Выберите New SQL Query (Создать SQL-запрос).
Введите допустимый запрос и щелкните Выполнить запрос.
Выберите Статистика запросов, чтобы отобразилось количество ЕЗ, фактически затраченных на выполненный запрос.
Использование пакета SDK для .NET
Объекты, возвращаемые из пакета SDK для .NET версии 2 предоставляют свойство 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;
}
Использование пакета SDK для Java
Объекты, возвращаемые из пакета SDK для Java предоставляют метод 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();
});
Дополнительные сведения см . в кратком руководстве по созданию приложения Java с помощью учетной записи Azure Cosmos DB для NoSQL.
Использование пакета SDK для Node.js
Объекты, возвращаемые из пакета SDK для Node.js предоставляют вложенный объект headers
, который позволяет сопоставить все заголовки, возвращаемые базовым интерфейсом API для HTTP. Сведения о расходах в ЕЗ доступны в ключе 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'];
}
Дополнительные сведения см . в кратком руководстве. Создание приложения Node.js с помощью учетной записи Azure Cosmos DB для NoSQL.
Использование Python SDK
Объект Container
, возвращаемый из пакета SDK для Python предоставляет словарь last_response_headers
, который позволяет сопоставить все заголовки для последней выполненной операции, возвращаемые базовым API HTTP. Сведения о расходах в ЕЗ доступны в ключе 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"]
Дополнительные сведения см . в кратком руководстве по созданию приложения Python с помощью учетной записи Azure Cosmos DB для NoSQL.
Следующие шаги
Сведения об оптимизации потребления ЕЗ см. в следующих статьях:
- Единицы запросов в Azure Cosmos DB
- Optimize provisioned throughput cost in Azure Cosmos DB (Оптимизация стоимости подготовленной пропускной способности в Azure Cosmos DB)
- Optimize query cost in Azure Cosmos DB (Оптимизация затрат на отправку запросов в Azure Cosmos DB)
- Globally scale provisioned throughput (Глобальное масштабирование подготовленной пропускной способности)
- Общие сведения о подготовленной пропускной способности в Azure Cosmos DB
- Подготовка пропускной способности для контейнера
- Мониторинг и отладка с помощью аналитических сведений в Azure Cosmos DB