16.3.1 Oracle Databaseからグラフ・サーバー(PGX)へのグラフの読込み

グラフ・サーバー(PGX)にログインすると、データベースからグラフ・サーバーにグラフを読み込むことができます。

データベース・ユーザーが存在し、データベースのグラフ・データに対する読取りアクセス権を持っている必要があります。

グラフのロードでは、次のオプションがサポートされています。

SQLプロパティ・グラフ
PGQLプロパティ・グラフ

また、次の項を参照してください:

16.3.1.1 グラフの遅延ロードの有効化

Graph Server and Clientリリース24.3以降では、データベース・グラフの遅延ロードを有効にできます。

遅延ロードを有効にすると、PGQL問合せでグラフに初めてアクセスしたときに、グラフが自動的にグラフ・サーバー(PGX)にロードされます。これは、グラフが事前にグラフ・サーバー(PGX)にロードされていなくても、PgxSessionインスタンスからPGQL問合せを実行できることを意味します。ただし、次に示すように、ON句を使用してグラフ名を指定してください:

opg4j> session.queryPgql("SELECT x.* FROM MATCH (x) ON <graph_name>")
session.queryPgql("SELECT x.* FROM MATCH (x) ON <graph_name>");
session.query_pgql("SELECT x.* FROM MATCH (x) ON <graph_name>")

また、グラフをグラフ・サーバー(PGX)メモリーに遅延ロードする場合は、次の詳細にも注意してください:

  • 遅延ロード機能を使用するには、pgx.confファイルのallow_lazy_loading_for_database_graphs構成フィールドを追加して(まだ追加されていない場合)、有効にする必要があります。
    {
         "allow_lazy_loading_for_database_graphs": true
    }
  • グラフがデータベースに存在する場合、グラフは名前でロードされます。名前によるグラフのロードは、pgx.confファイルのpgx_realmオプションに指定されているデータベース資格証明に依存します。
  • ロードは、グラフがグラフ・サーバー(PGX)のメモリーにまだロードされていない場合にのみ行われます。
  • 遅延ロードは、PGQLとSQLの両方のプロパティ・グラフでサポートされています。グラフ・サーバー(PGX)は、最初にSQLプロパティ・グラフとしてグラフをロードしようとします。これが存在しない場合、グラフはPGQLプロパティ・グラフとしてロードされます。
  • グラフおよび基礎となるデータ・ソース表に対するREAD権限が必要です。
  • 遅延ロードされたグラフはセッションの依存性として追加され、定期的な権限チェックがグラフに対して実行されます。
  • 次のAPIは、最初の使用時にグラフの遅延ロードをサポートしています:
    • PgxSession.queryPgql
    • PgxSession.executePgql
    • PgxSession.preparePgql
    • PgxSession.explainPgql

次の例では、グラフの遅延ロードをトリガーする様々な問合せを示します。この例では、allow_lazy_loading_for_database_graphsが有効で、MY_GRAPHがデータベースに存在し、グラフ・サーバー(PGX)メモリーにまだロードされていないことを前提としています。

opg4j> session.queryPgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH")
opg4j> session.preparePgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH WHERE x.age = ?")
opg4j> session.executePgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH")
opg4j> session.explainPgql("SELECT x.name, x.* FROM MATCH (x) ON MY_GRAPH")
session.queryPgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH");
session.preparePgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH WHERE x.age = ?");
session.executePgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH");
session.explainPgql("SELECT x.name, x.* FROM MATCH (x) ON MY_GRAPH");
session.query_pgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH")
session.prepare_pgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH WHERE x.age = ?")
session.execute_pgql("SELECT x.name FROM MATCH (x) ON MY_GRAPH")
session.explain_pgql("SELECT x.name, x.* FROM MATCH (x) ON MY_GRAPH")

16.3.1.2 同じ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")

16.3.1.3 グラフ・ロードの進捗レポートおよび見積り

大規模なグラフをグラフ・サーバー(PGX)にロードすると、長時間実行される操作になることがあります。ただし、非同期アクションを使用してグラフをロードすると、グラフ・ロード操作の進行状況をモニターできます。

次の表に、次の形式でサポートされる非同期グラフ・ロードAPIを示します。

表16-3 非同期グラフ・ロードAPI

データ形式 API
PGQLプロパティ・グラフ session.readGraphByNameAsync()
CSV session.readGraphFileAsync()

これらのサポートされているAPIは、PgxFutureオブジェクトを戻します。

