Почему CloudTable.ExecuteQuerySegmentedAsync возвращает только часть максимум 1k объектов? - PullRequest
1 голос
/ 08 апреля 2019

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

1. Запрос объектов на PartitionKey, RowKey и иногда дополнительная фильтрация 2. Обработка результирующего сегмента 3. Повторяя это до continuationtoken== null

Запуск с помощью функции Azure (V2), Windows.Azure.Storage 9.3.1.

Проблема, с которой мы сталкиваемся, заключается в том, что сегменты, возвращаемые ExecuteQuerySegmentedAsync, различаются по размеру от примерно 200 до 700 объектов. Я смог воспроизвести это с помощью простого запроса только на PartitionKey, без дополнительной фильтрации. Увидеть: https://user -images.githubusercontent.com / 49230954 / 55467681-18f2cf00-5602-11e9-90ad-70c324eb7d3c.JPG

Состояния документации ExecuteQuerySegmentedAsync может вернуть до 1 тыс. Сущностей. Есть идеи о том, почему мы не попали в этот номер? Это (как ожидается) резко повысит производительность.

Обновление: максимальное время запроса 5 секунд не достигнуто, получение сегмента занимает около 200-300 мс.

1 Ответ

1 голос
/ 08 апреля 2019

Состояния документации ExecuteQuerySegmentedAsync может возвращать до 1 КБ сущностей. Есть идеи, почему мы не набираем это число?

Каждый запрос к таблице разрешается выполнять не более 5 секунд. По истечении этих 5 секунд табличный сервис вернет столько сущностей, которые он смог найти на основании запроса (максимум 1000 сущностей). Вполне возможно, что за эти 5 секунд не было найдено ни одной сущности, и в этом случае она вернет ноль сущностей с маркером продолжения.

Из этого link:

Запрос к службе таблиц может вернуть максимум 1000 объекты в одно время и могут выполняться в течение максимум пяти секунд. Если результирующий набор содержит более 1000 объектов, если запрос не завершить в течение пяти секунд, или если запрос пересекает раздел границы, ответ включает в себя пользовательские заголовки, содержащие набор жетоны продолжения. Токены продолжения можно использовать для построения последующий запрос на следующую страницу данных. Для дополнительной информации о токенах продолжения см. Тайм-аут запроса и разбиение на страницы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...