Делайте пагинацию повторяемой, если выполняются операции изменения - PullRequest
1 голос
/ 17 сентября 2008

Если кто-то хочет разбить на страницы результаты из источника данных, который поддерживает разбиение на страницы, мы должны перейти к процессу:

  1. определение размера страницы - это количество результатов, отображаемых на странице;
  2. извлекает каждую страницу, запрошенную пользователем, используя смещение = номер страницы (на основе 0) * размер страницы
  3. показать результаты выбранной страницы.

Все это работает просто отлично, не принимая во внимание тот факт, что операция может повлиять на бэкэнд-систему, которая портит пагинацию. Я говорю о том, что кто-то вставляет данные между выборками страниц или удаляет данные.

page_size = 10;
get page 0 -> results from 0 to 9;
user inserts a record that due to the query being executed goes to page 0 - the one just shown;
get page 1 -> results from 10 to 19 - the first results on the page is the result on the old page 0.

Описанное поведение может вызвать замешательство у зрителя. Знаете ли вы какие-либо практические решения для решения этой проблемы.

Ответы [ 3 ]

1 голос
/ 17 сентября 2008

Есть несколько школ мысли об этом.

  1. данные обновляются, пусть это будет
  2. Вы могли бы реализовать какой-то метод кэширования, который будет хранить весь набор результатов (это не может быть вариант, если работа с действительно большие наборы данных)
  3. Вы можете сделать сравнение на каждой операции страницы и уведомить пользователь, если общее количество записей изменения

.

0 голосов
/ 17 сентября 2008

Пока пользователи понимают, что базовые данные постоянно меняются, они не будут путаться. Так что просто сделай это простым способом.

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

0 голосов
/ 17 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...