Нумерация страниц со смещением против нумерации страниц курсора

#pagination #architecture #api-design

#разбивка на страницы #архитектура #api-дизайн

Вопрос:

Я изучаю разбивку на страницы, и у меня есть несколько вопросов.

  1. В чем разница между двумя подходами?
  2. Наилучший вариант использования разбивки на страницы на основе курсора?
  3. Может ли разбивка на страницы на основе курсора перейти на определенную страницу?
  4. Может ли нумерация страниц на основе курсора вернуться к предыдущей странице?
  5. Есть ли какие-либо различия в производительности между ними?

Мои мысли

Я думаю, что на основе курсора намного сложнее, что делает разбивку на страницы на основе смещения более желательной. Только для систем, ориентированных на данные в реальном времени, требуется разбивка на страницы на основе курсора.

Ответ №1:

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

Цитируется из этого потрясающего сообщения в блоге, счастливого кодирования!

Кроме того, проверьте это:

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

Это объяснение взято из документов Appolo GraphQL.

Комментарии:

1. Хорошо, а что, если выполняются динамические многогранные поиски, т.Е. Пользователь добавляет фильтры, изменения, сортировку и т. Д. Разбиение на страницы на основе курсора по сути решает эту проблему?

Ответ №2:

В этом посте объясняется разница между ними.

В чем разница между двумя подходами?

Разница большая. Одна страница разбивается на страницы с использованием смещения, а другая — с использованием курсоров. У обоих подходов есть несколько плюсов / минусов. Например, разбивка на страницы со смещением позволяет перейти на любую страницу, в то время как при разбивке на страницы на основе курсора вы можете перейти только на следующую / предыдущую страницу.

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

Для получения дополнительных плюсов и минусов я предлагаю прочитать статью.

Наилучший вариант использования разбивки на страницы на основе курсора?

Если вы используете реляционную базу данных и имеете миллионы записей. Запрос высокого смещения, вероятно, займет много времени / времени ожидания, в то время как нумерация страниц курсора будет более производительной.

Может ли разбивка на страницы на основе курсора перейти на определенную страницу?

Нет, это один из недостатков подхода.

Может ли нумерация страниц на основе курсора вернуться к предыдущей странице?

Это очень распространенный метод предоставления двух курсоров в качестве ответа, один из которых содержит предыдущую страницу, а другой — следующую страницу. Если это так, вы можете перейти на предыдущую страницу. В противном случае вы не сможете.

Есть ли какие-либо различия в производительности между ними?

Да! смотрите мой комментарий выше.

Комментарии:

1. Спасибо за ссылку на блог Игнасио Чиаццо, я нашел его наиболее полезным!