ソーシャルネットワーク、不正検知、知識グラフなど、複雑な関係性を持つデータのモデリングとクエリは、従来の SQL では煩雑で非効率です。PolarDB for PostgreSQL は、オープンソースのグラフエンジンである Apache AGE を統合しています。この統合により、同じクラスター内で標準 SQL と業界標準のグラフクエリ言語である openCypher の両方を使用でき、複雑な関係性のシナリオでグラフデータを効率的に保存、クエリ、分析することが可能になります。
適用範囲
以下のバージョンの PolarDB for PostgreSQL がサポートされています。
PostgreSQL 16 (マイナーエンジンバージョン 2.0.16.8.3.0 以降)
PostgreSQL 15 (マイナーエンジンバージョン 2.0.15.12.4.0 以降)
PostgreSQL 14 (マイナーエンジンバージョン 2.0.14.12.24.0 以降)
マイナーエンジンバージョンは、コンソールまたは SHOW polardb_version; 文を実行することで確認できます。詳細については、「クラスターのマイナーエンジンバージョンを表示する」をご参照ください。お使いのクラスターがマイナーエンジンバージョンの要件を満たしていない場合は、マイナーエンジンバージョンをアップグレードすることができます。
可視化ツール
コンソールで Apache AGE Viewer をベースにした視覚的なグラフ管理ツールを作成し、Web インターフェイスを通じてグラフデータを操作できます。
ステップ 1: グラフアプリケーションの作成
2 つの方法のいずれかで作成できます。
PolarDB コンソールに移動します。左側のナビゲーションウィンドウで、[PolarDB AI] をクリックし、次に [AI アプリケーションの作成] をクリックします。

PolarDB コンソールに移動します。左側のナビゲーションウィンドウで、クラスター をクリックします。適用範囲の要件を満たす対象クラスターを見つけ、クラスター詳細ページに移動します。左側のナビゲーションウィンドウで、 を選択し、次に [AI アプリケーションの作成] をクリックします。

アプリケーション購入ページで、必要に応じて適切な構成を選択します。
設定項目
説明
請求方法
[サブスクリプション]:前払いの課金方法です。アプリケーションを作成する際に、固定仕様のリソースを選択し、事前に料金を支払う必要があります。サブスクリプション期間が長いほど、割引率が高くなります。この課金方法は、長期的で安定したビジネス要件を持つシナリオに適しています。
[従量課金]:従量課金の課金方法です。アプリケーションを作成する際に、固定仕様のリソースを選択する必要がありますが、事前に料金を支払う必要はありません。実際の使用時間に基づいて課金されます。この課金方法は、柔軟なビジネス要件を持つシナリオに適しています。
エンジン
[PolarDB] に固定されています。
リージョン
アプリケーションが配置される地理的な場所を選択します。
説明アプリケーションの購入後にリージョンを変更することはできません。
アプリケーションは PolarDB for PostgreSQL クラスターと同じリージョンにある必要があります。したがって、PolarDB for PostgreSQL クラスターと同じリージョンを選択してください。
アプリケーションと接続したい ECS インスタンスは、同じリージョンに作成することを推奨します。そうしない場合、内部ネットワーク (プライベートネットワーク) を介して相互に通信できず、外部ネットワーク (パブリックネットワーク) を介してのみ通信できるため、最適なパフォーマンスが得られません。
アーキテクチャ
[AI アプリケーション] を選択します。
エコシステム
ソース PolarDB クラスターのデータベースエコシステムが自動的に入力されます。手動で入力する必要はありません。
[ソース PolarDB クラスター]
アプリケーションを作成する PolarDB クラスターを選択します。
バージョン
ソース PolarDB クラスターのデータベースバージョンが自動的に入力されます。手動で入力する必要はありません。
AI アプリケーション
[グラフ管理] を選択します。
コンポーネントセット
必要に応じて [バックエンドコンポーネント] の数と仕様をカスタマイズします。
AI アプリケーション名
カスタムのアプリケーション名を入力できます。
説明名前は http:// または https:// で始めることはできず、長さは 2〜256 文字である必要があります。
ネットワークタイプ
[VPC] に固定されています。
[VPC]
ソース PolarDB クラスターの VPC が自動的に入力されます。手動で入力する必要はありません。
ゾーンと VSwitch
VPC の vSwitch を設定します。最適なネットワークパフォーマンスを得るために、PolarDB for PostgreSQL クラスターと同じプライマリゾーンにある vSwitch を選択することを推奨します。
既存の vSwitch が要件を満たさない場合は、vSwitch を作成できます。
セキュリティグループ
アプリケーションのセキュリティグループを設定します。
数量
購入するアプリケーションの数を選択します。
説明各 PolarDB for PostgreSQL クラスターに対して、同じタイプの AI アプリケーションは 1 つしか購入できません。
このパラメーターは、[課金方法] が [サブスクリプション] に設定されている場合にのみ利用可能です。
期間
アプリケーションのサブスクリプション期間を選択します。
説明このパラメーターは、[課金方法] が [サブスクリプション] に設定されている場合にのみ利用可能です。
自動更新
自動更新を有効にするかどうかを設定します。更新忘れによるビジネスの中断を防ぐため、自動更新を有効にすることを推奨します。
説明このパラメーターは、[課金方法] が [サブスクリプション] に設定されている場合にのみ利用可能です。
購入が完了したら、クラスターの AI アプリケーションページに戻り、新しいアプリケーションを表示します。
説明システムのアプリケーション作成には 3〜5 分かかります。しばらくお待ちください。
ステップ 2: グラフアプリケーションへの接続
アプリケーションのホワイトリストを設定:AI アプリケーションのリストページで、ご利用の [アプリケーション ID] をクリックしてアプリケーション詳細ページに移動します。ホワイトリスト タブで、IP ホワイトリストの追加、セキュリティグループを選択、または既存のホワイトリストグループの 変更 を行うことができます。
説明アプリケーションのホワイトリストはクラスターのホワイトリストとは独立しており、別途設定する必要があります。
ご利用の ECS インスタンスがアプリケーションにアクセスする必要がある場合、ECS の [インスタンス詳細] ページで ECS インスタンスの IP アドレスを確認し、IP ホワイトリストに追加できます。
ご利用の ECS インスタンスとアプリケーションが同じ VPC にある場合、ECS インスタンスのプライベート IP アドレスまたはその VPC CIDR ブロックを追加できます。
ご利用の ECS インスタンスとアプリケーションが同じ VPC にない場合、ECS インスタンスのパブリック IP アドレスまたは ECS インスタンスが属するセキュリティグループを追加できます。
オンプレミスサーバー、コンピューター、または他のクラウドサーバーがアプリケーションにアクセスする必要がある場合は、そのパブリック IP アドレスを IP ホワイトリストに追加します。

