16.3.2 グラフ・スナップショットのディスクへの格納

グラフをメモリーに読み込んだ後、グラフに変更(PageRankアルゴリズムの実行や頂点プロパティとしての値の格納など)を加えた場合は、グラフのそのスナップショットをディスクに格納できます。

グラフの状態をメモリーに保存する場合は、グラフのスナップショットをバイナリ形式のファイル(PGBファイル)として保存できます。

一般に、グラフ・サーバーを停止する必要がある場合は、グラフで実行されたすべてのグラフ問合せおよび分析APIを格納することをお薦めします。グラフ・サーバー(PGX)を再起動すると、グラフをリロードしてAPIを再実行できます。

ただし、グラフの状態を保存する必要がある場合は、次の例でグラフ・スナップショットをディスクに格納する方法について説明します。

グラフ・スナップショットを格納するための前提条件として、読取りまたは書込みの対象となるファイルが格納されているディレクトリ(グラフ・サーバー上)を指すディレクトリ・オブジェクトを定義して、対応するディレクトリへのアクセスを明示的に認可する必要があります。

CREATE OR REPLACE DIRECTORY pgx_file_location AS '<path_to_dir>';
GRANT READ, WRITE ON directory pgx_file_location to GRAPH_DEVELOPER;

また、次の点にも注意してください。

  • CREATE DIRECTORY文のディレクトリは、グラフ・サーバー(PGX)に存在する必要があります。
  • このディレクトリは、グラフ・サーバー(PGX)によってOSレベルで読取り可能(/書込み可能)である必要があります。

前述のコードでは、ディレクトリに対する権限をGRAPH_DEVELOPERロールに付与します。ただし、個々のユーザーに権限を付与することもできます。

GRANT READ, WRITE ON DIRECTORY pgx_file_location TO <graph_user>;

その後、次のコードを実行して、PGQLプロパティ・グラフをグラフ・サーバー(PGX)にロードし、グラフ・スナップショットをファイルとして保存できます。グラフ内の頂点およびエッジ・プロバイダごとに1つずつ、複数のPGBファイルが生成されることに注意してください。

opg4j> var g = session.readGraphByName("BANK_GRAPH", GraphSource.PG_PGQL)
g ==> PgxGraph[name=BANK_GRAPH,N=999,E=4993,created=1676021791568]

opg4j> analyst.pagerank(graph)
$8 ==> VertexProperty[name=pagerank,type=double,graph=BANK_GRAPH]

// Now save the state of this graph
opg4j>  var storedPgbConfig = graph.store(ProviderFormat.PGB, "<path_to_dir>")

3層デプロイメントでは、ファイルはサーバー側のファイル・システムに書き込まれます。また、書き込むファイルの場所がグラフ・サーバー(PGX)で指定されていることを確認する必要があります。(Autonomous Databaseを使用したOracle Graphの3層デプロイメントで説明されているように、3層デプロイメントでは、PGXサーバー・ファイル・システムにアクセスするには、許可されている場所のリストを指定する必要があります。)