27.6.1.1 KEYS_AS_IDS Strategy

KEYS_AS_IDS strategy implies that IDs are based on user-provided keys. In this case, IDs must be globally unique across the entire graph.

The following example creates a partitioned graph using the createGraphBuilder API with USER_IDS generation strategy for vertices and edges. Also, the graph is configured to retain vertex and edge IDs without partitioning them.

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")

As seen in the preceding example, the vertex IDs 1 and 2 are globally unique across the graph. Also, the edge ID is 1, which is unique in the graph.

The following shows an example for querying the graph created in the previous example:

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