Выбор ответа Senior Django REST Framework обновлено

Когда выбрать курсорную пагинацию

Вопрос

Лента событий с миллионами записей и постоянными вставками. Какую пагинацию DRF выбрать?

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

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

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

Коротко

Правильный ответ: CursorPagination: страницы стабильны при вставках, запрос по индексу. Offset-пагинация на глубоких страницах заставляет базу пролистать все предыдущие строки (OFFSET 1000000), а новые записи сдвигают страницы, и клиент видит дубли или пропуски.

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

  1. CursorPagination: страницы стабильны при вставках, запрос по индексуправильный ответ
  2. PageNumberPagination с большим page_size, чтобы страниц было меньше
  3. LimitOffsetPagination с индексом по created, чтобы offset был быстрым
  4. Без пагинации: отдавать всё одним ответом и кешировать его в Redis

Разбор

Offset-пагинация на глубоких страницах заставляет базу пролистать все предыдущие строки (OFFSET 1000000), а новые записи сдвигают страницы, и клиент видит дубли или пропуски. Курсорная пагинация запоминает позицию по упорядоченному уникальному полю (created, id) и делает WHERE created < курсор LIMIT n. Цена: нельзя перейти сразу на страницу N и нужна стабильная сортировка.

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

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