pgGraph: 既存のリレーショナルテーブルに高速なグラフ探索機能を追加するPostgreSQL拡張機能
何を解決するか
PostgreSQLのようなリレーショナルデータベースは、構造化データの扱いに優れていますが、2つのエンティティ間の最短経路を見つけたり、特定のホップ数以内のレコードを探索したりといった、複雑なグラフ形式のクエリには苦戦します。従来、これらのクエリには複雑でカスタムな再帰SQLが必要であり、速度が低下したりメンテナンスが困難になったりすることがありました。
仕組み
データを別のグラフデータベースに移動させる代わりに、pgGraphは既存のPostgreSQLテーブルから派生した、読み取り重視の特化型グラフインデックスを構築します。Compressed Sparse Row (CSR) 形式を使用して、関係性を連続したメモリ構造に保存することで、極めて高速な探索を可能にします。PostgreSQLはデータの信頼できる唯一の情報源(source of truth)として維持されたまま、graph スキーマ内の標準的なSQL関数を使用してこのグラフを操作します。
対象ユーザー
- 専用のグラフデータベースに移行することなく、複雑な関係性クエリを実行する必要があるPostgreSQLユーザー。
- GraphRAGのようなグラフベースのワークロードを高速化したいデータエンジニア。
- 既存のリレーショナルスキーマとセキュリティ制約を維持したまま、高速な探索(最短経路やマルチホップ検索など)を実行したいユーザー。
ハイライト
- データ移行ゼロ: データは標準的なPostgreSQLテーブルに保持されます。pgGraphは派生インデックスを作成するだけです。
- 高パフォーマンス: 特化型のメモリ効率の良い実行レイヤーを使用することで、再帰的なSQL結合のオーバーヘッドを回避します。
- SQLネイティブ: 新しいクエリ言語は不要です。SQL関数を使用してグラフ探索を実行できます。
- 安全機能: 深度制限やメモリ保護機能などの組み込みのサーキットブレーカーが含まれており、無制限の探索によるデータベースのクラッシュを防ぎます。
Sources
- RepoEvokoa/pgGraph