目錄
- 一. 多資料源分頁查詢斷頁方案
-
- 1. 背景
- 2. 方案1
- 3. 方案2
- 4. 方案3
- 二. 其他分頁場景
-
-
- 1. 根據主鍵分頁
-
一. 多資料源分頁查詢斷頁方案
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條資料