Запрос БД Cosmos не возвращает все результаты - PullRequest
0 голосов
/ 31 октября 2018

Сценарий 1:

Одно из следующего:

  • Запрос Cosmos DB не возвращает всех ожидаемых результатов в одном запросе.
  • Запрос Cosmos DB возвращает различное количество результатов для того же запроса.

Такое поведение можно наблюдать в следующих случаях:

  1. На портале выполняется запрос с помощью TOP, например ВЫБЕРИТЕ ТОП 10, но возвращенные результаты содержат менее 10 элементов, как и ожидалось.

  2. На портале выполняется один и тот же запрос, но каждый раз появляется другой набор результатов. Наборы результатов отличаются, но некоторые результаты покрываются другим результатом. Например. рассматривая запрос с ожидаемыми результатами [C, O, S, M, O, S]. В 1-м исполнении результаты: [C, O, S]. Во втором исполнении результат [C, O, S, M, O]. Второй результат охватывает первые результаты.

  3. Используя API REST запроса, запрос возвращает меньше результатов, чем при выполнении того же запроса на портале.

Сценарий 2:

  • Запрос к базе данных Cosmos возвращает разные результаты (не подсчет результатов) для того же запроса

1 Ответ

0 голосов
/ 31 октября 2018

Сценарий 1

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

  • В коллекции недостаточно подготовленных RU для размещения текущего трафика, поступающего в коллекцию, и текущий запрос затрагивается.
  • Запрос значительно расширен.

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

Способ перебора страниц зависит от способа выполнения запроса.

  • В Portal, если запрос содержит более одной страницы результатов, вы должны увидеть доступную ссылку «Загрузить еще». Нажав на эту ссылку, вы перейдете на следующую страницу результатов.
  • Используя SDK, в SDK есть поддержка подкачки за кулисами. Примеры .NET SDK можно найти в примере кода . Другие SDK работают аналогичным образом.
  • Используя REST API, вам потребуется получить значение токена продолжения в заголовке текущего запроса, а затем установить его в заголовке запроса для следующего запроса. Имя заголовка: x-ms-продолжение . Более подробную информацию можно найти в статье о ресурсах для запросов .

Сценарий 2

Это происходит из-за трафика записи, поступающего на учетную запись. Таким образом, результат запроса отличается для каждого запроса.

...