Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL
Azure Cosmos DB поддерживает многие интерфейсы API, такие как SQL, MongoDB, Cassandra, Gremlin и Таблицы. У каждого API есть собственный набор операций базы данных, начиная от простого считывания и записи точек и заканчивая сложными запросами. Каждая операция базы данных потребляет системные ресурсы. Потребление зависит от сложности операции.
Стоимость всех операций базы данных нормализуется с помощью Azure Cosmos DB и выражается в единицах запроса (ЕЗ). Расходы на запросы выражаются в единицах запроса, потребленных всеми операциями базы данных. ЕЗ можно считать единицей производительности, которая абстрагирует системные ресурсы (например, ЦП, операции ввода-вывода в секунду и память), необходимые для выполнения операций базы данных, поддерживаемых Azure Cosmos DB. Независимо от того, какой API вы используете для взаимодействия с контейнером, затраты всегда измеряются в единицах запросов (RUs). Независимо от того, является ли операция с базой данных записью, чтением или запросом, затраты всегда измеряются в RUs. Дополнительные сведения приведены в статье Единицы запроса в 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
из Python SDK предоставляет словарь last_response_headers
, который сопоставляет все заголовки, возвращаемые базовым HTTP API для последней выполненной операции. Стоимость запроса доступна в ключе x-ms-request-charge
.
new_item = {
"id": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb",
"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="aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb"
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