12.2 グラフの公開
単一のグラフ・スナップショットの公開
publish()
メソッドを使用して、グラフの現在選択されているスナップショットを公開できます。
ノート:
引数を指定せずにpublish()
をコールすると、スナップショットはその永続プロパティとともに公開されますが、一時プロパティは公開されません。
publish()
メソッドは失敗し、例外が発生します。
ノート:
スナップショットとともに公開されたグラフと、公開された単一のスナップショットは同じネームスペースを共有します。 たとえば、publish()
メソッドを使用してグラフを公開するには、例4-1を参照してください。
特定の一時プロパティを公開する場合は、publish()
のコール内でそれらをリストする必要があります。
opg4j> var prop1 = graph.createVertexProperty(PropertyType.INTEGER, "prop1")
opg4j> prop.fill(0)
opg4j> var cost = graph.createEdgeProperty(PropertyType.DOUBLE, "cost")
opg4j> cost.fill(0d)
opg4j> graph.publish(List.of(prop1), List.of(cost))
VertexProperty<Integer, Integer> prop1 = graph.createVertexProperty(PropertyType.INTEGER, "prop1");
prop.fill(0);
EdgeProperty<Double> cost = graph.createEdgeProperty(PropertyType.DOUBLE, "cost");
cost.fill(0d);
List<VertexProperty<Integer, Integer> vertexProps = Arrays.asList(prop);
List<EdgeProperty<Double>> edgeProps = Arrays.asList(cost);
graph.publish(vertexProps, edgeProps);
prop = graph.create_vertex_property("integer", "prop1")
prop.fill(0)
cost = graph.create_edge_property("double", "cost")
cost.fill(0d)
vertex_props = [prop]
edge_props = [cost]
graph.publish(vertex_props, edge_props)
スナップショットを含むグラフの公開
グラフのすべてのスナップショットを他のセッションから参照できるようにする場合は、かわりにpublishWithSnapshots()
メソッドを使用します。グラフがスナップショットとともに公開されると、各スナップショットのGraphMetaData
情報も他のセッションで使用できるようになります。ただし、null
であるグラフ構成は除きます。
公開により、すべてのスナップショットの永続プロパティもすべて公開され、他のセッションから参照できるようになりますが、一時プロパティはセッションに対してプライベートであるため、明示的に公開する必要があります。公開されると、すべてのプロパティが読取り専用になります。したがって、引数を指定せずにpublishWithSnapshots()
をコールすると、一時プロパティは公開されません。
publishWithSnapshots()
メソッドによって、セッションに対してプライベートなネームスペースからパブリック・ネームスペースにグラフ名が移動します(ネームスペースの詳細は、ネームスペースと共有を参照してください)。同じ名前を持つグラフがすでに公開されている場合、publishWithSnapshots()
メソッドは失敗し、例外が発生します。
特定の一時プロパティを公開する場合は、次の例のように、publishWithSnapshots()
のコール内でそれらをリストします。
opg4j> var prop1 = graph.createVertexProperty(PropertyType.INTEGER, "prop1")
opg4j> prop.fill(0)
opg4j> var cost = graph.createEdgeProperty(PropertyType.DOUBLE, "cost")
opg4j> cost.fill(0d)
opg4j> graph.publishWithSnapshots(List.of(prop1), List.of(cost))
VertexProperty<Integer, Integer> prop1 = graph.createVertexProperty(PropertyType.INTEGER, "prop1");
prop.fill(0);
EdgeProperty<Double> cost = graph.createEdgeProperty(PropertyType.DOUBLE, "cost");
cost.fill(0d);
List<VertexProperty<Integer, Integer> vertexProps = Arrays.asList(prop);
List<EdgeProperty<Double>> edgeProps = Arrays.asList(cost);
graph.publishWithSnapshots(vertexProps,edgeProps);
VertexProperty<Integer, Integer> prop1 = graph.createVertexProperty(PropertyType.INTEGER, "prop1")
prop.fill(0)
EdgeProperty<Double> cost = graph.createEdgeProperty(PropertyType.DOUBLE, "cost")
cost.fill(0d)
List<VertexProperty<Integer, Integer> vertexProps = Arrays.asList(prop)
List<EdgeProperty<Double>> edgeProps = Arrays.asList(cost)
graph.publishWithSnapshots(vertexProps,edgeProps)
ノート:
公開されたプロパティは、元の一時プロパティと同様に、それらが作成された特定のスナップショットに関連付けられているため、他のスナップショットでは参照できません。別のセッションからの公開済グラフの参照
他のセッションは、セッション・オブジェクトのgetGraph()
メソッドを介して、公開済グラフを名前で参照できます。
次の例では、session1
の公開済グラフmyGraph
をsession2
で参照します。
opg4j> var session2 = instance.createSession("session2")
opg4j> var graph2 = session2.getGraph(Namespace.PUBLIC, "myGraph")
PgxSession session2 = instance.createSession("session2");
PgxGraph graph2 = session2.getGraph(Namespace.PUBLIC, "myGraph");
session2 = pypgx.get_session("session2");
PgxGraph graph2 = session2.get_graph("myGraph")
session2
は、公開済スナップショットのみを参照できます。グラフがスナップショットなしで公開されている場合、session2
のgetAvailableSnapshots()
メソッドへのコールによって空のキューが返されます。
getGraph()
へのコールによって、使用可能な最新のスナップショットが返されます。session2
は、getAvailableSnapshots()
を介して使用可能なすべてのスナップショットを参照し、PgxSession
のsetSnapshot()
メソッドを介して特定のものを設定できます。
ノート:
参照するそれぞれのグラフは、必要でなくなったら必ず解放するようにしてください。詳細は、グラフの削除を参照してください。プロパティの公開
(単一のスナップショットまたはそれらをすべて)公開した後も、一時プロパティを個々に公開できます。
opg4j> graph.getVertexProperty("prop1").publish()
opg4j> graph.getEdgeProperty("cost").publish()
graph.getVertexProperty("prop1").publish();
graph.getEdgeProperty("cost").publish();
graph.get_vertex_property("prop1").publish()
graph.get_edge_property("cost").publish()
ノート:
公開されたプロパティは、それらが作成された特定のスナップショットに関連付けられているため、そのスナップショットでのみ参照できます。別のセッションでの公開済プロパティの取得
公開済グラフ(スナップショットありでもなしでも)を参照するセッションは、PgxGraph
の通常のgetVertexProperty
およびgetEdgeProperty
のコールを介して公開済プロパティを参照できます。
opg4j> var session2 = instance.createSession("session2")
opg4j> var graph2 = session2.getGraph(Namespace.PUBLIC, "myGraph")
opg4j> var vertexProperty = graph2.getVertexProperty("prop1")
opg4j> var edgeProperty = graph2.getEdgeProperty("cost")
PgxSession session2 = instance.createSession("session2");
PgxGraph graph2 = session2.getGraph(Namespace.PUBLIC, "myGraph");
VertexProperty<Integer, Integer> vertexProperty = graph2.getVertexProperty("prop1");
EdgeProperty<Double> edgeProperty = graph2.getEdgeProperty("cost");
session2 = pypgx.get_session(session_name ="session2")
graph2 = session2.get_graph("myGraph")
vertex_property = graph2.get_vertex_property("prop1")
edge_property = graph2.get_edge_property("cost")
session2
は、myGraph
というsession1
の公開済グラフへの参照を持つようになり、myGraph
自体を介してその公開済プロパティを参照できます。
公開済グラフの固定
公開済グラフは、セッションで使用されない場合でも公開されたままになるように固定できます。
opg4j> graph.pin()
graph.pin();
>>> graph.pin()
公開済グラフの固定解除
以前に固定された公開済グラフの固定を解除できます。これにより、グラフとそのすべてのスナップショット(他のセッションでグラフのスナップショットを使用していない場合)を削除できます。
opg4j> var graph = session.getGraph("bank_graph_analytics")
graph ==> PgxGraph[name=bank_graph_analytics,N=999,E=4993,created=1660217577201]
opg4j> graph.unpin()
PgxGraph graph = session.getGraph("bank_graph_analytics");
graph.unpin();
>>> graph = session.get_graph("bank_graph_analytics")
>>> graph.unpin()
親トピック: グラフ管理