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


Разбиение на страницы в Azure Cosmos DB для NoSQL

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

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

Выполнение запросов

Иногда результаты запроса разделяются на несколько страниц. Отдельное выполнение запроса создает результаты каждой страницы. Если результаты запроса не могут быть возвращены в одном выполнении, Azure Cosmos DB для NoSQL автоматически разбивает результаты на несколько страниц.

Можно указать максимальное количество элементов, возвращаемых запросом, задав MaxItemCount. MaxItemCount задается отдельно для каждого запроса и указывает обработчику запросов ограничение на максимальное количество элементов. Для параметра MaxItemCount можно задать значение -1, если не нужно устанавливать ограничение на количество результатов для каждого выполнения запроса.

Кроме того, есть и другие причины, по которым обработчик запросов может разделить результаты запроса на несколько страниц. Некоторые из причин:

  • Контейнер отрегулирован, и ЕЗ недоступны для получения дополнительных результатов запроса.
  • Ответ на выполнение запроса слишком большой.
  • Выполнение запроса длится слишком долго.
  • Это было более эффективным для обработчика запросов, чтобы возвращать результаты в дополнительных выполнениях

Число возвращаемых элементов для каждого выполнения запроса меньше или равно MaxItemCount. Однако возможно, что другие критерии могут ограничить количество результатов, возвращаемых запросом. Если один и тот же запрос выполняется несколько раз, количество страниц может быть разным. Например, если запрос регулируется, на страницу может быть меньше доступных результатов, что означает, что запрос содержит дополнительные страницы. В некоторых случаях запрос может вернуть пустую страницу результатов.

Обработка нескольких страниц результатов

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

Ниже приведены некоторые примеры обработки результатов из запросов с несколькими страницами.

Маркеры продолжения

В пакетах SDK для .NET и для Java можно при необходимости использовать маркеры продолжения в качестве закладки для обработки запроса. Выполнение запросов Azure Cosmos DB для NoSQL без отслеживания состояния на стороне сервера и может быть возобновлено в любое время с помощью маркера продолжения. Для пакета SDK для Python маркеры продолжения поддерживаются только для запросов отдельных секций. Ключ секции должен быть указан в объекте параметров, так как его недостаточно для самого запроса.

Ниже приведен пример использования маркеров продолжения.

Если запрос возвращает маркер продолжения, есть дополнительные результаты запроса.

В REST API NoSQL Azure Cosmos DB можно управлять маркерами продолжения с помощью заголовка x-ms-continuation . Как и при запросе с помощью пакета SDK для .NET или Java, если x-ms-continuation заголовок ответа не пуст, это означает, что запрос имеет дополнительные результаты.

Если вы используете ту же версию пакета SDK, маркеры продолжения никогда не истекают. При необходимости можно ограничить размер маркера продолжения. Независимо от объема данных или количества физических секций в контейнере, запросы возвращают один маркер продолжения.

Маркеры продолжения нельзя использовать для запросов с GROUP BY или DISTINCT , так как для этих запросов требуется хранение значительного количества состояний. Для запросов с использованием DISTINCT можно использовать маркеры продолжения при добавлении ORDER BY в запрос.

Ниже приведен пример запроса с DISTINCT, где может использоваться маркер продолжения.

SELECT DISTINCT VALUE
    e.name
FROM
    employees e
ORDER BY
    e.name