次の方法で共有


Azure Database for PostgreSQL を使用した AGE 拡張機能

Apache AGE (グラフ拡張機能) は、グラフ データベースの機能を PostgreSQL エコシステムにシームレスに統合するように設計された強力な PostgreSQL 拡張機能です。 AGE を使用すると、Apache Incubator プロジェクトで開発された直感的な openCypher クエリ言語をサポートすることで、グラフ データを効率的かつ表現力豊かに格納およびクエリできます。 リレーショナル データとグラフ データの間のギャップを埋め、開発者は複雑なリレーションシップを管理し、従来のデータベースが明らかにするのに苦労する可能性がある分析情報を明らかにすることができます。

ノード (エンティティ) とエッジ (リレーションシップ) を介して表されるグラフ データは、ソーシャル ネットワーク、レコメンデーション システム、不正行為検出、ネットワーク分析、ナレッジ グラフなどのアプリケーションに不可欠であるとますます認識されています。 Apache AGE は、このような相互接続されたデータを処理するための堅牢なソリューションを提供し、高度な分析と合理化されたデータ管理を可能にします。

Apache AGE を使用したグラフ データ機能のロック解除

Apache AGE を使用してグラフ データ機能のロックを解除すると、開発者は PostgreSQL 内で相互接続されたデータの可能性を最大限に活用できます。 Apache AGE では、グラフ データベースの機能をリレーショナル データベースに直接統合することで、複雑なリレーションシップのシームレスな探索と分析が可能になります。 この機能は、ソーシャル ネットワーク、不正行為の検出、レコメンデーション システムなど、データ接続に関する深い洞察を必要とするアプリケーションにとって価値があります。 OpenCypher クエリ言語と堅牢な PostgreSQL 基盤のサポートにより、Apache AGE は、グラフ データを管理およびクエリするためのスケーラブルで効率的なソリューションを提供します。

Apache AGE の主な機能

  • グラフとリレーショナル データの統合: AGE を使用すると、PostgreSQL 内のグラフデータとリレーショナル データ間のシームレスな対話が可能になります。
  • openCypher クエリ言語: AGE では、グラフ データベースに対してこの広く認識されているクエリ言語がサポートされており、クエリの書き込みとメンテナンスが簡素化されます。
  • スケーラビリティと信頼性: PostgreSQL の実証済みアーキテクチャでは、AGE はスケーラビリティとエンタープライズ レベルの堅牢性を継承しています。

グラフ データベースを使用する理由

グラフ データベースは、複雑で高度に相互接続されたリレーションシップを表し、クエリを実行することに優れています。 ディープ リレーションシップ トラバーサル用に最適化されていない複数の結合またはドキュメント データベースが必要なリレーショナル データベースとは異なり、グラフ データベースはエンティティ間のリレーションシップを自然にモデル化します。 たとえば、グラフ データベースでは、"フレンドのフレンド" や "2 つのポイント間の最短パス" に対してクエリを実行する方が直感的で効率的です。

AGE は PostgreSQL の ACID に準拠したトランザクション システムを使用し、グラフ クエリの信頼性と原子性を確保します。 この統合により、ナレッジ グラフなどの高度なアプリケーションが容易になり、ノードとしてのファクトと概念を構築し、エッジとしての相互接続を行うことで、AI 主導の検索とデータ生成がサポートされます。

Azure のお客様は AGE 拡張機能を有効にすることができます

Azure Database for PostgreSQL には、拡張機能として Apache AGE が含まれています。

次の手順は、フレキシブル サーバー インスタンスで拡張機能を有効にする際に役立ちます。

サーバー パラメーターにアクセスする

Azure portal 内で PostgreSQL フレキシブル サーバー インスタンスに移動し、[サーバー パラメーター] オプションを選択します。

次の設定を調整します。

  • azure.extensions: パラメーター フィルターで使用可能な拡張機能の中から AGE を検索して有効にします。
  • shared_preload_libraries: パラメーター フィルターで AGE を検索して有効にします。

[保存] を選択して、これらの変更を適用します。 サーバーが自動的に再起動され、AGE 拡張機能がアクティブ化されます。

クエリで AGE スキーマを使用しようとすると、 shared_preload_libraries を有効にしないと、"ERROR: unhandled cipher(cstring) function call error on first cipher query" (エラー: 最初の暗号クエリでの未処理の暗号 (cstring) 関数呼び出しエラー) というエラーが発生します。

