4.3 頂点IDとエッジIDについて

データベース表からPGXへのロード時に頂点IDとエッジIDを生成

PGXでは、デフォルトで、グラフ内の頂点およびエッジごとに一意の識別子が存在するよう強制されるため、これらは、PgxGraph.getVertex(ID id)およびPgxGraph.getEdge(ID id)の使用、または組込みのid()メソッドを使用したPGQL問合せによって取得できます。

IDの生成戦略は、構成パラメータvertex_id_strategyおよびedge_id_strategyを使用して選択できます。

キーを使用したIDの生成

頂点IDを生成するデフォルトの戦略は、グラフのロード中に指定されたキーを使用することです(keys_as_ids)。その場合、各頂点はすべてのプロバイダにわたって一意である頂点キーを持つ必要があります。

エッジの場合、デフォルトではエッジ・データにキーは必要なく、エッジIDはPGX (unstable_generated_ids)によって自動的に生成されます。エッジIDの生成は、確定的であるとはかぎりません。必要に応じて、エッジ・キーをIDとしてロードすることもできます。

partitioned_ids方針では、キーは頂点またはエッジ・プロバイダ(データソース)でのみ一意である必要があります。キーはグローバルに一意である必要はありません。グローバル一意IDは、<provider_name>(<unique_key_within_provider>)のように、プロバイダ名とその内部のキーの組合せから導出されます。たとえば、Account(1)です。

partititioned_ids方針は、構成フィールドvertex_id_strategyおよびedge_id_strategyを使用して設定できます。次に例を示します。

{
  "name": "bank_graph_analytics",
  "optimized_for": "updates",
  "vertex_id_strategy" : "partitioned_ids",
  "edge_id_strategy" : "partitioned_ids",
  "vertex_providers": [
    {
      "name": "Accounts",
      "format": "rdbms",
      "database_table_name": "BANK_NODES",
      "key_column": "ID",
      "key_type": "integer",
      "props": [
        {
          "name": "keyProp",
          "type": "long",
          "column": 1
        },
        {
          "name": "number",
          "type": "long",
          "column": 2
        }
      ],
      "loading": {
        "create_key_mapping" : true
      }
    }
  ],
  "edge_providers": [
    {
      "name": "Transfers",
      "format": "rdbms",
      "database_table_name": "BANK_EDGES_AMT",
      "key_column": "ID",
      "source_column": "SRC_ID",
      "destination_column": "DEST_ID",
      "source_vertex_provider": "Accounts",
      "destination_vertex_provider": "Accounts",
      "props": [
        {
          "name": "keyProp",
          "type": "long",
          "column": 1
        },
        {
          "name": "amount",
          "type": "double",
          "column": 4
        }
      ],
      "loading": {
        "create_key_mapping" : true
      }
    }
  ]
}

ノート:

使用可能なすべてのキー・タイプが、パーティション化されたIDとの組合せでサポートされています。

グラフがロードされると、PGXは、プロバイダのどのプロパティがプロバイダのキーに対応するかについての情報を保持します。前述の例では、頂点プロパティkeyPropが頂点キー("column": 1)に対応し、さらに、エッジ・プロパティkeyPropがエッジ・キー(この場合も"column": 1)に対応しています。各プロバイダはこのようなキー・プロパティを最大で1つ持つことができ、そのプロパティは任意の名前を持つことができます。

キー・プロパティは、内部最適化に使用されるとともに、新しいエンティティの挿入時に、頂点またはエッジ(あるいはその両方)のキーを提供するために使用されます。現時点では、キー・プロパティを更新することはできません。キー・プロパティを更新しようとするとエラーが発生します。次に例を示します。
vertex key property ID cannot be updated

自動増分機能を使用したIDの生成

パフォーマンスの最適化によるメリットを得るために、常にcreate_key_mappingtrueに設定することをお薦めします。ただし、エッジに単一列のキーがない場合は、create_key_mappingfalseに設定できます。同様に、頂点プロバイダでもcreate_key_mappingfalseに設定できます。IDは自動増分機能によって生成され、Accounts(1)Accounts(2)Accounts(3)のようになります。