1 プロパティ・グラフの概要

プロパティ・グラフを使用すると、データを異なる方法で表示できます。

グラフでデータ・エンティティの頂点を作成し、それらの間の関係をエッジとして作成することで、データをグラフとしてモデル化できます。たとえば、銀行では、顧客口座は頂点になり、それらの間の送金関係はエッジになります。

データをグラフとして表示すると、データ間の接続および関係に基づいてデータを分析できます。PageRankなどのグラフ分析アルゴリズムを実行して、データ・エンティティ間の関係(Webページ間のリンクなど)に基づいてその相対的な重要性を測定できます。

1.1 プロパティ・グラフとは

プロパティ・グラフは、オブジェクトまたは頂点のセットと、これらのオブジェクトをつなぐ矢印またはエッジのセットで構成されます。

頂点およびエッジには複数のプロパティを含めることができ、それらはキー値ペアとして表されます。

各頂点には一意の識別子があり、次のものを含めることができます。

  • 出力エッジのセット

  • 入力エッジのセット

  • プロパティの集まり

各エッジには一意の識別子があり、次のものを含めることができます。

  • 出力頂点

  • 入力頂点

  • 2つの頂点間の関係を示すテキスト・ラベル

  • プロパティの集まり

頂点およびエッジでは、各プロパティが一意の名前で識別されます。

次の図に、2つの頂点と1つのエッジを持つ非常に単純なプロパティ・グラフを示します。2つの頂点には識別子1および2があります。両方の頂点には、プロパティnameおよびageがあります。エッジは、出力頂点1から入力頂点2に向かっています。このエッジは、テキスト・ラベルknowsと、頂点1と2の関係のタイプを識別するプロパティtypeで表されます。

図1-1 単純なプロパティ・グラフの例

図1-1の説明が続く
「図1-1 単純なプロパティ・グラフの例」の説明

プロパティ・グラフには、自己エッジ(ソース頂点と宛先頂点が同じエッジ)と、同じソース頂点と宛先頂点の間の複数のエッジを含めることができます。

また、プロパティ・グラフには、同じグラフ内に様々なタイプの頂点およびエッジを含めることもできます。たとえば、グラフには、ラベルがPersonの頂点セットとラベルがPlaceの頂点セットを、これら2つの頂点セットに関連する様々なプロパティとともに含めることができます。

プロパティ・グラフ・データ・モデルは、W3C規格ベースのResource Description Framework (RDF)グラフ・データ・モデルに似ていますが、プロパティ・グラフ・データ・モデルはRDFよりも単純であり、厳密ではありません。

プロパティ・グラフ・データ・モデルの機能および分析APIにより、プロパティ・グラフは次のようなユースケースでよい候補になります。

  • ソーシャル・ネットワークでの影響の特定

  • 傾向と顧客行動の予測

  • パターン一致に基づく関係の発見

  • キャンペーンをカスタマイズするためのクラスタの特定

1.2 Oracle Databaseのプロパティ・グラフ機能について

プロパティ・グラフ機能は、Oracle Databaseの高度なグラフ問合せ機能および分析機能を提供します。

この機能は、グラフ操作、索引付け、問合せ、検索およびインメモリー分析をサポートします。

グラフは頂点、エッジ、および頂点とエッジのプロパティとしてリンクされたデータのネットワークを管理します。グラフは一般的に、ソーシャル・ネットワーク、サイバー・セキュリティ、ユーティリティおよび電気通信、ライフサイエンスおよび臨床データ、ナレッジ・ネットワークで検出される関係のモデル化、格納および分析に使用されます。

標準的なグラフ分析には、グラフのトラバース、推奨、コミュニティおよびインフルエンサの検出、パターン一致などがあります。グラフは、電気通信、ライフサイエンスおよびヘルスケア、セキュリティ、メディアおよび出版などの業種に活用できます。

Oracle Databaseのプロパティ・グラフ機能では、次の機能でこのようなユースケースをサポートしています。

  • スケーラブルなグラフ・データベース
  • PGQLに基づく開発者ベースのAPI、およびJavaグラフAPI
  • グラフ問合せおよびグラフ分析を実行するためのパラレルなインメモリー・グラフ・サーバー(PGX)
  • ランキング、中心性、レコメンダ、コミュニティ検出、パス検索など、高速でスケーラブルな一連のソーシャル・ネットワーク分析機能
  • Oracle定義のフラット・ファイル形式でのプロパティ・グラフ・データの並列バルク・ロードおよびエクスポート
  • 強力なグラフ・ビジュアライゼーション・アプリケーション
  • Jupyterとの統合によるノートブック・サポート

1.3 プロパティ・グラフ・アーキテクチャの概要