その後、PgxFuture.getProgress()メソッドを使用して次の統計を収集できます。

  • グラフ・ロード操作の進行状況に関するレポート
  • メモリーにロードする必要がある残りの頂点およびエッジの見積り

たとえば、次のコードは、PGQLプロパティ・グラフを非同期にロードし、その後FutureProgressオブジェクトを取得してロードの進行状況をレポートおよび見積るステップを示しています。ただし、グラフ・ロードの見積り(ロードされたエンティティおよびプロバイダの数、エンティティおよびプロバイダの合計数など)は、グラフのロード操作が進行中になるまでしか取得できません。また、グラフ・サーバー(PGX)にロードされるエンティティの10000エントリごとにグラフ・ロードの進行状況がシステムによって内部的に計算します。

opg4j>  var graphLoadingFuture = session.readGraphByNameAsync("BANK_GRAPH", GraphSource.PG_PGQL)
readGraphFuture ==> oracle.pgx.api.PgxFuture@6106dfb6[Not completed]

opg4j> while (!graphLoadingFuture.isDone()) {
...>   var progress = graphLoadingFuture.getProgress();
...>   var graphLoadingProgress = progress.asGraphLoadingProgress();
...>   if (graphLoadingProgress.isPresent()) {
...>     var numLoadedVertices = graphLoadingProgress.get().getNumLoadedVertices();
...>   }
...>   Thread.sleep(1000);
...> }

opg4j> var graph = graphLoadingFuture.get();
graph ==> PgxGraph[name=BANK_GRAPH_3,N=999,E=4993,created=1664289985985]
PgxFuture<PgxGraph> graphLoadingFuture = session.readGraphByNameAsync("BANK_GRAPH", GraphSource.PG_PGQL);
while (!graphLoadingFuture.isDone()) {
  FutureProgress progress = graphLoadingFuture.getProgress();
  Optional < GraphLoadingProgress > graphLoadingProgress = progress.asGraphLoadingProgress();
  if (graphLoadingProgress.isPresent()) {
    long numLoadedVertices = graphLoadingProgress.get().getNumLoadedVertices();
  }
  Thread.sleep(1000);
}
PgxGraph graph = graphLoadingFuture.get();

FutureProgressオブジェクトは、一連の非同期操作で使用しないことをお薦めします。

16.3.1.4 グラフ構成のオプション

グラフ構成のオプションについて学習します。

次の表に、すべてのグラフ構成に共通するJSONフィールドを示します。

表16-4 グラフ構成JSONフィールド

