5.4.14 Building an In-Memory Graph
In addition to Store the Database Password in a Keystore, you can create an in-memory graph programmatically. This can simplify development when the size of graph is small or when the content of the graph is highly dynamic. The key Java class is GraphBuilder
, which can accumulate a set of vertices and edges added with the addVertex
and addEdge
APIs. After all changes are made, an in-memory graph instance (PgxGraph
) can be created by the GraphBuilder
.
The following Java code snippet illustrates a graph construction flow. Note that there are no explicit calls to addVertex
, because any vertex that does not already exist will be added dynamically as its adjacent edges are created.
import oracle.pgx.api.*;
PgxSession session = Pgx.createSession("example");
GraphBuilder<Integer> builder = session.createGraphBuilder();
builder.addEdge(1, 2);
builder.addEdge(2, 3);
builder.addEdge(2, 4);
builder.addEdge(3, 4);
builder.addEdge(4, 2);
PgxGraph graph = builder.build();
To construct a graph with vertex properties, you can use setProperty
against the vertex objects created.
PgxSession session = Pgx.createSession("example");
GraphBuilder<Integer> builder = session.createGraphBuilder();
builder.addVertex(1).setProperty("double-prop", 0.1);
builder.addVertex(2).setProperty("double-prop", 2.0);
builder.addVertex(3).setProperty("double-prop", 0.3);
builder.addVertex(4).setProperty("double-prop", 4.56789);
builder.addEdge(1, 2);
builder.addEdge(2, 3);
builder.addEdge(2, 4);
builder.addEdge(3, 4);
builder.addEdge(4, 2);
PgxGraph graph = builder.build();
To use long integers as vertex and edge identifiers, specify IdType.LONG
when getting a new instance of GraphBuilder
. For example:
import oracle.pgx.common.types.IdType;
GraphBuilder<Long> builder = session.createGraphBuilder(IdType.LONG);
During edge construction, you can directly use vertex objects that were previously created in a call to addEdge
.
v1 = builder.addVertex(1).setProperty("double-prop", 0.5)
v2 = builder.addVertex(2).setProperty("double-prop", 2.0)
builder.addEdge(v1, v2)
As with vertices, edges can have properties. The following example sets the edge label by using setLabel
:
builder.addEdge(v1, v2).setProperty("edge-prop", "edge_prop_1_2").setLabel("label")
Parent topic: Using Java APIs for Property Graph Data