Sql 如果执行更改操作,请保持分页可重复

Sql 如果执行更改操作,请保持分页可重复,sql,pagination,Sql,Pagination,如果要对来自支持分页的数据源的结果进行分页,则必须执行以下过程: 定义页面大小-即每页显示的结果数 使用偏移量=页码(基于0)*页面大小获取用户请求的每页 显示获取的页面的结果 所有这一切都很好,没有考虑到一个操作可能会影响后端系统,从而导致分页发生错误。我说的是有人在页面抓取或删除数据之间插入数据 page_size = 10; get page 0 -> results from 0 to 9; user inserts a record that due to the query b

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

  • 定义页面大小-即每页显示的结果数
  • 使用偏移量=页码(基于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本身似乎存在此问题,并且出现了新问题),则处理此问题的一种方法是在发出第一个分页查询时捕获时间戳,然后将后续页面请求的结果限制为在该时间戳之前存在的项目。

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

    只要用户了解底层数据总是在变化,他们就不会感到困惑。所以,就用直截了当的方式去做吧


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

    只要用户了解基础数据总是在变化,他们就不会感到困惑。所以,就用直截了当的方式去做吧


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

    我正要问同样的问题。最近我注意到Stackoverflow和Twitter上经常出现这种情况,我正准备问同样的问题。我注意到最近在Stackoverflow和Twitter上经常发生这种情况。