4.4 同じSCNでのエンティティ・プロバイダの読取り
複数の頂点表またはエッジ表、あるいはその両方で構成されるグラフがある場合は、同じシステム変更番号(SCN)の頂点とエッジをすべて読み取ることができます。これは、一部のエッジが欠落した頂点を参照している可能性があるため、頂点が読み取られたSCNよりも後のSCNでエッジ・プロバイダが読み取られるなどの問題を克服するのに役立ちます。
Oracle Databaseでフラッシュバックが有効になっていない場合でも、データベースからグラフを読み取ることができることに注意してください。複数のデータベースの場合、SCNを使用して、同じデータベースに属するエンティティ・プロバイダのみの一貫性を維持できます。
グラフ構成でas_of
フラグを使用して、エンティティ・プロバイダを読み取るSCNを指定できます。as_of
フラグの有効な値は次のとおりです。
表4-5 グラフ構成の"as_of"キーの有効な値
値 | 説明 |
---|---|
正のlong 値
|
これは解析可能なSCN値です。 |
"<current-scn>" |
現在のSCNは、グラフ・ロードの開始時に決定されます。 |
"<no-scn>" |
これは、グラフのロード時にSCNを無効化するためのものです。 |
null |
これにより、"<current-scn>" の動作がデフォルトになります。
|
グラフ構成ファイルの頂点プロバイダまたはエッジ・プロバイダに対して"as_of"
を省略すると、"as_of": null
と同じ動作になります。
例4-4 同じデータベース内の頂点プロバイダおよびエッジ・プロバイダに"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で読み取られます。これを次の表に示します。
表4-6 "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")
親トピック: グラフ・サーバー(PGX)の使用