16.2.1.2 グラフ・ロードの進捗レポートおよび見積り
大規模なグラフをグラフ・サーバー(PGX)にロードすると、長時間実行される操作になることがあります。ただし、非同期アクションを使用してグラフをロードすると、グラフ・ロード操作の進行状況をモニターできます。
次の表に、次の形式でサポートされる非同期グラフ・ロードAPIを示します。
表16-3 非同期グラフ・ロードAPI
データ形式 | API |
---|---|
PGQLプロパティ・グラフ | session.readGraphByNameAsync() |
PGスキーマ | session.readGraphWithPropertiesAsync() |
CSV | session.readGraphFileAsync() |
これらのサポートされているAPIは、PgxFuture
オブジェクトを戻します。
その後、PgxFuture.getProgress()
メソッドを使用して次の統計を収集できます。
- グラフ・ロード操作の進行状況に関するレポート
- メモリーにロードする必要がある残りの頂点およびエッジの見積り
たとえば、次のコードは、PGQLプロパティ・グラフを非同期にロードし、その後FutureProgress
オブジェクトを取得してロードの進行状況をレポートおよび見積るステップを示しています。ただし、グラフ・ロードの見積り(ロードされたエンティティおよびプロバイダの数、エンティティおよびプロバイダの合計数など)は、グラフのロード操作が進行中になるまでしか取得できません。また、グラフ・サーバー(PGX)にロードされるエンティティの10000エントリごとにグラフ・ロードの進行状況がシステムによって内部的に計算します。
opg4j> var graphLoadingFuture = session.readGraphByNameAsync("BANK_GRAPH_VIEW", GraphSource.PG_VIEW)
readGraphFuture ==> oracle.pgx.api.PgxFuture@6106dfb6[Not completed]
opg4j> while (!graphLoadingFuture.isDone()) {
...> var progress = graphLoadingFuture.getProgress();
...> var graphLoadingProgress = progress.asGraphLoadingProgress();
...> if (graphLoadingProgress.isPresent()) {
...> var numLoadedVertices = graphLoadingProgress.get().getNumLoadedVertices();
...> }
...> Thread.sleep(1000);
...> }
opg4j> var graph = graphLoadingFuture.get();
graph ==> PgxGraph[name=BANK_GRAPH_VIEW_3,N=999,E=4993,created=1664289985985]
PgxFuture<PgxGraph> graphLoadingFuture = session.readGraphByNameAsync("BANK_GRAPH_VIEW", GraphSource.PG_VIEW);
while (!graphLoadingFuture.isDone()) {
FutureProgress progress = graphLoadingFuture.getProgress();
Optional < GraphLoadingProgress > graphLoadingProgress = progress.asGraphLoadingProgress();
if (graphLoadingProgress.isPresent()) {
long numLoadedVertices = graphLoadingProgress.get().getNumLoadedVertices();
}
Thread.sleep(1000);
}
PgxGraph graph = graphLoadingFuture.get();
FutureProgress
オブジェクトは、一連の非同期操作で使用しないことをお薦めします。