26.1 グラフ・サーバー(PGX) APIの設計
このガイドでは、グラフ・サーバー(PGX) APIの設計に焦点を当てています。
- 複数のクライアントがPGXの実行中の単一インスタンスに同時にアクセスして、そのリソースを共有する場合があります。各クライアントは、独自の分離されたワークスペース(セッション)を保持する必要があります。
- グラフおよびプロパティ・データのサイズは大きくなる可能性があるため、データはサーバー側にのみ置かれます。
- グラフ分析によっては、非常に長い時間がかかる可能性があります。
- クライアントが、PGXと同じアドレス空間(JVM)に存在することはできません。実際に、クライアントをJavaアプリケーションにすることもできません。
クライアント・セッション
PGXでは、各クライアントは、独自のセッション(分離されたプライベート・ワークスペース)を保持します。したがって、クライアントはまず、分析を実行する前に、PGX ServerInstance
からPgxSession
オブジェクトを取得する必要があります。
非同期実行
PGX APIは非同期実行用に設計されています。つまり、PGX APIの計算集中型の各メソッドは、リクエストの終了を待機することなく、即時にPgxFuture
オブジェクトを返します。PgxFuture
クラスは、Futureインタフェースを実装しており、これを使用すると、将来のある時点での計算結果を取得できます。
ノート:
この設計の非同期実行の側面により、複数の(リモート)クライアントでの単一サーバーへのリクエストの送信が容易になります。いずれかのクライアントからのリクエストが、PGXリソースが使用可能になるまで待機するためにキューに入れられる可能性があります。非同期APIでは、PGXでリクエストが完了するまで、クライアント(またはコール側スレッド)は他のタスクを処理できます。直接参照なし
PGX APIは、PGX内部オブジェクト(グラフやそのプロパティなど)を直接参照するオブジェクトをクライアントに返しません。理由は次のとおりです。
- クライアントが、サーバーと同じJVMに存在しない場合があります
- グラフ・インスタンスが、複数のクライアントによって共有されている場合があります
かわりに、PGX APIは、軽量でステートレスなポインタ・オブジェクトのみをこれらのオブジェクトに返します。これらのポインタ・オブジェクトには、それらが指しているサーバー側のオブジェクトのID(name)
のみが保持されています。
リソース管理に関する考慮事項
グラフ・サーバー(PGX)はインメモリー分析エンジンであり、クライアントのグラフ・データを保持するために大量のメモリーを割り当てる可能性があります。したがって、クライアント・セッションの終了時には、そのリソースをクリーンアップすることが重要です。PGX APIでは、これを容易にする複数の機能がサポートされています。
- サーバー側リソースを指しているPGX APIによって返されるすべてのオブジェクトは、
Destroyable
インタフェースを実装するため、メモリーを消費するすべてのクライアント側オブジェクトを同じ方法で破棄できます。たとえば:PgxGraph myGraph = ... myGraph.destroyAsync(); // request destruction of myGraph, don't wait for response try { myGraph.destroy(); // blocks caller thread until destruction was done } catch (ExecutionException e) { // destruction failed }
Destroyable
はAutoClosableを拡張するため、ユーザーはJavaの組込みリソース管理構文を利用できます。try (PgxGraph myGraph = session.readGraphWithProperties(config)) { // do something with myGraph } // myGraph is destroyed
- セッションのタイムアウト。場合によっては、PGXサーバーにより、セッションとそのすべてのデータが自動的に削除されます。このことは、クライアントがデータまたはそのセッションの破棄に失敗した場合や、構成可能なタイムアウトが経過した後にセッションから通知がなかった場合に発生する可能性があります。タイムアウト・パラメータの構成の詳細は、グラフ・サーバー(PGX)エンジンの構成パラメータを参照してください。
親トピック: PGXプログラミング・ガイド