15.7.3 ChangeSetを使用したスナップショットの作成

PGX Java APIを介して、ChangeSetを使用してグラフ・スナップショットを作成できます。永続データ・ソースからグラフを作成する場合は、snapshots_source構成オプションをCHANGE_SETに設定して、PgxSession.readGraphWithProperties()を使用できます。

ChangeSetを使用してスナップショットを作成するには、次のステップを実行します。

  1. データベースから一時的なグラフのスナップショットを作成します。
    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");
    
    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. graphからChangeSetを作成し、移入します。次の例は、頂点1と4の間に新しいエッジを追加する方法を示しています。
    JShellを使用したChangeSetの作成
    opg4j> var changeSet = graph.<Integer>createChangeSet()
    opg4j> changeSet.addEdge(6, 1, 4)
    Javaを使用したChangeSetの作成
    import oracle.pgx.api.*;
    GraphChangeSet<Integer> changeSet = graph.createChangeSet();
    changeSet.addEdge(6, 1, 4);
    Pythonを使用したChangeSetの作成
    changeSet = graph.create_change_set()changeSet.add_edge(1,4,6)
  3. 次のコードに示すように、GraphChangeSet.buildNewSnapshot()を使用して2つ目のスナップショットを作成します。
    JShellを使用したGraphChangeSet APIによるChangeSetの作成
    opg4j> var secondSnapshot = changeSet.buildNewSnapshot()
    opg4j> session.getAvailableSnapshots(secondSnapshot).size()
    ==> 2
    Javaを使用したGraphChangeSet APIによるChangeSetの作成
    PgxGraph secondSnapshot = changeSet.buildNewSnapshot();
    System.out.println( session.getAvailableSnapshots(secondSnapshot).size() );
    Pythonを使用したGraphChangeSet APIによるChangeSetの作成
    second_snapshot = change_set.build_new_snapshot()
    print(len(session,get_available_snapshots()))

このようにして、変数graphおよびsecondSnapshotを介して参照される2つのスナップショットが作成されます。