如果执行更改操作,则使分页可重复

时间:2020-03-05 18:59:11  来源:igfitidea点击:

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

  • 定义页面大小-即每页显示的结果数;
  • 使用偏移量=页面号(从0开始)*页面大小获取用户请求的每个页面
  • 显示获取的页面的结果。

如果不考虑操作可能会影响后端系统的工作,那么所有这些工作就很好了,这会使发生的分页变得更加混乱。我说的是有人在页面获取之间插入数据或者删除数据。

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本身似乎会遇到此问题),一种解决方法是在发出第一个分页查询时捕获时间戳记,然后将对后续页面的请求结果限制为该时间戳之前存在的项目。

回答

只要用户了解基础数据总是在变化,他们就不会感到困惑。因此,只需采用简单的方法即可。

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