无限滚动和重复数据

时间:2016-06-11 11:54:59

标签: ios postgresql pagination spring-data infinite-scroll

我在移动应用程序上工作,该应用程序显示从服务器获取的数据流。最初,该应用程序获取包含10个项目的第一页。当用户向下滚动时,应用程序将使用下一个10项(换句话说 - 无限滚动)获取第二页。我遇到的问题是,当用户A获取页码X时,用户B可以在服务器上创建新内容,修改用户A可用的结果集。这意味着如果用户A尝试获取X +1页面,它将包含由新内容“推回”的上一个项目。怎么解决?我提出了两个解决方案,但我不知道哪个更好:

  1. 移动应用程序会记住已显示项目的ID,如果在下一页中有一个已经显示的项目,则不再显示。
  2. 该应用会记住第一页中第一个项目的创建日期。当它获取下一页时,它另外将此日期发送到服务器,该服务器将此日期添加到sql查询以保持相同的结果集
  3. 你怎么看?哪个更好?有更好的解决方案吗?

    更新:

    想象一下,我有一个表'queries',列'queries_id'(整数,主键),'date_created'(时间戳)。我的查询如下所示:select * from query order by date_created desc。 date_created date_created与主键递增的增量不一致。我使用Pageable对象使用Spring Data对数据进行分页。现在的问题是,如果创建新行并且它们的date_created比之前的最新行更新,那么它们会修改结果集。

1 个答案:

答案 0 :(得分:0)

这是因为您仅根据date_created进行分页 我假设您使用ORDER BY date_created DESC进行查询,并为当前页面偏移 要避免您的问题,您需要在查询中添加上一次提取的最后一个ID。即queries_id < last_id ORDER BY date_created ....