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

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

これは、新しいバージョンに移行するためにインメモリー・グラフ・サーバーを停止する必要がある場合や、他のなんらかの理由でサーバーを停止する必要がある場合など、グラフの状態をメモリーに保存する際に役立ちます。

(HTTP/RESTへのグラフの格納は現在サポートされていません)。

グラフの状態をメモリーに保存する場合、たとえば新しいバージョンに移行するためにインメモリー・グラフ・サーバーを停止する必要がある場合や、他のなんらかの理由でサーバーを停止する必要がある場合は、グラフのスナップショットをバイナリ形式のファイル(PGBファイルと呼ばれる)で保存できます。

一般的には、実行されたグラフ問合せおよび分析APIを保存し、インメモリー・グラフ・サーバーを再起動した後、APIを再ロードして再実行することをお薦めします。ただし、グラフの状態を保存する必要がある場合は、次の例のロジックを使用して、シェルからグラフ・スナップショットを保存できます。

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

opg4j> var graph = session.createGraphBuilder().addVertex(1).addVertex(2).addVertex(3).addEdge(1,2).addEdge(2,3).addEdge(3, 1).build()
graph ==> PgxGraph[name=anonymous_graph_1,N=3,E=3,created=1581623669674]

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

// Now save the state of this graph

opg4j> g.store(Format.PGB, "/tmp/snapshot.pgb")
$4 ==> {"edge_props":[],"vertex_uris":["/tmp/snapshot.pgb"],"loading":{},"attributes":{},"edge_uris":[],"vertex_props":[{"name":"pagerank","dimension":0,"type":"double"}],"error_handling":{},"vertex_id_type":"integer","format":"pgb"}

// reload from disk 
opg4j> var graphFromDisk = session.readGraphFile("/tmp/snapshot.pgb")
graphFromDisk ==> PgxGraph[name=snapshot,N=3,E=3,created=1581623739395]

// previously computed properties are still part of the graph and can be queried
opg4j> graphFromDisk.queryPgql("select x.pagerank match (x)").print().close()

次の例は基本的に前の例と同じですが、パーティション化されたグラフを使用しています。パーティション化されたグラフの場合、複数のPGBファイル(グラフの頂点/エッジ・パーティションごとに1つ)が生成されます。

opg4j> analyst.pagerank(graph)
$3 ==> VertexProperty[name=pagerank,type=double,graph=anonymous_graph_1]// store graph including all props to disk
// Now save the state of this graph
opg4j> var storedPgbConfig = g.store(ProviderFormat.PGB, "/tmp/snapshot")
$4 ==> {"edge_props":[],"vertex_uris":["/tmp/snapshot.pgb"],"loading":{},"attributes":{},"edge_uris":[],"vertex_props":[{"name":"pagerank","dimension":0,"type":"double"}],"error_handling":{},"vertex_id_type":"integer","format":"pgb"}
// Reload from disk 
opg4j> var graphFromDisk = session.readGraphWithProperties(storedPgbConfig)
graphFromDisk ==> PgxGraph[name=snapshot,N=3,E=3,created=1581623739395]
// Previously computed properties are still part of the graph and can be queried
opg4j> graphFromDisk.queryPgql("select x.pagerank match (x)").print().close()