エンドポイントの取得:AI アプリケーションのリストページで、ご利用の [アプリケーション ID] をクリックしてアプリケーション詳細ページに移動します。基本情報 タブの [トポロジー] セクションで [プライベートエンドポイント] を表示できます。
説明パブリックエンドポイントは別途リクエストする必要があります。[リクエスト] ボタンをクリックしてリクエストを送信してください。
パブリックエンドポイントは IP アドレスとポートのみを提供し、ドメイン名は提供しません。ドメイン名が必要な場合は、ご自身でバインドできます。

ステップ 3: 拡張機能の作成とデータベースの設定
拡張機能の作成:特権アカウントを使用して次の文を実行します。
説明age拡張機能は現在、手動での作成をサポートしていません。この機能を使用するには、チケットを送信して作成をリクエストしてください。CREATE EXTENSION age;データベースの設定:各接続で、クエリを簡素化し、
get_cypher_keywords関数を使用して拡張機能をロードするために、search_pathにag_catalogを追加する必要があります。説明Data Management Service (DMS) クライアントを使用して
search_pathを設定すると、互換性の問題が発生する可能性があります。PolarDB-Tools を使用して関連する文を実行できます。SET search_path = ag_catalog, "$user", public;特権アカウントを使用してデータベースパラメーターを設定し、拡張機能を永続的にロードします。これにより、接続ごとに前述の操作を繰り返す必要がなくなり、プロセスが簡素化されます。
ALTER DATABASE <dbname> SET search_path = "$user", public, ag_catalog; ALTER DATABASE <dbname> SET session_preload_libraries TO 'age';(任意) 一般ユーザーに AGE の使用を許可する:
ag_catalogスキーマで一般ユーザーにUSAGE権限を付与します。GRANT USAGE ON SCHEMA ag_catalog TO <username>;一般ユーザーが読み取りおよび書き込み権限しか持たない場合は、テーブルを作成するために
CREATE権限も付与する必要があります。GRANT CREATE ON DATABASE <dbname> TO <username>;
ステップ 4: グラフの作成とデータの挿入
グラフの作成:グラフを使用する前に、グラフを作成する必要があります。そのためには、
ag_catalog名前空間のcreate_graph関数を使用します。構文:
SELECT create_graph('<graph_name>');例:
SELECT ag_catalog.create_graph('moviedb');データの挿入:次の SQL 文を使用して、
moviedbグラフにサンプルデータを挿入します。SELECT * FROM cypher('moviedb', $$ CREATE (matrix:Movie {title: 'The Matrix', released: 1997}) CREATE (cloudAtlas:Movie {title: 'Cloud Atlas', released: 2012}) CREATE (forrestGump:Movie {title: 'Forrest Gump', released: 1994}) CREATE (keanu:Person {name: 'Keanu Reeves', born: 1964}) CREATE (robert:Person {name: 'Robert Zemeckis', born: 1951}) CREATE (tom:Person {name: 'Tom Hanks', born: 1956}) CREATE (tom)-[:ACTED_IN {roles: ['Forrest']}]->(forrestGump) CREATE (tom)-[:ACTED_IN {roles: ['Zachry']}]->(cloudAtlas) CREATE (robert)-[:DIRECTED]->(forrestGump) $$) AS (result1 agtype);これには、Movie ラベルを持つ 3 つのノードと Person ラベルを持つ 3 つのノード、合計 6 つのノードが含まれます。また、ACTED_IN ラベルを持つ 2 つのエッジと DIRECTED ラベルを持つ 1 つのエッジ、合計 3 つのエッジも含まれます。関係グラフは以下の通りです。

