2.1.1.2 メモリーへのグラフのロードおよびグラフ分析の実行

プロパティ・グラフ・スキーマからメモリーへのグラフのロード

クイック・スタートのこのセクションでは、データベースのプロパティ・グラフ・スキーマに格納されているグラフをインメモリー・グラフ・サーバー(PGX)にロードします。これにより、様々な種類の組込みアルゴリズムをグラフで実行できるようになり、より大きなグラフの問合せパフォーマンスも改善されます。

最初に、JShellクライアントを起動し、インメモリー・グラフ・サーバー(PGX)に接続します。
./bin/opg4j --base_url https://<graph server host>:7007 --username <graphuser>
<graphuser>は、PGXサーバー認証に使用するデータベース・ユーザーです。データベース・パスワードの入力を要求されます。

ノート:

デモ目的でのみ、/etc/oracle/graph/server.confファイルでenable_tlsfalseに設定した場合にはhttps接続のかわりにhttpを使用できます。
./bin/opg4j --base_url http://<graph server host>:7007 --username <graphuser>

これによりシェルが起動し、グラフ・サーバーに接続します。

ノート:

グラフ・データを使用したセキュリティのベスト・プラクティスで説明されているとおり、PGXには常に低権限の読取り専用データベース・ユーザー・アカウントを使用してください。

次に、このサーバーのメモリーにグラフをロードします。

グラフをメモリーにロードするには、PGXグラフ構成ビルダーAPIを使用してPGXグラフ構成オブジェクトを作成し、これをシェルで直接実行します。

次の例では、PGXグラフ構成オブジェクトを作成します。メモリーにロードするプロパティがリストされるため、他のプロパティを除外してメモリー消費を削減できます。
Supplier<GraphConfig> pgxConfig = () -> { return GraphConfigBuilder.forPropertyGraphRdbms()
.setName("hr")
 .addVertexProperty("COUNTRY_NAME", PropertyType.STRING)
 .addVertexProperty("DEPARTMENT_NAME", PropertyType.STRING)
 .addVertexProperty("FIRST_NAME", PropertyType.STRING)
 .addVertexProperty("LAST_NAME", PropertyType.STRING)
 .addVertexProperty("EMAIL", PropertyType.STRING)
 .addVertexProperty("PHONE_NUMBER", PropertyType.STRING)
 .addVertexProperty("SALARY", PropertyType.DOUBLE)
 .addVertexProperty("MIN_SALARY", PropertyType.DOUBLE)
 .addVertexProperty("MAX_SALARY", PropertyType.DOUBLE)
 .addVertexProperty("STREET_ADDRESS", PropertyType.STRING)
 .addVertexProperty("POSTAL_CODE", PropertyType.STRING)
 .addVertexProperty("CITY", PropertyType.STRING)
 .addVertexProperty("STATE_PROVINCE", PropertyType.STRING)
 .addVertexProperty("REGION_NAME", PropertyType.STRING)
 .setPartitionWhileLoading(PartitionWhileLoading.BY_LABEL)
 .setLoadVertexLabels(true)
 .setLoadEdgeLabel(true)
 .build(); }
グラフ構成オブジェクトが作成されたので、次のAPIを使用してグラフをPGXに読み取ります。
opg4j> var graph = session.readGraphWithProperties(pgxConfig.get())
graph ==> PgxGraph[name=hr,N=215,E=433,created=1586996113457]

セッション・オブジェクトが自動的に作成されます。

アルゴリズムの実行およびアルゴリズム結果の問合せ

グラフがメモリー内にあるので、単一のAPI呼出しを使用して任意の組込みアルゴリズムを実行できます。たとえば、pagerankの場合は次のようになります。
opg4j> analyst.pagerank(graph)
$31==> VertexProperty[name=pagerank,type=double,graph=hr]
前述の出力からわかるように、各アルゴリズムにより、アルゴリズムの出力を保持するグラフに新しい頂点プロパティが作成されました。グラフ内で最も重要な人々を(pagerankに応じて)印刷するには、次の問合せを実行します。
opg4j> session.queryPgql("select m.FIRST_NAME, m.LAST_NAME, m.pagerank from hr match (m:EMPLOYEE) order by m.pagerank desc limit 10").print().close()
+----------------------------------------------------+
| m.FIRST_NAME | m.LAST_NAME | m.pagerank |
+----------------------------------------------------+
| Adam | Fripp | 0.002959240305566317 |
| John | Russell | 0.0028810951120575284 |
| Michael | Hartstein | 0.002181365227465801 |
| Alexander | Hunold | 0.002082616009054747 |
| Den | Raphaely | 0.0020378615199327507 |
| Shelley | Higgins | 0.002028946863425767 |
| Nancy | Greenberg | 0.0017419394483596667 |
| Steven | King | 0.0016622985848193119 |
| Neena | Kochhar | 0.0015252785582170803 |
| Jennifer | Whalen | 0.0014263044976976823 |
+----------------------------------------------------+

他のセッションとのグラフの共有

グラフをインメモリー・サーバーにロードした後、publish() APIを使用して、グラフ・ビジュアライゼーション・セッションなどの他のセッションでグラフを表示できます。次に例を示します。
opg4j> graph.publish(VertexProperty.ALL, EdgeProperty.ALL)

公開されたグラフには、pagerankなどの関数をコールしてグラフに追加した、新しいプロパティがすべて含まれます。

グラフ・ビジュアライゼーション・アプリケーションは、ブラウザで<my-server-name>:7007/ui/に移動すると使用できます。

グラフ・ビジュアライゼーション・アプリケーションへのログイン時にセッションIDを指定することで、特定のクライアント・セッションに接続できます。公開されていない場合でも、セッション内のすべてのグラフを視覚化できます。

opg4j> session
session ==> PgxSession[ID=5adf83ab-31b1-4a0e-8c08-d6a95ba63ee0,source=pgxShell]

セッションIDは5adf83ab-31b1-4a0e-8c08-d6a95ba63ee0です。

ノート:

グラフ・ビジュアライゼーション・アプリケーションからインメモリー・グラフ・サーバー(PGX)に接続するには、サーバー証明書を作成する必要があります。詳細は、トランスポート層セキュリティの設定を参照してください。