Oracle Databaseのプロパティ・グラフ機能は、次のアーキテクチャ・モデルをサポートしています。

1.3.1 データベースでのグラフ問合せを実行するためのアーキテクチャ・モデル

サポートされている任意のクライアント・ツールを使用して、データベースのリレーショナル表に格納されているグラフ・データを直接操作できます。

このアプローチでは、次の図に示すように、グラフ問合せが実行されます。

図1-2 グラフ問合せを実行するためのプロパティ・グラフのアーキテクチャ

図1-2の説明が続きます。
「図1-2 グラフ問合せを実行するためのプロパティ・グラフのアーキテクチャ」の説明

このモデルでは、サポートされている次のオプションのいずれかを使用して、プロパティ・グラフを作成できます:

  • SQL DDL文を使用して、既存のデータベース・スキーマ・オブジェクトに対して直接SQLプロパティ・グラフを作成します。詳細は、「SQLプロパティ・グラフ」を参照してください。
  • プロパティ・グラフ・ビューを表内のグラフ・データに対して直接作成します。詳細は、「プロパティ・グラフ・ビュー」を参照してください。

PGQLを使用してグラフをグラフ・サーバー(PGX)にロードせずに、グラフを直接問い合せることができます。また、GRAPH_TABLE演算子を使用して、SQLプロパティ・グラフに対してグラフ・パターン一致問合せを実行することもできます。詳細は、「SQL GRAPH_TABLE問合せ」を参照してください。

ただし、グラフ分析アルゴリズムを実行する場合は、このグラフをグラフ・サーバー(PGX)にロードする必要があります。グラフの同期を維持するために、データベースからデータの更新を定期的にフェッチするようにグラフ・サーバーを構成できます。

1.3.2 グラフ分析を実行するためのアーキテクチャ・モデル

特殊なグラフ計算を実行するために、プロパティ・グラフをグラフ・サーバー(PGX)にロードできます。

図1-3 グラフ分析を実行するためのプロパティ・グラフのアーキテクチャ

図1-3の説明が続きます
「図1-3 グラフ分析を実行するためのプロパティ・グラフのアーキテクチャ」の説明

前述のアーキテクチャ設計に示すように、グラフ・サーバー(PGX)は、スタンドアロンとして、またはOracle WebLogic ServerやApache Tomcatなどのコンテナ内で実行できる中間層サーバーです。この手法を使用して、プロパティ・グラフをグラフ・サーバー(PGX)にロードできます。これにより、グラフ・サーバー内のメモリーでグラフ問合せおよび分析の操作を実行できます。

グラフは、リレーショナル表から直接作成することも、データベースにグラフを格納するプロパティ・グラフ・ビューからロードすることもできます。メモリー内のグラフは変更(頂点とエッジの挿入、更新および削除、アルゴリズムの実行結果に対する新しいプロパティの作成)できます。グラフ・サーバーによって変更がリレーショナル表に書き戻されることはありません。

プロパティ・グラフのサイズ変更の推奨事項

カリキュレータGraph Size Estimatorを使用して、グラフ・サーバー(PGX)に必要なメモリーを計算できます。

たとえば、指定された入力についてカリキュレータによって推定されたメモリーを次の表に示します。

表1-1 Graph Size Estimator

頂点の数 エッジの数 頂点ごとのプロパティ エッジごとのプロパティ 推定グラフ・サイズ
10M 100M
  • 4 - 整数型
  • 1 - 文字列型(15文字)
  • 4 - 整数型
  • 1 - 文字列型(15文字)
15GB
100M 1B
  • 4 - 整数型
  • 1 - 文字列型(15文字)
  • 4 - 整数型
  • 1 - 文字列型(15文字)
140GB

ノート:

  • グラフをメモリーに読み込むには、それをメモリー内で表現するために必要なメモリーの量の最大2倍を要することがあります。したがって、PGXの実行に必要なメモリーを計算するときは、推定グラフ・サイズのメモリーの量を2倍にすることをお薦めします。
  • CPUプロセッサ: 1千万個の頂点と1億個のエッジがあるグラフに推奨されるCPUプロセッサの数は2-4プロセッサで、コンピューティング負荷がより高いワークロードについては最大16プロセッサです。CPUプロセッサを増やすと、パフォーマンスが向上します。

1.3.3 グラフ・サーバー機能をライブラリとして使用したアプリケーションの開発

グラフ・サーバー(PGX)で使用可能なグラフ関数は、アプリケーションでライブラリとして使用できます。

グラフ・サーバーのrpmのインストール後、すべてのjarファイルが/opt/oracle/graph/libにあります。この場合、サーバーのインストールとクライアント・ユーザー・アプリケーションは同じマシンにあります。

