Я работаю над мобильным приложением, которое показывает поток данных, извлеченных с сервера. Первоначально приложение выбирает первую страницу с 10 элементами. Когда пользователь прокручивается вниз, приложение выбирает вторую страницу со следующими 10 элементами (другими словами - бесконечным прокруткой). Проблема заключается в том, что когда пользователь A выбирает номер страницы X, возможно, что пользователь B создает на сервере новый контент, который изменяет набор результатов, доступный для пользователя A. Это означает, что если пользователь A пытается получить X +1, он будет содержать предыдущие элементы, которые были «отброшены» новым контентом. Как его решить? Я вышел с двумя решениями, но я не знаю, что лучше:Бесконечные прокрутки и дублированные данные
- мобильное приложение запоминает идентификаторы уже показанных элементов, и если на следующей странице есть элемент, который уже был показан, не показано еще раз.
- приложение запоминает дату создания первого элемента с первой страницы. Когда он выбирает следующие страницы, он дополнительно отправляет эту дату на сервер, который добавляет эту дату в запрос sql, чтобы поддерживать тот же набор результатов
Как вы думаете? Что лучше? Есть ли лучшие решения?
UPDATE:
Представьте себе, что у меня есть 'запросы' за столом с 'queries_id' столбцов (целочисленные, первичный ключ), 'DATE_CREATED' (метка времени). Мой запрос выглядит следующим образом: select * from queries order by date_created desc. Неверно, что date_created date_created increments с инкрементацией первичного ключа. Я разбиваю данные на данные Spring с помощью объекта Pageable. Теперь проблема в том, что если новые строки создаются и у них есть date_created newer, то предыдущая новая строка, то они изменяют набор результатов.
Если разбиение на страницы выполняется на основе идентификатора записи, любая модификация пользователя B не может повлиять на результаты пользователя A. Идентификаторы всегда инкрементальные – Jim
Также вы должны пометить технологии, которые вы используете, чтобы привлечь больше зрителей на ваш вопрос и, следовательно, больше людей указывают на лучшие практики – Jim
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