Senior
54
Kako implementirati paginaciju u API-ju? Problemi sa OFFSET u PostgreSQL i alternative (paginacija zasnovana na kursoru)?
Компаније где су питане
платформа офд
Одговор од АИ
sobes.tech АИ
Пагинация в API нужна для ограничения объёма данных, возвращаемых за один запрос. Часто используется OFFSET в SQL, например:
SELECT * FROM items ORDER BY id LIMIT 10 OFFSET 100;
Но OFFSET имеет проблемы:
- При больших значениях OFFSET запросы становятся медленнее, так как база должна пропустить много строк.
- При изменении данных между запросами возможны пропуски или дублирование записей.
Альтернатива — cursor-based pagination (пагинация на основе курсора):
Вместо смещения передаётся значение последнего полученного элемента (например, id или timestamp). Запрос выглядит так:
SELECT * FROM items WHERE id > :last_id ORDER BY id LIMIT 10;
Преимущества:
- Быстрее при больших объёмах данных.
- Более стабильна при изменении данных (нет пропусков и дубликатов).
Недостаток — сложнее реализовать и поддерживать, особенно если сортировка сложная.
В Java API можно реализовать передачу курсора как параметра запроса, например ?after=12345&limit=10.