フィールド 説明 デフォルト
name string グラフの名前。 必須
array_compaction_threshold number [グラフが更新用に最適化されている場合にのみ関連]デルタログを新規配列に圧縮するタイミングを決定するために使用されるしきい値。エンジンmin_array_compaction_threshold値より小さい場合は、かわりにmin_array_compaction_thresholdが使用されます 0.2
attributes object グラフ・データの読取りおよび書込みに必要な追加属性。 null
data_source_id string RDBMSインスタンスへの接続に使用するデータ・ソースID。 null
edge_id_strategy enum[no_ids, keys_as_ids, unstable_generated_ids] このグラフのエッジに使用するID戦略を示します。指定しない(またはnullに設定されている)場合、戦略は、ロード中に、またはデフォルト値を使用して決定されます。 null
edge_id_type enum[long] エッジIDのタイプ。これをlongに設定するには、エッジ・プロバイダのIDがグラフ間で一意である必要があります。これらのIDはグローバルIDとして使用されます。これをnullに設定(または省略)すると、異なるエッジ・プロバイダ間でIDの繰返しが許可され、PGXにより、エッジに対してグローバルに一意のIDが自動的に生成されます。 null
edge_providers オブジェクトの配列 このグラフのエッジ・プロバイダのリスト。 []
error_handling object エラー処理構成。 null
external_stores オブジェクトの配列 外部文字列プロパティが存在する外部ストアの指定。 []
jdbc_url string RDBMSインスタンスを指すJDBC URL null
keystore_alias string データベースへの接続時に使用するキーストアの別名。 null
loading object 使用するロード固有の構成。 null
local_date_format 文字列の配列 local_dateプロパティのロードおよび格納時に使用するlocal_date形式の配列。形式の文字列の詳細は、DateTimeFormatterを参照してください []
max_prefetched_rows integer resultsetデータベースの各ラウンドトリップ中にプリフェッチされた行の最大数。 10000
num_connections integer RDBMS表との間でデータの読取りおよび書込みを行う接続の数。 <no-of-cpus>
optimized_for enum[read, updates] グラフで、読取り集中型のシナリオや高速更新のために最適化されたデータ構造を使用するかどうかを示します。 read
password string データベースに接続する際に使用するパスワード。 null
point2d string 空白で区切られた浮動小数点値としての経度と緯度。 0.0 0.0
prepared_queries オブジェクトの配列 引数が指定された準備済問合せの追加リスト。'queries'と同じように機能します。1つ以上の問合せに一致するデータもロードされます。 []
queries 文字列の配列 データベースからロードするデータの決定に使用される問合せのリスト。1つ以上の問合せに一致するデータがロードされます。問合せを設定しないと、グラフ全体がロードされます。 []
redaction_rules オブジェクトの配列 リダクション・ルールの配列。 []
rules_mapping オブジェクトの配列 ユーザーおよびロールへのリダクション・ルールのマッピング。 []
schema string RDBMSオブジェクトの読取りまたは書込みに使用するスキーマ null
source_name string データベース・グラフの名前(グラフがデータベースからロードされる場合)。 null
source_type enum[pg_pgql, pg_sql] データベース・グラフのソース・タイプ。 null
time_format 文字列の配列 時間プロパティのロードおよび格納時に使用するtime形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 []
time_with_timezone_format 文字列の配列 時間(タイムゾーン付き)プロパティをロードおよび格納する際に使用する時間(タイムゾーン付き)の形式。形式の文字列の詳細は、DateTimeFormatterを参照してください。 []
timestamp_format 文字列の配列 タイムスタンプ・プロパティのロードおよび格納時に使用するタイムスタンプ形式。形式の文字列の詳細は、DateTimeFormatterを参照してください。 []
timestamp_with_timezone_format 文字列の配列 タイムスタンプ(タイムゾーン付き)プロパティをロードおよび格納する際に使用するタイムスタンプ(タイムゾーン付き)の形式。形式の文字列の詳細は、DateTimeFormatterを参照してください。 []
username string RDBMSインスタンスに接続する際に使用するユーザー名。 null
vector_component_delimiter character ベクトル・プロパティの様々なコンポーネント用の区切り文字。 ;
vertex_id_strategy enum[no_ids, keys_as_ids, unstable_generated_ids] このグラフの頂点に使用するID戦略を示します。指定しない(またはnullに設定されている)場合、戦略は自動的に検出されます。 null
vertex_id_type enum[int, integer, long, string] vertex IDのタイプ。同種のグラフで指定されていない(またはnullに設定されている)場合、デフォルトで特定の値(データの元によって異なる)に設定されます。 null
vertex_providers オブジェクトの配列 このグラフの頂点プロバイダのリスト。 []

ノート:

グラフ構成で指定されたデータベース接続フィールドは、基礎となるデータ・プロバイダ構成でこれらのフィールドを指定しない場合のデフォルトとして使用されます。

プロバイダ構成JSONファイルのオプション

プロバイダ構成を使用して、各プロバイダのデータに関するメタ情報を指定できます。プロバイダ構成には、プロバイダ・データに関する次の情報が含まれます。

  • データの場所: ファイル、複数ファイルまたはデータベース・プロバイダ
  • プロパティに関する情報: プロパティの名前とタイプ

表16-5 プロバイダ構成JSONファイルのオプション

フィールド 説明 デフォルト
format enum[pgb, csv, rdbms] プロバイダ形式。 必須
name string エンティティ・プロバイダ名。 必須
attributes object グラフ・データの読取りおよび書込みに必要な追加属性。 null
destination_vertex_provider string このエッジ・プロバイダに使用される入力頂点プロバイダの名前。 null
error_handling object エラー処理構成。 null
has_keys boolean 指定されたエンティティ・データにキーがあるかどうかを示します。 true
key_type enum[int, integer, long, string] キーのタイプ。 long
keystore_alias string データベースへの接続時に使用するキーストアの別名。 null
label string このプロバイダからロードされたエンティティのラベル。 null
loading object ロード固有の構成。 null
local_date_format 文字列の配列 local_dateプロパティのロードおよび格納時に使用するlocal_date形式の配列。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 []
password string データベースに接続する際に使用するパスワード。 null
point2d string 空白で区切られた浮動小数点値としての経度と緯度。 0.0 0.0
props オブジェクトの配列 このエンティティ・プロバイダに関連付けられたプロパティの指定。 []
source_vertex_provider string このエッジ・プロバイダに使用される出力頂点プロバイダの名前。 null
time_format 文字列の配列 時間プロパティのロードおよび格納時に使用する時間形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 []
time_with_timezone_format 文字列の配列 時間(タイムゾーン付き)プロパティをロードおよび格納する際に使用する時間(タイムゾーン付き)の形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 []
timestamp_format 文字列の配列 タイムスタンプ・プロパティのロードおよび格納時に使用するタイムスタンプ形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 []
timestamp_with_timezone_format 文字列の配列 タイムスタンプ(タイムゾーン付き)プロパティをロードおよび格納する際に使用するタイムスタンプ(タイムゾーン付き)の形式。形式の文字列に関するドキュメントは、DateTimeFormatterを参照してください。 []
vector_component_delimiter character ベクトル・プロパティの様々なコンポーネント用の区切り文字。 ;

