APIレイテンシ改善の手札5選¶
原文¶
僕がAPIのレイテンシを改善する時に使う手札5選
- N+1 撲滅
- インデックスを張る、or すでにあるなら効くようにSQLを修正
- 並列処理化
- アプリケーションキャッシュ導入
- 仕様変更提案 (ページング、無限スクロール導入など)
要約¶
APIレイテンシ改善の定石5つ。DB周りから手をつける(N+1、インデックス)→ アプリ側で並列化・キャッシュ → それでもダメなら仕様変更(取得件数削減)。順序が重要で、仕様変更は最後の手段。
解説¶
各手札の効きどころ¶
| # | 手札 | 典型的効果 | 適用場面 |
|---|---|---|---|
| 1 | N+1撲滅 | 10倍以上(クエリ数が激減) | ORMの関連先アクセス、ループ内クエリ |
| 2 | インデックス | 10〜1000倍 | WHERE/JOIN/ORDER BYで使うカラム |
| 3 | 並列処理 | 2〜数倍 | 独立した複数のI/O、外部API呼び出し |
| 4 | アプリキャッシュ | 100倍以上(計算省略) | 変更頻度が低い、参照頻度が高いデータ |
| 5 | 仕様変更 | 根本解決 | 100件一括取得→ページング、等 |
なぜこの順序か¶
- N+1とインデックス: DBラウンドトリップとフルスキャンが最もコスト大。まずここを潰す
- 並列処理: コード側で直せる。外部API待ちなどをまとめて走らせる
- キャッシュ: 有効だが一貫性管理コストが発生する(いつinvalidateするか)
- 仕様変更: 技術で解けない時に「要件を変える」最終手段
→ 関連: DBクエリ最適化、Webキャッシュ戦略、オフセット vs カーソルページネーション