このようなユースケースの場合には、対話型JavaシェルまたはPythonシェルを埋込み(ローカル)モードで使用して、開発およびテストを実行できます。つまり、ローカルPGXインスタンスが作成され、クライアントと同じJVMで実行されます。パラメータなしでシェルを起動すると、ローカルPGXインスタンスが起動され、埋込みモードで実行されます。

ローカルPGXインスタンスへの参照を取得する方法の詳細は、ライブラリとしてのグラフ・サーバー(PGX)の使用を参照してください。

1.4 グラフ・サーバー(PGX)について

インメモリー・グラフ・サーバー・レイヤーを使用すると、並列のインメモリー実行を使用してプロパティ・グラフを分析できます。

60を超える分析関数が用意されています。カテゴリと、そこに含まれる具体的な関数の例を次に示します。

  • 中心性 - 次数中心性、固有ベクトル中心性、PageRank、中間中心性、近接中心性
  • コンポーネントおよびコミュニティ - 強力に接続されたコンポーネント(TarjanおよびKosaraju)。弱く接続されたコンポーネント
  • TwitterのWho-To-Follow (おすすめユーザー)、ラベル伝播。
  • パス探索 - 単一ソースのすべての宛先(ベルマン - フォード)、ダイクストラの最短パス、ホップ距離(幅優先探索)
  • コミュニティ評価 - 係数(トライアングル・カウンティング)、コンダクタンス、モジュール性、Adamic-Adarカウンタ。

1.4.1 グラフ・サーバー(PGX)の概要

グラフ・サーバー(PGX)は、高速でパラレルなグラフ問合せおよび分析のためのインメモリー・アクセラレータです。サーバーは軽量のインメモリー・データ構造を使用して、グラフ・アルゴリズムの高速実行を可能にします。

Oracle Databaseまたはファイルからグラフをグラフ・サーバーにロードするオプションは複数あります。

グラフ・サーバーは、スタンドアロン(埋込みApache Tomcatインスタンスを含む)でデプロイすることも、Oracle WebLogic ServerまたはApache Tomcatにデプロイすることもできます。

1.4.1.1 グラフ・サーバー(PGX)の設計

グラフ・サーバー(PGX)の設計は、サーバークライアント使用モデルに基づいています。様々なグラフ・サーバー(PGX)実行モードの詳細は、グラフ・サーバー(PGX)の使用モードを参照してください。

次の図は、グラフ・サーバー(PGX)の設計を示しています。

図1-4 グラフ・サーバー(PGX)の設計

図1-4の説明が続きます
「図1-4 グラフ・サーバー(PGX)の設計」の説明

グラフ・サーバー(PGX)設計の中核概念は次のとおりです:

  • グラフ・サーバーには、複数のグラフ・クライアントが同時に接続できます。
  • それぞれのクライアント・リクエストが、グラフ・サーバーによって非同期に処理されます。クライアント・リクエストは最初にキューに入れられ、リソースが使用可能になると後で処理されます。クライアントはサーバーをポーリングして、リクエストが終了したかどうかを確認できます。
  • 内部的には、サーバーはパラレル・グラフ・アルゴリズムと問合せを実行するための独自のエンジン(スレッド・プール)を保持しています。エンジンは、各分析リクエストをできるだけ多くのスレッドと同時に処理しようとします。

同時クライアント間の分離

グラフ・サーバー(PGX)は、同時クライアント間のデータ分離をサポートします。各クライアントには、セッションと呼ばれる独自のプライベート・ワークスペースがあります。セッションは相互に分離されています。各クライアントは、他のクライアントから独立して、グラフ・インスタンスを独自のセッションにロードできます。したがって、各クライアントは、グラフ・インスタンス(およびプロパティ)を他のクライアントとは関係なく、独自のセッションにロードできます。

1.4.1.2 グラフ・サーバー(PGX)の使用モード

このセクションでは、グラフ・サーバー(PGX)の様々な使用モードの概要について説明します。グラフ・サーバーは、次のいずれかの使用モードで実行できます。

リモート・サーバー・モード

リモート・サーバー・モードでは、主要なPGX実行エンジンは強力なサーバー・マシンにRESTfulアプリケーションとしてデプロイされ、グラフ・シェルを使用してマシンからリモートに接続できます。また、複数のクライアントが同じグラフ・サーバー(PGX)に同時に接続できるため、グラフ・サーバーはこれらのクライアント間でタイムシェアされます。

グラフ・シェルの詳細は、対話型グラフ・シェルのCLIを参照してください。

次の図は、リモート実行モードのグラフ・サーバー(PGX)を示しています。

図1-5 リモート・サーバー・モード

図1-5の説明が続きます
「図1-5 リモート・サーバー・モード」の説明

