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