Выбор ответа Senior REST API и OpenAPI обновлено

Курсорная пагинация

Вопрос

Лента событий растёт на тысячи записей в минуту, клиент листает её вглубь. Почему курсорная пагинация лучше offset?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Вставки сдвигают offset, а курсор продолжает с последней записи. Offset считает позицию от начала, и новые записи сдвигают её: часть элементов повторится или пропадёт, а OFFSET 100000 заставляет БД перебрать 100 тысяч строк.

Варианты ответа

  1. Offset не поддерживается в PostgreSQL для больших таблиц
  2. Курсор позволяет перейти на любую страницу по её номеру
  3. Вставки сдвигают offset, а курсор продолжает с последней записиправильный ответ
  4. Курсор уменьшает размер ответа, поэтому страницы грузятся быстрее

Разбор

Offset считает позицию от начала, и новые записи сдвигают её: часть элементов повторится или пропадёт, а OFFSET 100000 заставляет БД перебрать 100 тысяч строк. Курсор (keyset) запрашивает «после такого-то id» по индексу. Произвольный переход на страницу как раз минус курсора. Offset в PostgreSQL есть. Размер ответа от способа пагинации не зависит.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.