1

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

  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.

所描述的行为可能会引起观众的困惑。您知道解决此问题的任何实用解决方案吗?

4

3 回答 3

1

有一些思想流派。

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

.

于 2008-09-17T15:42:18.937 回答
0

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

于 2008-09-17T15:47:22.967 回答
0

只要用户明白底层数据一直在变化,他们就不会感到困惑。因此,只需以简单的方式进行即可。

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

于 2008-09-17T16:49:09.167 回答