TGViewer
Burmistrov - It и около Burmistrov - It и около @crazyelephant_note · 1.1K subscribers
Post #746 459
Пагинация девять на двенадцать… 5 способов реализации, о которых должен знать системный аналитик

🧐Пагинация - самый частозабываемый элемент на практической части собеседования. Неправильная пагинация может привести к медленной загрузке данных, дублированию или потере записей. Разберём, какие подходы существуют и когда их применять.

Пагинация – важный механизм для работы с большими объемами данных в API. Она позволяет разбить выдачу на страницы, чтобы не перегружать систему и упростить работу с информацией. Существует несколько подходов к реализации пагинации, каждый из которых имеет свои преимущества и недостатки. Давайте рассмотрим основные:

🧮Offset pagination (Смещение)
Описание: Самый простой и понятный метод. Использует параметры offset (смещение от начала) и limit (количество элементов на странице).
Пример: GET /users?offset=20&limit=10 (вернет пользователей с 21-го по 30-го).
Плюсы: Простота реализации.
Минусы: Неэффективен при больших смещениях, может приводить к дублированию или пропуску данных при изменении набора.

📄Page-based pagination (Постраничная)
Описание: Данные разбиваются на страницы фиксированного размера. Используются параметры page (номер страницы) и size (размер страницы).
Пример: GET /products?page=3&size=25 (вернет 25 продуктов с третьей страницы).
Плюсы: Интуитивно понятна пользователю.
Минусы: Проблемы с производительностью при больших номерах страниц и изменениях в наборе данных.

🔑Keyset pagination (На основе ключей)
Описание: Использует уникальное поле (или комбинацию полей) в качестве ключа для определения начала следующей страницы.
Пример: GET /articles?after=article_id_123&limit=10 (вернет 10 статей после статьи с ID article_id_123).
Плюсы: Более эффективна, чем offset и page-based пагинация, особенно при часто изменяющихся данных. Избегает проблем с дублированием и пропуском.
Минусы: Более сложная реализация, требует наличия подходящего поля для ключа.

🖱️Cursor-based pagination (На основе курсора)
Описание: Использует "курсор" – непрозрачный токен, который указывает на конкретную точку в наборе данных. Может поддерживать как прямую, так и обратную навигацию.
Пример: GET /events?cursor=YXJ0aWNsZXMlM0Ez (вернет события, начиная с позиции, закодированной в курсоре).
Плюсы: Гибкая, позволяет эффективно перемещаться в обоих направлениях.
Минусы: Курсор может быть непрозрачным для клиента, усложняет отладку.

➕Combined pagination (Комбинированная)
Описание: Объединяет разные подходы для оптимизации извлечения данных в API. Например, для первой страницы использовать offset, а для последующих – keyset.
Плюсы: Позволяет достичь наилучшей производительности в конкретном сценарии.
Минусы: Сложность реализации и поддержки.


Пример структуры ответа API с пагинацией:

"data": [], // массив элементов
"pagination": {
"total_pages": 5, // всего страниц
"current_page": 2, // текущая страница
"next_cursor": "abc123" // курсор для следующей страницы (если keyset/cursor)
}
}


❓Когда какой метод выбирать?
➖Offset – если данные статичны и нужна простота.
➖Keyset/Cursor – если данные часто обновляются.
➖Combined – если API должно работать оптимально в разных сценариях.

🔴Какие ошибки чаще всего допускают?
1️⃣Не учитывают сортировку → дублирование данных.
2️⃣Не ограничивают limit → кто-то запросит миллион записей разом.
3️⃣Забывают про total_count → клиент не может построить нормальный UI.

🔗Полезные ссылки:
- Пагинация в Yandex Cloud
- Pagination with Relative Cursors (Shopify Engineering)

Вы спросите «Можно ли вообще обойтись без пагинации?» (да, если использовать WebSockets или реактивные подходы)
  • 🔥 6
  • 👍 2
  • 👏 2
More from @crazyelephant_note
  1. Sep 29, 2026В прошлом году на стачке я освоил навык настройки линукс сервера, смотрите видео. В этом г…
  2. Sep 28, 2026Post #1123
  3. Sep 27, 2026А 5g вообще было? Мне кажется вместо LTE я видел надпись 5g, а сейчас это подпись к назван…
  4. Sep 25, 2026Самые важные вещи в мире сначала кажутся непопулярными, странными, нишевыми, даже скучными…
  5. Sep 21, 2026Каждый понедельник я буду вкидывать умную мысль. На выходных много общался с людьми, все И…
  6. Sep 19, 2026Питер, как насчёт послушать крутых спикеров? 24 сентября 2026 • Санкт-Петербург • Офлайн м…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →