2025幎10月03日·1分で読めたす

管理画面API向け高速なカヌ゜ル vs オフセットペヌゞネヌション

゜ヌト、フィルタ、総数に察しお䞀貫したAPI契玄を持ち、Webずモバむルの管理画面で高速に動くカヌ゜ルずオフセットのペヌゞネヌションを孊びたす。

管理画面API向け高速なカヌ゜ル vs オフセットペヌゞネヌション

なぜペヌゞネヌションで管理画面が遅く感じるのか

管理画面は最初は単玔なテヌブルから始たりたす最初の25行を読み蟌み、怜玢ボックスを远加しお終わり。数癟件のレコヌドでは瞬時に感じたす。しかしデヌタセットが増えるず、同じ画面がカク぀き始めたす。

問題はたいおいUIではありたせん。APIがペヌゞ12を゜ヌトやフィルタを反映しお返す前に行う凊理です。テヌブルが倧きくなるず、バック゚ンドは䞀臎する行を探し、数え、前の結果をスキップするのにより倚くの時間を費やしたす。もしクリック1぀ごずに重いク゚リが発生するなら、画面は反応する代わりに考えおいるように感じたす。

同じ堎所で目に付きやすいですペヌゞ移動が時間ずずもに遅くなり、゜ヌトが鈍くなり、怜玢がペヌゞによっお䞍敎合に感じられ、無限スクロヌルはバヌスト的に読み蟌む速い、そしお突然遅いようになりたす。負荷の高いシステムでは、リク゚スト間でデヌタが倉わるず重耇や行の欠萜が発生するこずさえありたす。

WebずモバむルのUIはペヌゞネヌションを別方向に抌したす。Webの管理テヌブルは特定ペヌゞぞゞャンプしたり倚くの列で゜ヌトするこずを促したす。モバむル画面は通垞、次のチャンクを読み蟌む無限リストを䜿い、各読み蟌みが同じ速さであるこずをナヌザヌが期埅したす。APIがペヌゞ番号だけで䜜られおいるずモバむルが苊しみたす。逆に次/afterだけで䜜られおいるずWebテヌブルは制限を感じたす。

目暙は単に25件を返すこずではありたせん。デヌタが増えおも速く、予枬可胜なペヌゞングであるこず。テヌブルず無限リストの䞡方で同じように動䜜するルヌルを持぀こずです。

UIが䟝存するペヌゞネヌションの基本

ペヌゞネヌションは長いリストを小さな塊に分けお画面が速く読み蟌み・描画できるようにするこずです。UIはすべおのレコヌドを芁求する代わりに次のスラむスを芁求したす。

最も重芁な制埡はペヌゞサむズ倚くは limit ず呌ぶです。小さなペヌゞはサヌバヌの凊理が少なく、アプリが描画する行数も少ないため速く感じられたす。しかしペヌゞが小さすぎるずナヌザヌは䜕床もクリックやスクロヌルをしなければならず萜ち着かなく感じたす。倚くの管理テヌブルでは25〜100件が実甚的な範囲で、モバむルは通垞より小さい方を奜みたす。

安定した゜ヌト順は倚くのチヌムが想定する以䞊に重芁です。リク゚スト間で順序が倉わるず、ペヌゞング䞭に重耇や欠萜が芋えたす。安定した゜ヌトは通垞、䞻ずなるフィヌルド䟋えば created_atずタむブレヌカヌ䟋えば idでの䞊びを意味したす。これはオフセットでもカヌ゜ルでも重芁です。

クラむアントから芋お、ペヌゞ付きレスポンスはアむテム、次ペヌゞのヒントペヌゞ番号かカヌ゜ルトヌクン、そしおUIが本圓に必芁ずするカりントだけを含むべきです。ある画面では「1-50 of 12,340」の正確な総数が必芁でしょう。別の画面では has_more だけで十分です。

オフセットペヌゞネヌション仕組みず問題点

オフセットペヌゞネヌションは叀兞的なペヌゞN方匏です。クラむアントは固定数の行を芁求し、最初に䜕行スキップするかをAPIに䌝えたす。これを limit ず offset、たたはサヌバヌがオフセットに倉換する page ず pageSize ずしお芋るこずができたす。

兞型的なリク゚ストは次のようになりたす

  • GET /tickets?limit=50\u0026offset=950
  • 「最初の950行をスキップしお50件のチケットをください」

ペヌゞ20にゞャンプしたり、叀いレコヌドをスキャンしたり、倧きなリストをチャンクで゚クスポヌトするなど、䞀般的な管理䞊のニヌズに合臎したす。内郚的に説明もしやすい「ペヌゞ3を芋ればわかるよ。」

問題は深いペヌゞで顕圚化したす。倚くのデヌタベヌスはスキップした行を読み飛ばすために時間がかかるこずがあり、特に゜ヌト順がきっちりずしたむンデックスに支えられおいない堎合に顕著です。ペヌゞ1は速くおもペヌゞ200は目に芋えお遅くなり、それがナヌザヌがスクロヌルやゞャンプをするずきに管理画面が遅いず感じる原因です。

もう1぀の問題はデヌタが倉わったずきの敎合性です。サポヌトマネヌゞャヌが最新順でペヌゞ5を開いおいる間に新しいチケットが入ったり叀いチケットが削陀されたず想像しおください。挿入はアむテムを前に抌しやりペヌゞ間での重耇、削陀はアむテムを埌ろにずらすナヌザヌが蟿っおいる経路から消える可胜性がありたす。

オフセットペヌゞネヌションは小さなテヌブルや安定したデヌタセット、ワンオフの゚クスポヌトでは問題にならないこずもありたす。倧きくおアクティブなテヌブルでぱッゞケヌスがすぐに出おきたす。

カヌ゜ルペヌゞネヌション仕組みず安定性の理由

カヌ゜ルペヌゞネヌションはブックマヌクずしおカヌ゜ルを䜿いたす。「7ペヌゞ目をください」ず蚀う代わりにクラむアントは「この正確なアむテムの埌から続けおください」ず䌝えたす。カヌ゜ルは通垞、最埌のアむテムの゜ヌト倀䟋created_at ず idを゚ンコヌドしお、サヌバヌが正しい䜍眮から再開できるようにしたす。

リク゚ストは通垞次の通りです

  • limit: 返すアむテム数
  • cursor: 前回のレスポンスからの䞍透明トヌクン倚くは after ず呌ぶ

レスポンスはアむテムずスラむスの末尟を指す新しいカヌ゜ルを返したす。実務䞊の違いは、カヌ゜ルはデヌタベヌスに行の総数を数えたりスキップしたりするのではなく、既知の䜍眮から始めるように芁求するこずです。

そのためカヌ゜ルペヌゞネヌションは順次読み蟌みのリストで速さを保ちたす。良いむンデックスがあればデヌタベヌスは「Xより埌のアむテム」にゞャンプしお、次の limit 行を読み取れたす。オフセットではオフセットが倧きくなるずサヌバヌがより倚くの行をスキャン少なくずもスキップする必芁があるこずが倚いです。

UIの挙動ずしおは、カヌ゜ルは「次ぞ」を自然にしたす返されたカヌ゜ルを次のリク゚ストで送り返せばよいのです。「前ぞ」はオプションで実装が難しいこずがありたす。あるAPIは before カヌ゜ルをサポヌトし、別のAPIは逆向きに取埗しお結果を反転させたす。

カヌ゜ル、オフセット、たたはハむブリッドの遞び方

ペヌゞネヌションの゚ッゞケヌスを修正する
フィルタ、゜ヌト芏則、ガヌドレヌルを蚭蚈しお、UIの重耇衚瀺を止めたす。
ビルダヌを開く

遞択はたずナヌザヌがリストをどのように䜿うかから始たりたす。

カヌ゜ルは䞻に前ぞ進む操䜜が行われ、速床が最重芁な堎合に最適ですアクティビティログ、チャット、泚文、チケット、監査トレむル、そしお倚くのモバむル無限スクロヌルなど。新芏行の挿入や削陀が発生しおも動䜜が良いです。

オフセットはナヌザヌが頻繁にあちこちゞャンプする叀兞的な管理テヌブルに向きたすペヌゞ番号、指定ペヌゞぞ飛ぶ機胜、玠早い埀埩操䜜など。説明が簡単ですが、倧芏暡デヌタで遅くなったり、デヌタが䞋で倉わるず䞍安定になりたす。

実甚的な決め方の目安

  • 䞻な操䜜が「次、次、次」であるならカヌ゜ルを遞ぶ。
  • 「ペヌゞNぞゞャンプ」が本圓に必芁ならオフセットを遞ぶ。
  • 総数は任意ず扱う。巚倧なテヌブルで正確な総数は高コストになり埗る。

ハむブリッドはよく䜿われたす。1぀の方法は高速な次/前のためにカヌ゜ルを䜿い、ペヌゞゞャンプが必芁な小さなフィルタ枈みサブセットではオフセットを䜿う方法です。別の方法はキャッシュされたスナップショットに基づくペヌゞ番号を提䟛しお衚の銎染みを残し぀぀、すべおのリク゚ストを重い凊理にしない方法です。

Webずモバむル䞡方で動く䞀貫したAPI契玄

管理UIは各リスト゚ンドポむントが同じように振る舞うず速く感じたす。UIが倉わっおもペヌゞ番号のあるWeb衚、無限スクロヌルのモバむルAPI契玄は倉えず、゚ンドポむントごずにペヌゞネヌションルヌルを孊び盎す必芁がないようにしたす。

実甚的な契玄は3぀の郚分で構成したす行rows、ペヌゞング状態、そしお任意の総数totals。゚ンドポむント名tickets、users、ordersは同じ名前を保ち、内郚のペヌゞングモヌドが異なっおもフィヌルド名を揃えたす。

䞡方でうたく働くレスポンス圢状の䟋

{
  "data": [ { "id": "...", "createdAt": "..." } ],
  "page": {
    "mode": "cursor",
    "limit": 50,
    "nextCursor": "...",
    "prevCursor": null,
    "hasNext": true,
    "hasPrev": false
  },
  "totals": {
    "count": 12345,
    "filteredCount": 120
  }
}

いく぀かの现かい点で再利甚が簡単になりたす

  • page.mode はサヌバヌが䜕をしおいるかをクラむアントに䌝え、フィヌルド名を倉えずに枈たせたす。
  • limit は垞に芁求されたペヌゞサむズです。
  • nextCursor ず prevCursor はどちらかが null でも䞡方存圚したす。
  • totals は任意です。高コストならクラむアントが芁求したずきだけ返しおください。

Webの衚は自身で「ペヌゞ3」を衚瀺するために自分のペヌゞむンデックスを保持しおAPIを繰り返し呌ぶこずができたす。モバむルリストはペヌゞ番号を無芖しお単に次のチャンクを芁求できたす。

AppMasterでWebずモバむルの管理UIの䞡方を䜜っおいるなら、このような安定した契玄はすぐに効果を発揮したす。同じリスト動䜜をスクリヌン間で再利甚でき、゚ンドポむントごずにカスタムなペヌゞネヌションロゞックを䜜る必芁が枛りたす。

ペヌゞネヌションを安定させる゜ヌトのルヌル

管理画面を瞬時に感じさせる
デヌタセットが成長しおも反応の良い管理画面バック゚ンドを䜜りたす。
プロゞェクトを始める

゜ヌトはペヌゞネヌションが壊れやすいずころです。リク゚スト間で順序が倉わるず、重耇やギャップ、あるいは「行が消えた」ように芋えたす。

゜ヌトを提案ではなく契玄にしおください。蚱可された゜ヌトフィヌルドず方向を公開し、それ以倖は拒吊したす。これにより予枬可胜なAPIになり、開発時には問題にならないが本番で遅くなる゜ヌト芁求を防げたす。

安定した゜ヌトには䞀意のタむブレヌカヌが必芁です。䟋えば created_at で゜ヌトしお2぀のレコヌドが同じタむムスタンプを持぀堎合、最埌に idたたは䞀意の別カラムを远加したす。これがないずデヌタベヌスは等しい倀を任意の順序で返す可胜性がありたす。

実甚的なルヌル

  • むンデックス化され定矩が明確なフィヌルドだけで゜ヌトを蚱可する䟋created_at、updated_at、status、priority。
  • い぀でも最埌に䞀意のタむブレヌカヌを含める䟋id ASC。
  • デフォルト゜ヌトを定矩しおクラむアント間で䞀貫させる䟋created_at DESC, id DESC。
  • null の゜ヌト順を文曞化する䟋日付ず数倀は「nulls last」。

゜ヌトはカヌ゜ル生成にも圱響したす。カヌ゜ルは最埌のアむテムの゜ヌト倀の順序を゚ンコヌドし、タむブレヌカヌも含めるべきです。゜ヌトが倉わるず叀いカヌ゜ルは無効になりたす。゜ヌトパラメヌタをカヌ゜ル契玄の䞀郚ずしお扱っおください。

契玄を壊さずにフィルタず総数を扱う

フィルタはペヌゞネヌションから切り離しお考えるべきです。UIは「別の行集合を芋せおください」ず蚀い、その埌で「その集合をペヌゞングしおください」ず蚀いたす。フィルタをペヌゞネヌショントヌクンに混ぜたり、フィルタを任意で怜蚌しないず、空のペヌゞ、重耇、あるいはカヌ゜ルが別のデヌタセットを指すずいったデバッグの難しい挙動になりたす。

単玔なルヌルフィルタはプレヌンなク゚リパラメヌタたたはPOSTのリク゚ストボディに眮き、カヌ゜ルは䞍透明でその正確なフィルタ゜ヌトの組み合わせに察しおのみ有効にしおください。ナヌザヌがフィルタstatus、日付範囲、担圓者を倉曎したら、クラむアントは叀いカヌ゜ルを砎棄しお最初から始めるべきです。

蚱可するフィルタを厳栌にするこずは性胜を守り、挙動を予枬可胜にしたす

  • 䞍明なフィルタフィヌルドは拒吊する無芖しない。
  • 型ず範囲を怜蚌する日付、列挙型、ID。
  • 広範囲なフィルタに䞊限を蚭ける䟋INリストは最倧50 ID。
  • デヌタず総数に同じフィルタを適甚する䞍䞀臎な数倀を返さない。

総数は倚くのAPIを遅くしたす。正確なカりントは倧量テヌブルでフィルタがあるず高コストになりたす。䞀般的に3぀の遞択肢がありたす正確、掚定、たたはなし。正確は小芏暡デヌタやナヌザヌが本圓に「1-25 of 12,431」を必芁ずする堎合に有益です。掚定は倚くの管理画面で十分です。䞍芁なら「なし」で has_more だけ返す運甚もありたす。

すべおのリク゚ストを遅くしないために、総数は任意にしおくださいクラむアントが芁求したずきだけ蚈算する䟋includeTotal=true、フィルタセットごずに短時間キャッシュする、たたは最初のペヌゞだけで返す、などです。

ステップバむステップ゚ンドポむントの蚭蚈ず実装

API契玄を䞀貫させる
レスポンスの圢を䞀床暙準化しお、すべおのリスト゚ンドポむントで再利甚したす。
始める

デフォルトから始めおください。リスト゚ンドポむントは安定した゜ヌト順ず同倀の行に察するタむブレヌカヌが必芁です。䟋えばcreatedAt DESC, id DESC。タむブレヌカヌidが新しいレコヌドの远加時に重耇やギャップを防ぎたす。

1぀のリク゚スト圢を定矩しお平凡に保ちたす。兞型的なパラメヌタは limit、cursorたたは offsetsort、そしお filters です。䞡方のモヌドをサポヌトする堎合は盞互排他にしおくださいクラむアントは cursor を送るか offset を送るかのどちらかで、䞡方同時は䞍可です。

䞀貫したレスポンス契玄を保ち、Webずモバむルが同じリストロゞックを共有できるようにしたす

  • items: レコヌドのペヌゞ
  • nextCursor: 次ペヌゞを取埗するカヌ゜ルたたは null
  • hasMore: UIが「もっず読み蟌む」を衚瀺するか決めるための真停倀
  • total: マッチする総レコヌド数高コストなら芁求時のみ、なければ null

実装はここでオフセットずカヌ゜ルで分岐したす。

オフセットク゚リは通垞 ORDER BY ... LIMIT ... OFFSET ... で曞かれ、倧きなテヌブルでは遅くなりがちです。

カヌ゜ルク゚リは最埌に芋たアむテムに基づくシヌク条件を䜿いたす「(createdAt, id) が最埌の (createdAt, id) より小さいものをください」のように。これによりむンデックスが䜿われ、パフォヌマンスがより安定したす。

出荷前にガヌドレヌルを远加しおください

  • limit に䞊限を蚭ける䟋最倧100ずデフォルトを蚭定する。
  • sort を蚱可リストで怜蚌する。
  • フィルタは型で怜蚌し、䞍明なキヌは拒吊する。
  • cursor は䞍透明にし最埌の゜ヌト倀を゚ンコヌド、䞍正なカヌ゜ルは拒吊する。
  • total の取埗方法を決める。

デヌタが途䞭で倉化する状況でテストしおください。リク゚ストの間にレコヌドを䜜成・削陀したり、゜ヌトに圱響するフィヌルドを曎新しお、重耇や欠萜が発生しないこずを確認したす。

䟋Webずモバむルで速いたたのチケット䞀芧

Webずモバむル向けに1぀のAPIを
Webずネむティブモバむル画面で1぀のペヌゞネヌション契玄を䜿いたす。
アプリを䜜成

サポヌトチヌムが最新のチケットを確認する管理画面を開きたす。新しいチケットが到着したり゚ヌゞェントが叀いものを曎新しおもリストは瞬時に感じる必芁がありたす。

WebではUIは衚です。デフォルト゜ヌトは updated_at最新順で、チヌムはよく Open や Pending にフィルタしたす。同じ゚ンドポむントが安定した゜ヌトずカヌ゜ルトヌクンで䞡方をサポヌトできたす。

GET /tickets?status=open\u0026sort=-updated_at\u0026limit=50\u0026cursor=eyJ1cGRhdGVkX2F0IjoiMjAyNi0wMS0yNVQxMTo0NTo0MloiLCJpZCI6IjE2OTMifQ==

レスポンスはUIにずっお予枬可胜です

{
  "items": [{"id": 1693, "subject": "Login issue", "status": "open", "updated_at": "2026-01-25T11:45:42Z"}],
  "page": {"next_cursor": "...", "has_more": true},
  "meta": {"total": 128}
}

モバむルでは同じ゚ンドポむントが無限スクロヌルを支えたす。アプリは䞀床に20件ず぀読み蟌み、次のバッチを取埗するために next_cursor を送りたす。ペヌゞ番号ロゞックは䞍芁で、レコヌドが倉わっおもスクロヌル枈みのフィヌドに重耇や欠萜が少なくなりたす。

重芁なのはカヌ゜ルが最埌に芋た䜍眮䟋updated_at ずタむブレヌカヌずしおの idを゚ンコヌドしおいるこずです。チケットがスクロヌル䞭に曎新されるず、次回のリフレッシュで䞊の方に移動するかもしれたせんが、既にスクロヌルした郚分に重耇やギャップを生むこずはありたせん。

総数は䟿利ですが倧芏暡デヌタでは高コストです。単玔なルヌルは、ナヌザヌがフィルタを適甚したずき䟋status=openや明瀺的に芁求したずきだけ meta.total を返すこずです。

重耇、ギャップ、遅延を招く䞀般的なミス

倚くのペヌゞネヌションバグはデヌタベヌス自䜓ではなく、テストでは問題にならない小さなAPI蚭蚈の刀断ミスから生じたす。

最も䞀般的な重耇たたは欠萜の原因は、䞀意ではないフィヌルドで゜ヌトするこずです。created_at で゜ヌトしお2぀のアむテムが同じタむムスタンプを持぀ず、リク゚スト間で順序が入れ替わるこずがありたす。修正は簡単です垞に安定したタむブレヌカヌ通垞は䞻キヌを远加し、゜ヌトを (created_at desc, id desc) のようなペアずしお扱いたす。

別の䞀般的な問題はクラむアントに任せお無制限のペヌゞサむズが蚱されるこずです。1぀の倧きなリク゚ストがCPU、メモリ、レスポンスタむムをスパむクさせ、すべおの管理画面を遅くしたす。適切なデフォルトず厳栌な最倧倀を蚭け、倧きすぎる芁求ぱラヌで返しおください。

総数も問題になり埗たす。すべおのリク゚ストで䞀臎する行を数えるず最も遅い郚分になるこずがあり、特にフィルタがあるず顕著です。UIが総数を必芁ずする堎合は、芁求時にのみ取埗するかあるいは抂算を返す、リストのスクロヌルを完党なカりントでブロックしないようにしおください。

重耇、ギャップ、遅延を匕き起こす兞型的なミス

  • 䞀意のタむブレヌカヌなしでの゜ヌト順序が䞍安定
  • 無制限のペヌゞサむズサヌバヌ過負荷
  • 毎回の総数返华遅いク゚リ
  • 1぀の゚ンドポむントでオフセットずカヌ゜ルのルヌルを混圚させるクラむアント挙動が混乱
  • フィルタや゜ヌトが倉わったのに同じカヌ゜ルを再利甚する誀った結果

フィルタや゜ヌトが倉わったらペヌゞネヌションをリセットしおください。新しいフィルタは新しい怜玢ずしお扱い、カヌ゜ル/オフセットをクリアしお最初から始めたす。

出荷前の簡単チェックリスト

たずバック゚ンドを出荷する
PostgreSQLでデヌタをモデル化し、Goで本番レディなバック゚ンドを生成したす。
バック゚ンドを䜜成

APIずUIを䞊べお1回これを実行しおください。倚くの問題はリスト画面ずサヌバヌ間の契玄で起きたす。

  • デフォルト゜ヌトは安定しおおり䞀意のタむブレヌカヌを含む䟋created_at DESC, id DESC。
  • ゜ヌトフィヌルドず方向はホワむトリスト化されおいる。
  • 最倧ペヌゞサむズが匷制され、劥圓なデフォルトがある。
  • カヌ゜ルトヌクンは䞍透明で、無効なカヌ゜ルは予枬可胜に倱敗する。
  • フィルタや゜ヌトの倉曎はペヌゞネヌション状態をリセットする。
  • 総数の挙動は明瀺的正確、掚定、たたは省略のいずれか。
  • 同じ契玄がテヌブルず無限スクロヌルの䞡方をサポヌトする。

次のステップリストを暙準化しお䞀貫性を保぀

毎日䜿われる管理リストを1぀遞び、それをゎヌルドスタンダヌドにしおください。Tickets、Orders、Users のような倚くのトラフィックがある衚が良い出発点です。その゚ンドポむントが速く予枬可胜になったら、同じ契玄を他の管理画面にもコピヌしおください。

契玄を曞き残しおください。簡朔でも構いたせん。APIが受け付けるものず返すものを明確にしおおけば、UIチヌムが掚枬しお゚ンドポむントごずに異なるルヌルを勝手に䜜るこずを防げたす。

すべおのリスト゚ンドポむントに適甚するシンプルな暙準

  • 蚱可される゜ヌト正確なフィヌルド名、方向、明確なデフォルトず id のようなタむブレヌカヌ。
  • 蚱可されるフィルタどのフィヌルドをフィルタできるか、倀の圢匏、無効なフィルタ時の挙動。
  • 総数の挙動い぀正確なカりントを返すか、い぀「䞍明」を返すか、い぀省略するか。
  • レスポンス圢状䞀貫したキヌitems、ペヌゞ情報、適甚された゜ヌト/フィルタ、総数。
  • ゚ラヌルヌル䞀貫したステヌタスコヌドず読みやすい怜蚌メッセヌゞ。

AppMasterappmaster.ioで管理画面を構築しおいるなら、ペヌゞネヌション契玄を早い段階で暙準化するのが有効です。同じリスト動䜜をWebアプリずネむティブモバむルアプリで再利甚でき、埌でペヌゞネヌションの゚ッゞケヌスを远いかける時間を枛らせたす。

よくある質問

オフセットずカヌ゜ルのペヌゞネヌションの本圓の違いは䜕ですか

オフセットペヌゞネヌションは limit ず offsetたたは page/pageSizeを䜿っお行をスキップしたす。デヌタベヌスがスキップすべき行数が増えるほど深いペヌゞは遅くなりがちです。䞀方でカヌ゜ルペヌゞネヌションは最埌に芋たアむテムの゜ヌト倀を基にしたafterトヌクンを䜿い、既知の䜍眮から読み進めるこずで前ぞ進み続ける際に高速で安定したす。

管理画面のテヌブルがペヌゞを進めるほど遅く感じるのはなぜですか

ペヌゞ1はたいおい高速ですが、ペヌゞ200ではデヌタベヌスが倧量の行をスキップする必芁があり、それが遅さの原因になりたす。゜ヌトやフィルタも入るず凊理量が増し、各操䜜が重いク゚リのように感じられたす。

ナヌザヌがペヌゞングするずきに重耇やレコヌドの欠萜を防ぐにはどうすれば良いですか

必ず䞀意性のあるタむブレヌカヌを含めた安定した゜ヌトを䜿っおください。䟋えば created_at DESC, id DESC や updated_at DESC, id DESC のようにするず、同䞀タむムスタンプのレコヌド同士で順序が入れ替わるのを防ぎ、ペヌゞ間での重耇や欠萜を防げたす。

どんなずきにカヌ゜ルペヌゞネヌションを優先すべきですか

人が䞻に前ぞ進む次ぞ、次ぞ䜿い方をするリスト、䟋ずしおアクティビティログ、チケット、泚文、モバむルの無限スクロヌルなどではカヌ゜ルペヌゞネヌションを䜿っおください。挿入や削陀が起きおもカヌ゜ルは最埌に芋た䜍眮を基にするため敎合性が保ちやすいです。

オフセットペヌゞネヌションはい぀ただ意味がありたすか

“ペヌゞNぞゞャンプ”が実際に必芁で、ナヌザヌが頻繁に飛び回るような叀兞的な管理テヌブルではオフセットが適しおいたす。小さなテヌブルやデヌタの倉化が少ない安定したデヌタセットでも問題になりにくいです。

䞀貫したペヌゞネヌションAPIレスポンスには䜕を含めるべきですか

゚ンドポむント間で同じレスポンス圢状を保ち、items、ペヌゞ情報、任意の totals総数を返すようにしおください。実甚的なデフォルトは items、page オブゞェクトlimit、nextCursor/prevCursor たたは offset、そしお hasNext のような軜量フラグです。こうすればWebのテヌブルずモバむルのリストで同じクラむアントロゞックを再利甚できたす。

なぜ総数があるずペヌゞングが遅くなるのですか安党なデフォルトは䜕ですか

倧芏暡でフィルタが倚いテヌブルでは正確な COUNT(*) がリク゚スト毎に高コストになるこずがあり、これが遅さの原因になりたす。安党なデフォルトは総数を任意にし、芁求があったずきのみ返す、あるいは抂算を返す、たたはUIが「もっず読み蟌む」だけで良いなら has_more を返すこずです。

フィルタや゜ヌトを倉曎したずきにカヌ゜ルはどうすべきですか

フィルタはデヌタセットを倉える操䜜なので、カヌ゜ルはそのフィルタず゜ヌトの組み合わせにのみ有効であるべきです。ナヌザヌがフィルタや゜ヌトを倉曎したら叀いカヌ゜ルは砎棄しお先頭から開始しおください。叀いカヌ゜ルを再利甚するず空ペヌゞや混乱が生じやすくなりたす。

ペヌゞネヌションのために゜ヌトを速く予枬可胜にするにはどうすれば良いですか

蚱可された゜ヌトフィヌルドず方向をホワむトリスト化しお、クラむアントが遅いか䞍安定な゜ヌトを芁求できないようにしたす。むンデックス化されたフィヌルドで゜ヌトし、必ず䞀意のタむブレヌカヌ䟋idを末尟に远加しお、リク゚スト間で順序が決定的になるようにしおください。

ペヌゞネヌション゚ンドポむントを出荷前に远加すべきガヌドレヌルは䜕ですか

limit の最倧倀を匷制し、フィルタず゜ヌトパラメヌタを怜蚌し、カヌ゜ルトヌクンを䞍透明にしお厳密に怜蚌しおください。AppMasterで管理画面を䜜るなら、これらのルヌルを党おのリスト゚ンドポむントで䞀貫させるず、画面ごずの個別察応を枛らせたす。

始めやすい
䜕かを䜜成する 玠晎らしい

無料プランで AppMaster を詊しおみおください。
準備が敎ったら、適切なサブスクリプションを遞択できたす。

始める
管理画面API向け高速なカヌ゜ル vs オフセットペヌゞネヌション | AppMaster