Open4

Supabase の Connection Pool について

Gen TamuraGen Tamura

コネクションプールとは?

コネクションプールについて具体的に説明します:

コネクションプールの基本概念

  1. 物理的な接続とは
  • データベースへの接続は実際にはTCP/IP接続
  • 接続の確立には時間とリソースが必要
  • データベースが同時に受け付けられる接続数には制限がある
  1. コネクションプール
  • あらかじめ複数の接続を作成して保持
  • クエリ実行時に既存の接続を再利用
  • 使用済みの接続は破棄せずプールに戻す

Supavisorの場合

例として:

// これらは別々のクライアントだが
const client1 = await createDrizzleSupabaseClient(); // User Aのコンテキスト
const client2 = await createDrizzleSupabaseClient(); // User Bのコンテキスト

// 内部的には同じコネクションプールを使用
// Supavisorが適切なユーザーコンテキストを付与して
// 既存の接続を再利用

メリット

  1. パフォーマンス向上

    • 接続の確立/切断のオーバーヘッドを削減
    • リソースを効率的に使用
  2. スケーラビリティ

    • 同時接続数を制御可能
    • サーバーリソースの効率的な利用
  3. 信頼性

    • 接続エラーの自動ハンドリング
    • 接続の自動再確立

Supavisorは、これらのコネクションプール管理を自動的に行いながら、各リクエストに適切なユーザーコンテキストを付与する役割を担っています。

Gen TamuraGen Tamura

supabase では Supervisor が利用されている?PostgreSQLでは一般的にSupervisorが利用されている?

これは重要な区別があります:

Supabaseの場合

  • Supavisor(Supabaseの独自技術)が使用されます
  • Supabaseが開発した特別なコネクションプーラー
  • 特徴:
    1. サーバーレス環境に最適化
    2. RLS (Row Level Security) との統合
    3. JWTベースの認証の自動処理
    4. トランザクションモードのサポート

一般的なPostgreSQL

  • pgBouncerが一般的に使用される
  • オープンソースのコネクションプーラー
  • 特徴:
    1. トランザクション/セッション/ステートメントプーリング
    2. 軽量で高性能
    3. 幅広い環境での利用実績

主な違い

  1. 用途

    • Supavisor: サーバーレス環境特化
    • pgBouncer: 汎用的な使用
  2. 認証処理

    • Supavisor: JWTとRLSを自動処理
    • pgBouncer: 基本的な認証のみ
  3. 可用性

    • Supavisor: Supabaseプラットフォームの一部
    • pgBouncer: どのPostgreSQLでも利用可能