分頁的實現

Offset Based Pagination (基于偏移量的分頁)

如果返回的內容是靜態(tài)的,或者不用實時返回數據最新的變化,那么可以用這種基于偏移量的分頁。Google Search 和一些論壇用了這種方式:

Offset Based Pagination

查詢時指定條件和頁號即可:

GET https://meta.discourse.org/latest.json?page=2

Cursor Base Pagination (基于游標的分頁)

現在很多場景,查詢結果在用戶瀏覽過程中是變化的,例如微博時間線,用戶看的時候,可能后一頁的某些微博會被刪除,而前一頁又增添了新的微博。這種情況就不適合用 Offset Based Pagination。

Facebook 和 Twitter 都采用了基于游標的分頁方法,舉例如下:

{
  "data": [
     ... Endpoint data is here
  ],
  "paging": {
    "cursors": {
      "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
      "before": "NDMyNzQyODI3OTQw"
    },
    "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw"
    "next": "https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
  }

如上所述,Facebook API 返回的數據,除了當前頁面的業(yè)務數據之外(data),也包含分頁數據(paging):

  • Cursors (游標) – 每條記錄都應該有一個唯一且遞增的值作為游標值。
  • Count – 我們需要 count 參數,就像基于偏移量的分頁一樣,用于在游標之前或之后過濾有限數量的結果。
  • Next URL – 這個值可能是 URL,也可能是其他你自己設定的語義,用來獲取下一頁的數據。如果為空,則可以用來表示沒有后一頁的數據。
  • Previous URL –同上,只是用來表示前一頁的數據。

這種方式有以下兩個特點:

  1. 查詢的結果流可能是動態(tài)變化的,例如: 時間線里出現了新的數據,或者刪除了數據,這些變化都可以在 “前一頁” 或者 “后一頁” 上體現出來。
  2. Cursor 體現了排序,是持久化的。一般情況下 Cursor 的順序是和時間有關。如果你的實體(例如:微博)可能展現給用戶多種可能的排序(例如:創(chuàng)建時間或者修改時間),那么則需要創(chuàng)建不同的 Cursor。
    1. 具體實現時,Cursor 可能分別創(chuàng)建自 createAt 或者 modifiedAt 字段。Facebook Relay 用了查詢名稱 + 時間戳 的 Base64 形式來做 Cursor。

一個抽象得更為完整的規(guī)范是 https://facebook.github.io/relay/graphql/connections.htm. 閱讀這篇文章需要 GraphQL 的基礎和一些”圖存儲”的概念,作為備查吧。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 最近做的項目中后臺界面用的layui框架,前臺界面用的是boostrap框架,這就導致我在做分頁的過程中要考慮前臺...
    行走的巨象閱讀 4,579評論 5 12
  • redis本身是自帶分頁功能的,zrevrange 可以按照成員從小到大的順序來返回每頁的數據的,如果是從大到小的...
    daos閱讀 4,641評論 0 6
  • 一、基于偏移的分頁 例如: http://XXXXXXXlist?page=1&count=20 缺點: 1、數據...
    Yang152412閱讀 7,205評論 3 49
  • 學習自: 數據庫開發(fā) 很多應用往往只展示最新或最熱門的幾條記錄,但為了舊記錄仍然可訪問,所以就需要個分頁的導航欄。...
    wyatt_plus閱讀 545評論 1 2
  • 亂紅的第六幅臨摹,任然以原畫相似度相差甚遠!但有所進步的是,臉部陰影部分處理找到了技巧和方法!
    榆木糖閱讀 144評論 0 0

友情鏈接更多精彩內容