ステップ 5: アプリケーションの開発
アプリケーションの開発:アプリケーションにはインターネット経由で直接アクセスできます。AI アプリケーションのリストページで [アプリケーションの開発] をクリックして、グラフアプリケーションの可視化ツールのパブリックエンドポイントを開きます。または、ブラウザのアドレスバーにアプリケーションのパブリック IP アドレスとポートを入力して可視化ツールにアクセスすることもできます。
説明まず、ご利用のパブリック IP アドレスをアプリケーションのホワイトリストに追加してください。

可視化ツールのログインページで、次の情報を入力します。
[host]:ご利用の PolarDB クラスターのエンドポイントを選択します。
[データベース名]:クラスター内のデータベースを入力します。適切なデータベースがない場合は、クラスター詳細ページに戻ってデータベースを作成してください。
[ユーザー名]:クラスター内のデータベースアカウントを入力します。そのアカウントがデータベースに対して必要なアクセス権限を持っていることを確認してください。
[パスワード]:データベースアカウントのパスワードを入力します。

データのクエリ:Cypher では、
MATCHおよびRETURNキーワードを使用してデータをクエリします。MATCHはパターンマッチングを実行し、指定されたパターンに一致するコンテンツを検索します。RETURNキーワードは、Cypher クエリから返したい値や結果を指定します。
構文:
SELECT * FROM cypher('graph_name', $$ MATCH <patterns>RETURN <variables> $$) AS (result1 agtype);例:可視化ツールの上部に次の Cypher クエリ文を入力します。
SELECT * FROM cypher('moviedb', $$ MATCH (m:Person) RETURN m $$) AS (result1 agtype);
検証:文が正常に実行されると、
moviedbグラフの 3 つの Person ノードが下の可視化エリアに表示されます。
ステップ 6: (任意) グラフアプリケーションのリリース
可視化ツールが不要になった場合は、コストを節約するためにリリースできます。AI アプリケーションのリストで対象のグラフアプリケーションを見つけ、操作 列で [アプリケーションのリリース] をクリックします。
グラフアプリケーションをリリースすると、Web インターフェイスを提供する可視化ツールのみが削除されます。ご利用の PolarDB クラスターに保存されているグラフデータは削除されません。アプリケーションがリリースされると、パブリックエンドポイントなどの構成は失われ、回復できなくなります。
仕組み
コアエンジン:PolarDB のグラフデータベース機能は、PostgreSQL の
age拡張機能に基づいて実装されています。これは Apache AGE プロジェクトによって提供され、OpenCypher クエリ構文と互換性があります。ハイブリッドクエリ:
age拡張機能を使用すると、同じデータベース内で関係データ (標準テーブル) とグラフデータの両方を管理できます。これら 2 種類のデータは共存し、個別にクエリを実行できます。クエリの実行:Cypher クエリは直接実行されません。代わりに、
cypher()という名前の PostgreSQL 関数に文字列パラメーターとして渡されます。PolarDB はこの文字列を解析し、指定されたグラフで Cypher コマンドを実行し、結果を標準 SQL の行セットとして返します。データの型:クエリによって返される結果列は、通常
agtype型です。これは JSONB に似たカスタムデータ型で、ノード、エッジ、パスなどのグラフ要素の構造化情報をカプセル化するために使用されます。アプリケーションでは、通常 JSON 文字列として扱うことができます。
課金
コンポーネント料金:グラフアプリケーションは [バックエンドコンポーネント] に対して課金されます。料金は、選択したコンポーネントの仕様 (CPU とメモリ) およびサブスクリプション期間に基づいて計算されます。
ストレージ料金:グラフアプリケーションによって生成されたデータとファイルは、PolarDB for PostgreSQL クラスターのストレージスペースに保存されます。
トラフィックと帯域幅:料金は発生しません。
関連ドキュメント
Graph Database クイックスタート:psql などの SQL クライアントを通じて Cypher 文を使用してグラフデータベースと直接対話します。この方法は、バックエンド開発や自動化スクリプトのシナリオに適しています。
SQL リファレンス:SQL 構文は、Graph Database のための変更が加えられた Apache AGE に基づいています。