プロバイダ・ラベル

プロバイダ構成のlabelフィールドを使用すると、プロバイダからロードされたエンティティのラベルを設定できます。labelが指定されていない場合、プロバイダからのすべてのエンティティに、プロバイダの名前のラベルが付けられます。2つの異なるプロバイダに同じラベルを設定できるのは、プロパティが厳密に同じ(名前とタイプが同じ)場合だけです。

プロパティ構成

プロバイダ構成のpropsエントリは、次のJSONフィールドを含むオブジェクトです。

表16-6 プロパティ構成

フィールド 説明 デフォルト
name string プロパティの名前を指定します。 必須
type enum[boolean, integer, vertex, edge, float, long, double, string, date, local_date, time, timestamp, time_with_timezone, timestamp_with_timezone, point2d] プロパティのタイプ。

ノート:

dateは非推奨です。かわりに、local_date/time/timestamp/time_with_timezone/timestamp_with_timezoneのいずれかを使用します。
vertex/edgeは、vertex_id_type/edge_id_typeフィールドで指定されているタイプのプレースホルダです。
必須
aggregate enum[identity, group_key, min, max, avg, sum, concat, count] [現在サポートされていません]どの集計関数を使用しても、常に頂点キーによって集計が行われます。 null
column value プロパティ・データを保持する列の名前または索引(0から開始)。指定しない場合、ローダーはプロパティ名を列名として使用しようとします(CSV形式のみ)。 null
default value データ・ソースで指定されていない場合、このプロパティに割り当てられるデフォルト値。date型の場合: 文字列はyyyy-MM-dd HH:mm:ssでフォーマットされます。デフォルトが存在しない場合(null)、存在しないプロパティにはデフォルトのJava型(プリミティブ)または空の文字列(string)または01.01.1970 00:00 (date)が含まれます。 null
dimension integer プロパティのディメンション。 0
drop_after_loading boolean [現在サポートされていません]集計にのみ使用されるヘルパー・プロパティを示します。これはロード後に削除されます false
field value プロパティ・データを保持するJSONフィールドの名前。ネストはドット区切りで示されます。ドットを含むフィールド名を使用できますが、この場合、バックスラッシュを使用してドットをエスケープし、あいまいさを解決する必要があります。厳密に指定されているオブジェクトのみがロードされ、存在しない場合はデフォルト値が使用されます。 null
format 文字列の配列 プロパティの形式の配列。 []
group_key string [現在サポートされていません]プロパティ/キーがグループ化式の一部である場合にのみ使用できます。 null
max_distinct_strings_per_pool integer [string_pooling_strategyindexedの場合のみ関連]プーリングを停止するまでのプロパティごとの個別の文字列数。制限に達すると、例外がスローされます。nullに設定すると、グローバルPGX構成からのデフォルト値が使用されます。 null
stores オブジェクトの配列 このプロパティが存在する場所を示すストレージ識別子のリスト。 []
string_pooling_strategy enum[indexed, on_heap, none] 使用する文字列プール戦略を示します。nullに設定すると、グローバルPGX構成からのデフォルト値が使用されます。 null

ロード構成

loadingエントリは、次のフィールドを含むJSONオブジェクトです。

表16-7 ロード構成

フィールド 説明 デフォルト
create_key_mapping boolean trueの場合、ロード中に、エンティティ・キーと内部IDの間のマッピングが準備されます。 true
filter string [現在サポートされていません]フィルタ式 null
grouping_by 文字列の配列 [現在サポートされていません]アグリゲータに使用されるエッジ・プロパティの配列。頂点の場合、IDのみを使用できます(デフォルト) []
load_labels boolean 使用可能な場合にエンティティ・ラベルをロードするかどうか。 false
strict_mode boolean trueに設定すると、ローダーで入力ファイルに関する問題(無効な形式、繰返しキー、欠落フィールド、不一致、その他潜在的なエラーなど)が発生した場合は常に例外がスローされ、ERRORレベルでログに記録されます。falseに設定すると、ローダーでロード・フェーズ中のメモリー使用量が削減されますが、入力ファイルが不規則である場合は予期しない動作が発生する可能性があります。 true