リモート・サーバー・モードは、次のような状況で役立ちます。

  • 多数のコアと大容量メモリーを備えた強力なサーバークラス・マシンを使用して、大規模なデータ・セットに対してグラフ分析を実行します。
  • サーバークラス・マシンは、複数のクライアントによって共有されます。

リモート・サーバー・モードでグラフ・サーバー(PGX)を起動する方法については、グラフ・サーバー(PGX)の起動を参照してください。

ライブラリとしてのグラフ・サーバー(PGX)の使用

グラフ・サーバー(PGX)を通常のJavaライブラリとしてアプリケーションに含めることもできます。

次の図は、アプリケーションのライブラリとして使用されるグラフ・サーバー(PGX)を示しています。

図1-6 ライブラリとしてのPGX

図1-6の説明が続きます
「図1-6 ライブラリとしてのPGX」の説明

埋込みモードは、機能の一部としてグラフ分析を使用するアプリケーションを作成する場合に役立ちます。

詳細は、ライブラリとしてのグラフ・サーバー(PGX)の使用を参照してください。

サーブレットWebアプリケーションとしてのグラフ・サーバー(PGX)のデプロイ

グラフ・サーバー(PGX)は、Apache TomcatまたはOracle WebLogic Serverを使用してWebアプリケーションとしてデプロイできます。

Apache TomcatまたはOracle WebLogic Serverでグラフ・サーバー(PGX)をデプロイする手順は、WebサーバーへのOracle Graph Serverのデプロイを参照してください。

1.5 グラフ・データを使用したセキュリティのベスト・プラクティス

一部のセキュリティ関連のベスト・プラクティスは、グラフ・データを操作する場合に適用されます。

機密情報

グラフ・データには機密情報を含めることができるため、他のタイプのデータと同じように注意して取り扱う必要があります。Oracleでは、グラフ製品を使用する場合、次の考慮事項を検討することをお薦めします。

  • 分析に不要な場合は、機密情報をグラフに格納しないでください。既存のデータがある場合は、分析に必要な関連サブセットのみをグラフとしてモデル化します。このためには、前処理ステップを適用するか、グラフ製品の一部であるサブグラフとフィルタリング手法を使用します。
  • 頂点識別子およびエッジ識別子が機密情報とみなされないようにグラフをモデル化してください。
  • 信頼できない環境に製品をデプロイしたり、信頼できないクライアント接続へのアクセスを提供する方法で製品をデプロイしたりしないでください。
  • 信頼できるネットワーク内で実行されている場合であっても、すべての通信チャネルが暗号化されていること、および認証が常に有効になっていることを確認してください。

権限の最も低いアカウント

データを読み取るためにグラフ・サーバー(PGX)が使用するデータベース・ユーザー・アカウントは、権限の低い読取り専用アカウントである必要があります。PGXは、データベースの上位で読取り専用キャッシュとして機能するインメモリー・アクセラレータで、データベースにデータを書き戻しません。

アプリケーションでグラフ・データを書き込み、後でPGXを使用して分析する必要がある場合は、各コンポーネントに2つの異なるデータベース・ユーザー・アカウントを必ず使用してください。

パブリック・ヘルス・エンドポイントのセキュリティ

ロード・バランサの背後で複数のグラフ・サーバー(ロード・バランサの背後でのOracle Graph Serverのデプロイ)を実行しない場合は、セキュリティ上の措置としてグラフ・サーバーのパブリック・エンドポイントを無効にすることをお薦めします。この場合、ロード・バランサがグラフ・サーバーの状態を判別する必要があります。

エンドポイントを無効にするには:

  1. グラフ・サーバーのWARファイルを見つけます。RPMを使用してグラフ・サーバーをインストールした場合、ファイルは/opt/oracle/graph/pgx/server/pgx-webapp-<version>.warにあります。
  2. .warファイルを任意の場所に解凍し、解凍されたディレクトリ内のWEB-INF/web.xmlファイルを任意のテキスト・エディタで編集します。
  3. このファイル内でpgx.auth.exceptionsパラメータを見つけます。パブリック・エンドポイントのリストが次のように表示されます。
    <init-param>
        <param-name>pgx.auth.exceptions</param-name>
        <param-value>isReady;isRunning;auth/token</param-value>
    </init-param>
  4. 次のように、パブリック・エンドポイントのリストからisReadyエンドポイントを削除します。
    <init-param>
        <param-name>pgx.auth.exceptions</param-name>
        <param-value>isRunning;auth/token</param-value>
    </init-param>
  5. 変更を保存し、WARファイルを再パッケージ化して元の場所に再デプロイします。
  6. グラフ・サーバーを再起動します。

1.6 Oracle Graph Server and Clientのアクセシビリティについて

この項では、Oracle Graph Server and Clientのアクセシビリティ機能について説明します。