【发布时间】:2016-10-12 07:36:34
【问题描述】:
我在一个移动应用程序上工作,该应用程序显示从服务器获取的数据流。最初,该应用程序获取包含 10 个项目的第一页。当用户向下滚动时,应用程序会获取第二页以及接下来的 10 个项目(换句话说 - 无限滚动)。我遇到的问题是,当用户 A 获取页码 X 时,用户 B 可能会在服务器上创建一个新内容,该内容会修改用户 A 可用的结果集。这意味着如果用户 A 尝试获取 X +1 页面,它将包含被新内容“推回”的先前项目。如何解决?我提出了两种解决方案,但我不知道哪个更好:
- 移动应用程序会记住已显示项目的 ID,如果在下一页中有已显示的项目,则不会再次显示。
- 应用程序会记住第一页中第一个项目的创建日期。当它获取下一页时,它还会将此日期发送到服务器,服务器将此日期添加到 sql 查询中以维护相同的结果集
你怎么看?哪个更好?有没有更好的解决方案?
更新:
想象一下,我有一个表“查询”,其中包含“查询 ID”(整数、主键)、“日期创建”(时间戳)列。我的查询如下所示: select * from queries order by date_created desc。 date_created date_created 不随主键递增而递增。我使用 Pageable 对象使用 Spring Data 对数据进行分页。现在的问题是,如果创建了新行并且它们的 date_created 比之前的最新行更新,那么它们会修改结果集。
【问题讨论】:
-
如果分页是根据记录id进行的,那么用户B的任何修改都不会影响用户A的结果。id总是递增的
-
此外,您应该标记您正在使用的技术,以吸引更多观众关注您的问题,从而让更多人指出最佳做法
-
SQL 查询不考虑 id。它们按创建日期排序。但是你写的不是真的。如果我进行 sql 查询,将结果从 a 提取到 b,然后从 c 提取到 d,那么在这些查询期间,新行可能会修改结果集。这是我的问题。在这里你可以看到一个例子:pixafy.com/blog/2013/09/…
-
SQL queries do not take ids into account那么这是一种错误的方法。使用日期范围进行分页效率非常低。 -
所以请解释更好的解决方案。
标签: ios postgresql pagination spring-data infinite-scroll