15.2.1.2 グラフ・ロードの進捗レポートおよび見積り

大規模なグラフをグラフ・サーバー(PGX)にロードすると、長時間実行される操作になることがあります。ただし、非同期アクションを使用してグラフをロードすると、グラフ・ロード操作の進行状況をモニターできます。

次の表に、次の形式でサポートされる非同期グラフ・ロードAPIを示します。

表15-3 非同期グラフ・ロードAPI

データ形式 API
PGビュー session.readGraphByNameAsync()
PGスキーマ session.readGraphWithPropertiesAsync()
CSV session.readGraphFileAsync()

これらのサポートされているAPIは、PgxFutureオブジェクトを戻します。

その後、PgxFuture.getProgress()メソッドを使用して次の統計を収集できます。

  • グラフ・ロード操作の進行状況に関するレポート
  • メモリーにロードする必要がある残りの頂点およびエッジの見積り

たとえば、次のコードは、PGビュー・グラフを非同期にロードし、その後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オブジェクトは、一連の非同期操作で使用しないことをお薦めします。