一. 多数据源分页查询断页方案
1. 背景
当分页查询条件condition涉及多个数据源时, 可能会导致断页/数据少于pageSize等现象
比如查询主数据源得到pageSize条数据, 再根据其他条件再过滤后, 少于pageSize条数据或没有数据, 但下一页可能还有数据
2. 方案1
- 方案特征
- 入参查询条件condition是针对多数据源的
- 入参包括:condition,pageNo,pageSize(可后端固定,也可前端传)
- 返回包括:dataList,hasMore,pageNo
- 返回的数据dataList除了最后一页都会>=pageSize
- 连续两次查询可能会跳页(解决方案: 前端不显示pageNo,只显示下一页)
- totalSize是未知的
流程图如下:
3. 方案2
和方案1的区别是: 是否需要下一页数据由前端来判断(dataSize是否大于0,或累计的dataSize是否大于0)
设置一个阈值: 如何连续请求阈值的次数后, 还是没有数据. 不再查询
流程图:
4. 方案3
将多数据源异构为单一数据源
比如写入Hive的一张宽表, 比如写如ES(添加condition所有相关字段)
二. 其他分页场景
1. 根据主键分页
- 方案特征
- 只满足特定场景: 分页查询只有固定的排序方案,且排顺和数据主键自增相同或相反
- condition只针对单一数据源
- 入参包括:condition,queryId,pageSize(可后端固定,也可前端传)
- 返回包括:dataList,queryId(根据dataList是否<pageSize来判断hasMore)
- 请求的返回的数据除了最后一页size=pageSize
- totalSize是未知的
- 首页入参queryId是约定的,最后一页返回queryId也是约定的,其他页入参queryId取上一页最后1条数据