15.7.3 Creating a Snapshot via ChangeSet

You can create a graph snapshot with ChangeSet via the PGX Java API. When you want to create the graph from a persistent data source, you can use PgxSession.readGraphWithProperties() with the snapshots_source configuration option set to CHANGE_SET.

You can create a snapshot via ChangeSet by performing the following steps:

  1. Create a snapshot of a transient graph from database:
    Creating a Graph Snapshot Using JShell
    opg4j> String statement = 
    ...>   "CREATE PROPERTY GRAPH bank_graph "
    ...> + "VERTEX TABLES ( BANK_NODES as ACCOUNTS "
    ...> + "KEY (ID) "
    ...> + "LABEL ACCOUNTS "
    ...> + "PROPERTIES (ID, LABEL) "
    ...> + ") "
    ...> + "EDGE TABLES ( BANK_EDGES_AMT "
    ...> + "KEY (SRC_ID, DEST_ID, AMOUNT) "
    ...> + "SOURCE KEY (SRC_ID) REFERENCES ACCOUNTS "
    ...> + "DESTINATION KEY (DEST_ID) REFERENCES ACCOUNTS "
    ...> + "LABEL TRANSFERS "
    ...> + "PROPERTIES (SRC_ID, DEST_ID, AMOUNT, LABEL) "
    ...> + ") ";
    statement ==> "CREATE PROPERTY GRAPH bank_graph VERTEX TABLES ( BANK_NODES as ACCOUNTS KEY (ID) LABEL ACCOUNTS PROPERTIES (ID, LABEL) ) EDGE TABLES ( BANK_EDGES_AMT KEY (SRC_ID, DEST_ID, AMOUNT) SOURCE KEY (SRC_ID) REFERENCES ACCOUNTS DESTINATION KEY (DEST_ID) REFERENCES ACCOUNTS LABEL TRANSFERS PROPERTIES (SRC_ID, DEST_ID, AMOUNT, LABEL) ) "
    opg4j> session.executePgql(statement);
    opg4j> session.getGraph("bank_graph");
    
    Creating a Graph Snapshot Using Java
    import oracle.pgx.api.*;
    pgqlStmt = pgqlConn.createStatement();
    String pgql = "CREATE PROPERTY GRAPH " + bank_graph + " "+
    "VERTEX TABLES ( BANK_NODES as ACCOUNTS " +
    "KEY (ID) " +
    "LABEL ACCOUNTS " +
    "PROPERTIES (ID, LABEL) " +
    ") " +
    "EDGE TABLES ( BANK_EDGES_AMT " +
    "KEY (SRC_ID, DEST_ID, AMOUNT) " +
    "SOURCE KEY (SRC_ID) REFERENCES ACCOUNTS " +
    "DESTINATION KEY (DEST_ID) REFERENCES ACCOUNTS " +
    "LABEL TRANSFERS " +
    "PROPERTIES (SRC_ID, DEST_ID, AMOUNT, LABEL) " +
    ")";
    pgqlStmt.execute(pgql);
  2. Create a ChangeSet from graph and populate it. The following example shows adding a new edge between vertices 1 and 4:
    Creating a ChangeSet Using JShell
    opg4j> var changeSet = graph.<Integer>createChangeSet()
    opg4j> changeSet.addEdge(6, 1, 4)
    Creating a ChangeSet Using Java
    import oracle.pgx.api.*;
    GraphChangeSet<Integer> changeSet = graph.createChangeSet();
    changeSet.addEdge(6, 1, 4);
    Creating a ChangeSet Using Python
    changeSet = graph.create_change_set()changeSet.add_edge(1,4,6)
  3. Create a second snapshot using GraphChangeSet.buildNewSnapshot() as shown in the following code:
    Creating a ChangeSet with GraphChangeSet API Using JShell
    opg4j> var secondSnapshot = changeSet.buildNewSnapshot()
    opg4j> session.getAvailableSnapshots(secondSnapshot).size()
    ==> 2
    Creating a ChangeSet with GraphChangeSet API Using Java
    PgxGraph secondSnapshot = changeSet.buildNewSnapshot();
    System.out.println( session.getAvailableSnapshots(secondSnapshot).size() );
    Creating a ChangeSet with GraphChangeSet API Using Python
    second_snapshot = change_set.build_new_snapshot()
    print(len(session,get_available_snapshots()))

Thus two snapshots, referenced via the variables graph and secondSnapshot are created.