Поделиться через


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

Область применения: Nosql Mongodb Кассандра Гремлин Таблица

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

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

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

Обобщенная схема использования ЕЗ представлена на следующем изображении.

              Операции в базе данных потребляют единицы запроса

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

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

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

    Вы можете назначать пропускную способность на двух уровнях детализации.

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

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

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

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

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

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

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

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

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

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

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

    • Количество результатов запроса.
    • Количество предикатов.
    • Характер предикатов.
    • Количество определяемых пользователем функций.
    • Размер исходных данных.
    • Размер результирующего набора.
    • Проекции.

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

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

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

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

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

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