16.2.1.1 同じSCNでのエンティティ・プロバイダの読取り
複数の頂点表またはエッジ表、あるいはその両方で構成されるグラフがある場合は、同じシステム変更番号(SCN)の頂点とエッジをすべて読み取ることができます。
これは、一部のエッジが欠落した頂点を参照している可能性があるため、頂点が読み取られたSCNよりも後のSCNでエッジ・プロバイダが読み取られるなどの問題を克服するのに役立ちます。
Oracle Databaseでフラッシュバックが有効になっていない場合でも、データベースからグラフを読み取ることができることに注意してください。複数のデータベースの場合、SCNを使用して、同じデータベースに属するエンティティ・プロバイダのみの一貫性を維持できます。
グラフ構成でas_ofフラグを使用して、エンティティ・プロバイダを読み取るSCNを指定できます。as_ofフラグの有効な値は次のとおりです。
               
表16-1 グラフ構成での"as_of"キーの有効値
| 値 | 説明 | 
|---|---|
| 正の long値 | これは解析可能なSCN値です。 | 
| "<current-scn>" | 現在のSCNは、グラフ・ロードの開始時に決定されます。 | 
| "<no-scn>" | これは、グラフのロード時にSCNを無効化するためのものです。 | 
| null | これにより、 "<current-scn>"の動作がデフォルトになります。 | 
グラフ構成ファイルの頂点プロバイダまたはエッジ・プロバイダに対して"as_of"を省略すると、"as_of": nullと同じ動作になります。
               
例16-1 同じデータベース内の頂点プロバイダおよびエッジ・プロバイダに"as_of"を使用したグラフ構成
                  
次の設定例では、3つの頂点プロバイダと1つのエッジ・プロバイダが同じデータベースを指しています。
{
  "name": "employee_graph",
  "vertex_providers": [
    {
      "name": "Department",
      "as_of": "<current-scn>",
      "format": "rdbms",
      "database_table_name": "DEPARTMENTS",
      "key_column": "DEPARTMENT_ID",
      "props": [
        {
          "name": "DEPARTMENT_NAME",
          "type": "string"
        }
      ]
    },
    {
      "name": "Location",
      "as_of": "28924323",
      "format": "rdbms",
      "database_table_name": "LOCATIONS",
      "key_column": "LOCATION_ID",
      "props": [
        {
          "name": "CITY",
          "type": "string"
        }
      ]
    },
    {
      "name": "Region",
      "as_of": "<no-scn>",
      "format": "rdbms",
      "database_table_name": "REGIONS",
      "key_column": "REGION_ID",
      "props": [
        {
          "name": "REGION_NAME",
          "type": "string"
        }
      ]
    }
  ],
  "edge_providers": [
    {
      "name": "LocatedAt",
      "format": "rdbms",
      "database_table_name": "DEPARTMENTS",
      "key_column": "DEPARTMENT_ID",
      "source_column": "DEPARTMENT_ID",
      "destination_column": "LOCATION_ID",
      "source_vertex_provider": "Department",
      "destination_vertex_provider": "Location"
    }
  ]
}前述の構成ファイルを使用してemployee_graphを読み取る場合、グラフはDepartmentおよびLocatedAtエンティティ・プロバイダの同じSCNで読み取られます。これを次の表に示します。 
                  
表16-2 "as_of"を使用したシナリオの例
| エンティティ・プロバイダ | "as_of" | SCN値 | 
|---|---|---|
| Department | "<current-scn>" | SCNが自動的に決定される | 
| Location | "28924323" | "28924323"をSCNとして使用 | 
| Region | "<no-scn>" | SCNの使用なし | 
| LocatedAt | "as_of"フラグが省略 | SCNが自動的に決定される | 
データベースの現在のSCN値は、次のいずれかのオプションを使用して決定されます。
- V$DATABASEビューの問合せ:- SELECT CURRENT_SCN FROM V$DATABASE;
- DBMS_FLASHBACKパッケージの使用:- SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;
前述の操作のいずれかを実行するために必要な権限がない場合は、次を使用できます。
SELECT TIMESTAMP_TO_SCN(SYSDATE) FROM DUAL;ただし、このオプションは前述の2つのオプションよりも正確ではありません。
次のようにJSON構成ファイルを使用して、グラフをグラフ・サーバーに読み取ることができます。
opg4j> var g = session.readGraphWithProperties("employee_graph.json")PgxGraph g = session.readGraphWithProperties("employee_graph.json");g = session.read_graph_with_properties("employee_graph.json")