天天看點

分頁查詢方案總結一. 多資料源分頁查詢斷頁方案二. 其他分頁場景

目錄

  • 一. 多資料源分頁查詢斷頁方案
    • 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是未知的

流程圖如下:

分頁查詢方案總結一. 多資料源分頁查詢斷頁方案二. 其他分頁場景

3. 方案2

和方案1的差別是: 是否需要下一頁資料由前端來判斷(dataSize是否大于0,或累計的dataSize是否大于0)

設定一個門檻值: 如何連續請求門檻值的次數後, 還是沒有資料. 不再查詢

流程圖:

分頁查詢方案總結一. 多資料源分頁查詢斷頁方案二. 其他分頁場景

4. 方案3

将多資料源異構為單一資料源

比如寫入Hive的一張寬表, 比如寫如ES(添加condition所有相關字段)

二. 其他分頁場景

1. 根據主鍵分頁

  • 方案特征
  1. 隻滿足特定場景: 分頁查詢隻有固定的排序方案,且排順和資料主鍵自增相同或相反
  2. condition隻針對單一資料源
  3. 入參包括:condition,queryId,pageSize(可後端固定,也可前端傳)
  4. 傳回包括:dataList,queryId(根據dataList是否<pageSize來判斷hasMore)
  5. 請求的傳回的資料除了最後一頁size=pageSize
  6. totalSize是未知的
  7. 首頁入參queryId是約定的,最後一頁傳回queryId也是約定的,其他頁入參queryId取上一頁最後1條資料

繼續閱讀