コンテンツにスキップ

APIレイテンシ改善の手札5選

原文

僕がAPIのレイテンシを改善する時に使う手札5選

  1. N+1 撲滅
  2. インデックスを張る、or すでにあるなら効くようにSQLを修正
  3. 並列処理化
  4. アプリケーションキャッシュ導入
  5. 仕様変更提案 (ページング、無限スクロール導入など)

要約

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 カーソルページネーション

リンク