27.6.1.2 PARTITIONED_IDS方針

PARTITIONED_IDS方針とは、IDが、ラベル名とユーザーが指定したキーまたは自動生成されたキーを組み合せることで作成されるということです。したがって、IDの一意性要件は、グラフの作成後にラベル・レベルで適用されます。

ただし、グラフ作成時にGraphBuilder APIによってすべてのID (ユーザーが指定したキーまたは自動生成されたキー)が強制的に一意になることに注意してください。

次の例では、頂点とエッジについてUSER_IDS生成方針を指定してcreateGraphBuilder APIを使用し、パーティション化されたグラフを作成します。また、このグラフを、頂点IDとエッジIDを保持しパーティション化するように構成します。

opg4j> var builder = session.createGraphBuilder()

opg4j> builder.setVertexIdGenerationStrategy(IdGenerationStrategy.USER_IDS).  // Using user-provided IDs for vertices
       setEdgeIdGenerationStrategy(IdGenerationStrategy.USER_IDS).            // Using user-provided IDs for edges
       setRetainVertexIds(true).                                              // Retain user-provided vertex IDs (enabled by default)
       setRetainEdgeIds(true).                                                // Retain user-provided edge IDs (enabled by default)
       partitionedVertexIds(true).                                            // Partition vertex IDs
       partitionedEdgeIds(true)                                               // Partition edge IDs
opg4j> builder.addVertex(1).addLabel("Person").setProperty("name", "Alice")
opg4j> builder.addVertex(2).addLabel("Account").setProperty("IBAN", "12345")
opg4j> builder.addEdge(1, 1, 2).setLabel("Owns") // (edge ID, source vertex ID, destination vertex ID)
 
opg4j> var graph = builder.build("Graph_PartitionedIds")
GraphBuilder<Integer> builder = session.createGraphBuilder();

 builder.setVertexIdGenerationStrategy(IdGenerationStrategy.USER_IDS) // Using user-provided IDs for vertices
  .setEdgeIdGenerationStrategy(IdGenerationStrategy.USER_IDS)         // Using user-provided IDs for edges
  .setRetainVertexIds(true)                                           // Retain user-provided vertex IDs (enabled by default)
  .setRetainEdgeIds(true)                                             // Retain user-provided edge IDs (enabled by default)
  .partitionedVertexIds(true)                                         // Partition vertex IDs
  .partitionedEdgeIds(true);                                          // Partition edge IDs
     
 builder.addVertex(1).addLabel("Person").setProperty("name", "Alice");
 builder.addVertex(2).addLabel("Account").setProperty("IBAN", "12345");
 builder.addEdge(1, 1, 2).setLabel("Owns");                          // (edge ID, source vertex ID, destination vertex ID)
 
 PgxGraph graph = builder.build("Graph_PartitionedIds");
>>> builder = session.create_graph_builder(vertex_id_generation_strategy='user_ids',
...                                        edge_id_generation_strategy='user_ids')
>>> builder.set_retain_vertex_ids(True)
>>> builder.set_retain_edge_ids(True)
>>> builder.partitioned_edge_ids(True)
>>> builder.partitioned_vertex_ids(True)
>>> builder.add_vertex(1).add_label("Person").set_property("name", "Alice")
>>> builder.add_vertex(2).add_label("Account").set_property("IBAN", "12345")
>>> builder.add_edge(1, 2, 1).set_label("Owns") # (source vertex ID, destination vertex ID, edge ID)
>>> graph = builder.build(name="Graph_PartitionedIds")

前述の例で示しているように、頂点ID 12は、グラフ全体でグローバルに一意です。また、エッジID 1はグラフ内で一意です。

次に、ラベル名とIDの組合せを使用して頂点とエッジを取得する例を示します。

opg4j> var alice = graph.getVertex("Person(1)")           // Retrieves Alice
opg4j> var account = graph.getVertex("Account(2)")        // Retrieves the Account
opg4j> var owns = graph.getEdge("Owns_Person_Account(1)") // Retrieves the edge
PgxVertex<String> alice = graph.getVertex("Person(1)");   // Retrieves Alice
PgxVertex<String> account = graph.getVertex("Account(2)");        // Retrieves the Account
PgxEdge<String> owns = graph.getEdge("Owns_Person_Account(1)");  // Retrieves the edge
>>> graph.get_vertex("Person(1)")
>>> graph.get_vertex("Account(2)")
>>> graph.get_edge("Owns_Person_Account(1)")