Сохраняйте повторяемость разбивки на страницы при выполнении операций изменения

StackOverflow https://stackoverflow.com/questions/84615

  •  01-07-2019
  •  | 
  •  

Вопрос

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

  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.

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

Это было полезно?

Решение

На этот счет существует несколько философских школ.

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

.

Другие советы

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top