分页查询方案总结

目录

  • 一. 多数据源分页查询断页方案
    • 1. 背景
    • 2. 方案1
    • 3. 方案2
    • 4. 方案3
  • 二. 其他分页场景
      • 1. 根据主键分页

一. 多数据源分页查询断页方案

1. 背景

当分页查询条件condition涉及多个数据源时, 可能会导致断页/数据少于pageSize等现象

比如查询主数据源得到pageSize条数据, 再根据其他条件再过滤后, 少于pageSize条数据或没有数据, 但下一页可能还有数据


2. 方案1

  • 方案特征
  1. 入参查询条件condition是针对多数据源的
  2. 入参包括:condition,pageNo,pageSize(可后端固定,也可前端传)
  3. 返回包括:dataList,hasMore,pageNo
  4. 返回的数据dataList除了最后一页都会>=pageSize
  5. 连续两次查询可能会跳页(解决方案: 前端不显示pageNo,只显示下一页)
  6. totalSize是未知的

流程图如下:

分页查询方案总结_第1张图片


3. 方案2

和方案1的区别是: 是否需要下一页数据由前端来判断(dataSize是否大于0,或累计的dataSize是否大于0)

设置一个阈值: 如何连续请求阈值的次数后, 还是没有数据. 不再查询

流程图:

分页查询方案总结_第2张图片


4. 方案3

将多数据源异构为单一数据源

比如写入Hive的一张宽表, 比如写如ES(添加condition所有相关字段)


二. 其他分页场景

1. 根据主键分页

  • 方案特征
  1. 只满足特定场景: 分页查询只有固定的排序方案,且排顺和数据主键自增相同或相反
  2. condition只针对单一数据源
  3. 入参包括:condition,queryId,pageSize(可后端固定,也可前端传)
  4. 返回包括:dataList,queryId(根据dataList是否
  5. 请求的返回的数据除了最后一页size=pageSize
  6. totalSize是未知的
  7. 首页入参queryId是约定的,最后一页返回queryId也是约定的,其他页入参queryId取上一页最后1条数据

你可能感兴趣的:(计算机设计,分页查询)