PostgreSQL で AGE を有効にする

サーバーが再起動したら、psql インタープリターを使用して PostgreSQL インスタンスに接続します。 次のコマンドを実行して AGE を有効にします。

CREATE EXTENSION IF NOT EXISTS AGE CASCADE;

成功すると、クエリ出力として CREATE EXTENSION が表示されます。

また、pg_extension カタログ テーブルに対してクエリを実行して、AGE が有効になっていることを確認し、拡張機能のバージョンを確認することもできます。

SELECT * FROM pg_extension WHERE extname = 'age';

スキーマ パスを構成する

AGE では、グラフ データの処理に不可欠な ag_catalogというスキーマが追加されます。 次を実行して、このスキーマが検索パスに含まれていることを確認します。

SET search_path=ag_catalog,"$user",public;

Python の場合は、次のコマンドを実行してスキーマ パスを設定できます。

import psycopg as pg
with pg.Connection.connect(con_str + " options='-c search_path=ag_catalog,\"$user\",public'") as con:

アプリケーションでプログラムを使用して構成することもできます。

次の手順に従って、POSTGRESQL インスタンスが AGE 拡張機能の機能を使用するように適切に構成されていることを確認します。 AGE 拡張機能は、PostgreSQL 内で直接高度なグラフ データベース機能を提供します。 この設定により、グラフ クエリをアプリケーションにシームレスに統合し、強力なデータ リレーションシップと分析情報をロック解除できます。 AGE 拡張機能を有効にして構成したら、PostgreSQL 環境内でグラフ分析の可能性を最大限に調査する準備が整いました。

ag_catalog スキーマの重要なテーブル

  • ag_graph
  • ag_label

ag_graph

Apache AGE のag_catalog スキーマ内のag_graph テーブルは、 ag_catalog.create_graph 関数を介して PostgreSQL 内で作成されたグラフに関連するメタデータのリポジトリとして機能します。 具体的には、PostgreSQL のスキーマとして機能する、グラフの名前や関連する名前空間などの詳細が保持されます。 この名前空間は、グラフの構造を整理し、頂点データとエッジ データを格納するためのテーブルを含みます。

\d+ ag_graph
                                          Table "ag_catalog.ag_graph"
 Column   |     Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
-----------+--------------+-----------+----------+---------+---------+-------------+--------------+-------------
 graphid   | oid |           | not null |         | plain   |             |              |
 name | name |           | not null |         | plain   |             |              |
 namespace | regnamespace |           | not null |         | plain   |             |              |
Indexes:
    "ag_graph_graphid_index" UNIQUE, btree (graphid)
    "ag_graph_name_index" UNIQUE, btree (name)
    "ag_graph_namespace_index" UNIQUE, btree (namespace)
Referenced by:
    TABLE "ag_label" CONSTRAINT "fk_graph_oid" FOREIGN KEY (graph) REFERENCES ag_graph(graphid)
Access method: heap

ag_label

ag_label テーブルには、AGE グラフで使用されるラベルに関するメタデータが格納されます。 これらのラベルを追跡し、それぞれのグラフに関連付け、頂点とエッジのどちらを表すかを定義します。 エントリには、ラベルの一意の ID、関連付けられているグラフ、インデックス、データを格納する基になる PostgreSQL テーブルが含まれます。

\d+ ag_label
                                   Table "ag_catalog.ag_label"
 Column  |    Type | Collation | Nullable | Default | Storage | Compression | Stats target | Description
----------+------------+-----------+----------+---------+---------+-------------+--------------+-------------
 name | name |           | not null |         | plain   |             |              |
 graph    | oid |           | not null |         | plain   |             |              |
 id       | label_id   |           |          |         | plain   |             |              |
 kind     | label_kind |           |          |         | plain   |             |              |
 relation | regclass   |           | not null |         | plain   |             |              |
 seq_name | name |           | not null |         | plain   |             |              |
Indexes:
"ag_label_graph_oid_index" UNIQUE, btree (graph, id)
"ag_label_name_graph_index" UNIQUE, btree (name, graph)
"ag_label_relation_index" UNIQUE, btree (relation)
"ag_label_seq_name_graph_index" UNIQUE, btree (seq_name, graph)
Foreign-key constraints:
- `fk_graph_oid` FOREIGN KEY (graph) REFERENCES ag_graph(graphid)
Access method: heap