Skip to main content

Постраничная выдача

По умолчанию коллекция отдаётся страницами по 1000 строк. Если строк больше, в конце ответа есть ссылка на следующую страницу:
Клиент запрашивает @odata.nextLink, пока ссылка есть. Power BI, Excel и большинство OData-библиотек делают это сами.
  • $skiptoken хранит значения порядка и ключ последней строки, поэтому продолжение идёт по ключу, а не через пропуск строк: страницы не теряют и не дублируют строки, даже если в наборе что-то изменилось.
  • @odata.nextLink переносит остальные параметры запроса ($filter, $select, $expand, $orderby).
  • Продолжение работает и у регистров, в том числе с составными, булевыми полями и перечислениями в ключе, и у результата $apply.

Размер страницы

Клиент задаёт размер страницы заголовком:
Профиль доступа может ограничить размер страницы — тогда действует меньшее значение (см. Профили).

Выдача одним ответом

Настройка «Выдача коллекций» (вкладка «Движки» формы настроек): В режиме «Одним ответом» сервер читает набор порциями («Размер порции выдачи одним ответом», по умолчанию 5000, для широких строк порция меньше) и пишет их в поток ответа. «Наибольшее число строк одним ответом» (0 — без предела) обрывает ответ ссылкой @odata.nextLink. Страницами отвечают всегда, даже в режиме «Одним ответом»:
  • если запрос несёт Prefer: odata.maxpagesize;
  • при продолжении по $skiptoken;
  • в операциях $batch;
  • если профиль доступа задаёт лимит страницы.

Что выбрать для больших выгрузок

Замеры: файловая база, около 100 тыс. документов и около 1 млн записей в каждом регистре, выдача JSON — Rust-компонентой.
  • Для полной выгрузки регистров включайте «Одним ответом» или передавайте Prefer: odata.maxpagesize=5000. При мелких страницах основное время уходит на запрос каждой страницы.
  • Ограничивайте $select нужными полями: объём и время падают в разы.
  • Для документов с табличными частями хорошо работают и обычные страницы.
  • Ответ OData4 компактнее: записи регистра накопления — 1,5 ГБ против 3,3 ГБ у standard.odata.
1С отдаёт тело ответа после окончания обработчика, поэтому при выдаче одним ответом первый байт приходит в конце. Тело не держится целиком в памяти процесса: пик памяти Apache в замерах — 1,4–1,7 ГБ при ответах 1,5–3,5 ГБ.

$skip

$skip ограничен 10 000. Глубже листайте по @odata.nextLink.