【问题标题】:Keep pagination repeatable if change operations are performed如果执行更改操作,保持分页可重复
【发布时间】:2010-09-10 05:19:04
【问题描述】:

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

  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.

所描述的行为可能会给观看者造成混淆。您知道解决此问题的任何实用解决方案吗?

【问题讨论】:

  • 我正要问同样的问题。我最近注意到 Stackoverflow 和 Twitter 上经常发生这种情况。

标签: sql pagination


【解决方案1】:

只要用户了解底层数据一直在变化,他们就不会感到困惑。所以就直接做吧。

您可以缓存结果的前几页并将其用于后续视图,但结果将与数据库不同步,这更加令人困惑。

【讨论】:

    【解决方案2】:

    如果您关心的更新主要是新插入(例如,StackOverflow 本身在分页问题和新问题出现时似乎遇到了这个问题),处理它的一种方法是在您发出首先进行分页查询,然后将后续页面的请求结果限制为该时间戳之前存在的项目。

    【讨论】:

      【解决方案3】:

      这方面有几种思想流派。

      1. 数据得到更新,顺其自然
      2. 您可以实现某种缓存方法来保存 整个结果集(这可能不是 一个选项,如果工作真的 大型数据集)
      3. 您可以对每个页面操作进行比较并通知 用户如果总记录数 变化

      .

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-02-02
        • 1970-01-01
        • 1970-01-01
        • 2017-09-08
        • 2015-06-04
        • 1970-01-01
        • 2013-12-31
        相关资源
        最近更新 更多