如果想要对支持分页的数据源的结果进行分页,我们必须执行以下过程:

  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