エラー処理構成

error_handlingエントリは、次のフィールドを含むJSONオブジェクトです。

表16-8 エラー処理構成

フィールド 説明 デフォルト
on_missed_prop_key enum[silent, log_warn, log_warn_once, error] 欠落しているプロパティ・キーに対するエラー処理。 log_warn_once
on_missing_vertex enum[ignore_edge, ignore_edge_log, ignore_edge_log_once, create_vertex, create_vertex_log, create_vertex_log_once, error] 頂点データ・ソース内のエッジの欠落した出力頂点または入力頂点に対するエラー処理。 error
on_parsing_issue enum[silent, log_warn, log_warn_once, error] 不正なデータ解析に対するエラー処理。silent、log_warnまたはlog_warn_onceに設定すると、ロードの続行が試行されます。解析に関する問題にはリカバリできないものもあり、ロードが終了される場合もあります。 error
on_prop_conversion enum[silent, log_warn, log_warn_once, error] プロパティ・タイプが指定されたものとは異なる場合のエラー処理。ただし、強制できます。 log_warn_once
on_type_mismatch enum[silent, log_warn, log_warn_once, error] プロパティ・タイプが指定されたものとは異なる場合のエラー処理。ただし、強制できません error
on_vector_length_mismatch enum[silent, log_warn, log_warn_once, error] 適切なディメンションのないベクトル・プロパティに対するエラー処理。 error

ノート:

on_missing_vertexエラー処理構成でサポートされる設定は、ignore_edgeのみです。

16.3.1.5 データ・ロードのセキュリティのベスト・プラクティス

データベースからグラフをロードするには認証が必要であるため、この種類のデータ・ソースへのアクセスを構成する際は、特定のセキュリティ・ガイドラインに従うことが重要です。

次のガイドラインをお薦めします:

  • データへのアクセスに使用するユーザーまたはロールは、必要なグラフ・データにのみアクセスできる読取り専用アカウントにします。
  • たとえば、データベースの場合は、更新できないビューを使用して、グラフ・データを読取り専用としてマークします。

16.3.1.6 データ形式のサポート・マトリクス

グラフ・サーバー(PGX)でサポートされている様々なデータ形式について学習します。

次の表に、各種データ形式で、ID、ラベルおよびベクトル・プロパティの処理方法がどのように異なるかを示します。

ノート:

この表は形式のPGX実装に関する制限を示し、必ずしも形式自体の制限を示すものではありません。

表16-9 データ形式のサポート・マトリクス

形式 頂点ID エッジID 頂点ラベル エッジ・ラベル ベクトル・プロパティ
PGB int, long, string long 複数 単一 サポートされる(ベクトルのタイプはintegerlongfloatまたはdouble)
CSV int, long, string long 複数 単一 サポートされる(ベクトルのタイプはintegerlongfloatまたはdouble)
ADJ_LIST int, long, string サポート対象外 サポート対象外 サポート対象外 サポートされる(ベクトルのタイプはintegerlongfloatまたはdouble)
EDGE_LIST int, long, string サポート対象外 複数 単一 サポートされる(ベクトルのタイプはintegerlongfloatまたはdouble)
GRAPHML int, long, string サポート対象外 サポート対象外 サポート対象外 サポート対象外

16.3.1.7 ロード済グラフの不変性

グラフがグラフ・サーバー(PGX)にロードされると、グラフとそのプロパティは自動的に不変としてマークされます。

ロード済グラフの不変性は、次の設計選択によるものです。

  • 通常のグラフ分析はグラフ・インスタンスのスナップショットで行われるため、グラフ・インスタンスの変更は必要ありません。
  • 不変性により、PGXは、高速分析用に最適化された内部グラフ表現を使用できます。
  • リモート・モードでは、グラフ・インスタンスが複数のクライアント間で共有される可能性があります。

ただし、グラフ・サーバー(PGX)には、分析の目的でグラフ・インスタンスをカスタマイズおよび変更するためのメソッドも用意されています。詳細は、グラフ変更とサブグラフを参照してください。