2016-06-11 4 views
1

Я работаю над мобильным приложением, которое показывает поток данных, извлеченных с сервера. Первоначально приложение выбирает первую страницу с 10 элементами. Когда пользователь прокручивается вниз, приложение выбирает вторую страницу со следующими 10 элементами (другими словами - бесконечным прокруткой). Проблема заключается в том, что когда пользователь A выбирает номер страницы X, возможно, что пользователь B создает на сервере новый контент, который изменяет набор результатов, доступный для пользователя A. Это означает, что если пользователь A пытается получить X +1, он будет содержать предыдущие элементы, которые были «отброшены» новым контентом. Как его решить? Я вышел с двумя решениями, но я не знаю, что лучше:Бесконечные прокрутки и дублированные данные

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

Как вы думаете? Что лучше? Есть ли лучшие решения?

UPDATE:

Представьте себе, что у меня есть 'запросы' за столом с 'queries_id' столбцов (целочисленные, первичный ключ), 'DATE_CREATED' (метка времени). Мой запрос выглядит следующим образом: select * from queries order by date_created desc. Неверно, что date_created date_created increments с инкрементацией первичного ключа. Я разбиваю данные на данные Spring с помощью объекта Pageable. Теперь проблема в том, что если новые строки создаются и у них есть date_created newer, то предыдущая новая строка, то они изменяют набор результатов.

+0

Если разбиение на страницы выполняется на основе идентификатора записи, любая модификация пользователя B не может повлиять на результаты пользователя A. Идентификаторы всегда инкрементальные – Jim

+0

Также вы должны пометить технологии, которые вы используете, чтобы привлечь больше зрителей на ваш вопрос и, следовательно, больше людей указывают на лучшие практики – Jim

+0

SQL-запросы не учитывают идентификаторы. Они упорядочены по дате создания. Но то, что вы написали, неверно. Если я сделаю sql-запрос, который извлекает результаты из a в b, а затем из c в d, тогда возможно, что во время этих запросов новые строки изменяют набор результатов. Это моя проблема. Здесь вы можете увидеть пример: http://www.pixafy.com/blog/2013/09/endless-scroll-and-real-time-data-solution-for-preventing-data-duplication/ – Jacek

ответ

0

Это происходит потому, что вы выполняете разбивку на страницы только на date_created.
Предполагаю, что вы делаете свой запрос с ORDER BY date_created DESC, и вы смещаете текущую страницу.
Чтобы избежать вашей проблемы, вам нужно добавить последний идентификатор предыдущей выборки в запросе. То есть queries_id < last_id ORDER BY date_created .... и т. Д.