Единицы запросов в Azure Cosmos DB

Azure Cosmos DB поддерживает многие интерфейсы API, такие как SQL, MongoDB, Cassandra, Gremlin и Таблицы. У каждого API есть собственный набор операций базы данных, начиная от простого считывания и записи точек и заканчивая сложными запросами. Каждая операция базы данных потребляет системные ресурсы. Потребление зависит от сложности операции.

Azure Cosmos DB нормализует стоимость всех операций базы данных с помощью единиц запросов (или единиц RU) и измеряет затраты на основе пропускной способности (единицы запросов в секунду, RU/s).

Единица запроса — это валюта производительности, абстрагируя системные ресурсы, такие как обработка (ЦП), операции ввода-вывода в секунду и память, необходимые для выполнения операций базы данных, поддерживаемых Azure Cosmos DB. Независимо от того, является ли операция базы данных операцией записи, точечного чтения или запроса, операции всегда измеряются в RUs. Например, чтение одного элемента по идентификатору и ключу раздела использует одну запросную единицу. Элемент должен быть размером около 1 КБ. Оцениваемый размер соответствует действительности для любого API, используемого с Azure Cosmos DB. Вы можете рассчитывать затраты на пропускную способность с помощью калькулятора Емкости Azure Cosmos DB.

Основная концепция RUs представлена на следующем изображении.

Операции с базой данных расходуют единицы запроса (Request Units)

Чтобы управлять пропускной способностью и планировать ее, Azure Cosmos DB гарантирует, что количество RUs для выполнения операции базы данных с данным набором данных является детерминированным. Вы можете проверить заголовок ответа, чтобы отслеживать количество единиц ресурсов, потребляемых операцией базы данных. Зная факторы, которые влияют на стоимость RU и требования вашего приложения к пропускной способности, вы сможете эффективно управлять расходами приложения.

Тип учетной записи Azure Cosmos DB, которую вы используете, определяет, как рассчитываются затраты на потребленные единицы запроса (RUs). Существует три режима, в которых можно создать учетную запись.

  1. Режим выделенного пропускания: В этом режиме вы назначаете количество единиц запросов (RUs) для приложения в секунду с шагом в 100 единиц запросов в секунду. Чтобы масштабировать подготовленную пропускную способность для приложения, вы можете увеличить или уменьшить количество единиц запросов в любое время с шагом в 100 ЕЗ/с. Это можно сделать программным способом или с помощью портала Azure. Вы оплачиваете почасовую ставку в зависимости от количества предоставленных РУ в секунду. Дополнительные сведения см. в статье о подготовленной пропускной способности.

  2. Бессерверный режим. В этом режиме не нужно назначать пропускную способность при создании ресурсов в учетной записи Azure Cosmos DB. В конце расчетного периода вы получаете счет за количество единиц запроса, использованных для операций базы данных. Дополнительные сведения см. в статье Бессерверная пропускная способность.

  3. Режим автомасштабирования: в этом режиме вы можете автоматически и мгновенно масштабировать пропускную способность (ЕЗ/с) базы данных или контейнера на основе его использования. Эта операция масштабирования не влияет на доступность, задержку, пропускную способность или производительность рабочей нагрузки. Этот режим прекрасно подходит для критически важных рабочих нагрузок с переменными или непредсказуемыми шаблонами трафика и требует соглашений об уровне обслуживания (SLA) для обеспечения высокой производительности и масштабируемости. Дополнительные сведения см. в статье Автомасштабируемая пропускная способность.

Рекомендации по оценке необходимого количества единиц запросов

При оценке количества единиц запроса (RUs), потребляемых вашей загрузкой, учитывайте, следующие факторы:

  • Размер элемента: С увеличением размера элемента также увеличивается число единиц запросов, необходимых для чтения или записи элемента.

  • Индексация элементов. По умолчанию каждый элемент индексируется автоматически. Если вы решите не индексировать некоторые элементы в контейнере, будет потреблено меньше RUs.

  • Число свойств элемента: Если индексирование по умолчанию установлено для всех свойств, то количество единиц запроса, потребляемых для записи элемента, увеличивается по мере увеличения количества свойств элемента.

  • Индексированные свойства. Свойства, которые индексируются по умолчанию, определяются политикой индексирования для каждого контейнера. Чтобы уменьшить потребление RU в операциях записи, ограничьте количество индексированных свойств.

  • Согласованность данных: Строгие уровни согласованности и уровни согласованности с ограниченным устареванием потребляют примерно в два раза больше RUs при выполнении операций чтения, чем другие отложенные уровни согласованности.

  • Тип операций чтения: точечное считывание требует меньше ЕЗ, чем запросы.

  • Шаблоны запросов: Сложность запроса влияет на количество единиц запросов (RUs), потребляемых операцией. Факторы, которые влияют на стоимость операций запросов:

    • Количество результатов запроса.

    • Количество предикатов.

    • Характер предикатов.

    • Количество определяемых пользователем функций.

    • Размер исходных данных.

    • Размер результирующего набора.

    • Проекции

    Один и тот же запрос на одни и те же данные всегда стоит одинаковое количество единиц RUs при повторных выполнениях.

  • Использование скрипта. Так же как и запросы, хранимые процедуры и триггеры расходуют ЕЗ с учетом сложности выполняемых операций. При разработке приложения проверяйте заголовки со стоимостью запросов, чтобы лучше понять, как ресурсы производительности используются каждой из операций.

Единицы запросов и несколько регионов

Если вы назначаете ЕЗ "R" в контейнере Azure Cosmos DB (или базе данных), Azure Cosmos DB гарантирует, что ЕЗ "R" доступны в каждом регионе, связанном с учетной записью Azure Cosmos DB. Нельзя выборочно назначать RUs для определенного региона. RU, выделенные для контейнера Azure Cosmos DB (или базы данных), выделяются во всех регионах, связанных с вашей учетной записью Azure Cosmos DB.

При условии, что контейнер Azure Cosmos DB настроен с количеством R ЕЗ и с учетной записью Azure Cosmos DB связано N регионов, общее количество единиц запросов, доступных глобально в контейнере, равно R x N.

Выбор модели согласованности также влияет на пропускную способность. Вы можете получить приблизительно в 2 раза больше пропускной способности чтения для более расслабленных уровней согласованности (сеанс, согласованный префикс и согласованность в конечном счёте) по сравнению с более строгими уровнями согласованности (ограниченная устареванием или строгая согласованность).