Pagination: тест на припоминание
Подсказки на свободное припоминание по всему юниту. Сначала ответьте своими словами, затем откройте модельный ответ и сравните.
Припоминание сильнее перечитывания. На каждую подсказку проговорите или запишите полный ответ по памяти, прежде чем открыть модельный — именно усилие припоминания закрепляет механизм.
Восстановите ключевые механизмы юнита — почему offset растёт с глубиной, почему он дрейфует, что делает keyset-ключ валидным, почему cursor непрозрачен и почему точный подсчёт дорог — не подглядывая в урок.
- 01Почему LIMIT 20 OFFSET 200000 становится медленнее на глубине, хотя всегда возвращает 20 строк?
- 02Объясните result drift: почему offset-лента показывает дубликаты и пропуски и почему даже на маленькой таблице?
- 03Какими двумя свойствами должен обладать keyset-ключ сортировки и что ломается, если ключ не уникален?
- 04Зачем отдавать opaque cursor вместо сырых ключей (created_at, id) и что клиент с ним делает?
- 05Что keyset отдаёт по сравнению с offset и когда offset всё ещё верный выбор?
- 06Почему точный итог дорог в Postgres и каковы альтернативы в порядке предпочтения?
Если вы восстановили каждый ответ по памяти, у вас есть стержень юнита: стоимость offset растёт с глубиной, потому что движок читает и отбрасывает все предыдущие строки; offset дрейфует, потому что позиция не стабильный адрес при записи; валидный keyset-ключ уникален, стабилен и подкреплён индексом, сравнивается как целый кортеж; cursor непрозрачен, чтобы контракт мог эволюционировать, а клиенты не собирали дорогие seek (поиск по индексу); keyset обменивает произвольные переходы по страницам на плоскую задержку, поэтому offset всё ещё подходит ограниченным админским поверхностям; а точный подсчёт это полный скан под MVCC, поэтому оценивайте или зондируйте через n+1. Теперь, когда будете ревьюить list-эндпоинт, прокрутите эти шесть вопросов в голове — ответы скажут, выдержит ли дизайн десять миллионов строк и постоянные записи.
Что-то непонятно?
Задай вопрос по этому уроку. Вопросы анонимны и попадают напрямую автору — урок станет лучше.