27.6.1.1 KEYS_AS_IDS方針

KEYS_AS_IDS方針とは、IDが、ユーザーが指定したキーに基づいているということです。この場合、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(false).                                           // Do not partition vertex IDs (disabled by default).
       partitionedEdgeIds(false)                                              // Do not partition edge IDs (disabled by default).
       
opg4j> builder.addVertex(1).addLabel("Persons").setProperty("name", "Alice")
opg4j> builder.addVertex(2).addLabel("Persons").setProperty("name", "Bob")
opg4j> builder.addEdge(1, 1, 2).setLabel("Knows")       // (edge ID, source vertex ID, destination vertex ID)
 
opg4j> var graph = builder.build("Graph_KeysAsIds")
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(false)                                       // Do not partition vertex IDs (disabled by default)
   .partitionedEdgeIds(false);                                        // Do not partition edge IDs (disabled by default)
     
 builder.addVertex(1).addLabel("Person").setProperty("name", "Alice");
 builder.addVertex(2).addLabel("Person").setProperty("name", "Bob");
 builder.addEdge(1, 1, 2).setLabel("Knows");       // (edge ID, source vertex ID, destination vertex ID)
 
 PgxGraph graph = builder.build("Graph_KeysAsIds");
>>> 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(False)
>>> builder.partitioned_vertex_ids(False)
>>> builder.add_vertex(1).add_label("Persons").set_property("name", "Alice")
>>> builder.add_vertex(2).add_label("Persons").set_property("name", "Bob")
>>> builder.add_edge(1, 2, 1).set_label("knows") #(source vertex ID, destination vertex ID, edge ID)
>>> graph = builder.build(name="Graph_KeysAsIds")

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

次に、前の例で作成したグラフを問い合せる例を示します:

opg4j> var alice = graph.getVertex(1) // Retrieves the vertex with ID 1 (Alice)
opg4j> var knows = graph.getEdge(1)   // Retrieves the edge with ID 1
PgxVertex<Integer> alice = graph.getVertex(1);  // Retrieves the vertex with ID 1 (Alice)
PgxEdge<Integer> knows = graph.getEdge(1);      // Retrieves the edge with ID 1
graph.get_vertex(1) # Retrieves the vertex with ID 1 (Alice)
graph.get_edge(1)   # Retrieves the edge with ID 1