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

グラフ・サーバー(PGX)では、グラフ内の頂点およびエッジごとに一意の識別子が存在することをデフォルトで強制されます。

グラフをグラフ・サーバー(PGX)にロードするときに、PgxGraph.getVertex(ID id)およびPgxGraph.getEdge(ID id)を使用するか、組込みid()メソッドを使用するPGQL問合せによって、これらの一意の頂点およびエッジIDを取得できます。
次のサポートされているID生成方法は、構成パラメータvertex_id_strategyおよびedge_id_strategyを使用して選択できます。
  • keys_as_ids: これは、頂点IDを生成するためのデフォルトの方法です。
  • partitioned_ids: これは、パーティション化されたグラフの場合にお薦めの方法です。
  • unstable_generated_ids: これを使用すると、システムによって頂点IDまたはエッジIDが生成されます。
  • no_ids: この方法を使用すると、頂点IDまたはエッジIDが無効になるため、頂点IDまたはエッジIDを使用してAPIをコールできなくなります。

キーを使用したIDの生成

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

エッジの場合、デフォルトではエッジ・データにキーは必要なく、エッジIDはPGX (unstable_generated_ids)によって自動的に生成されます。この自動ID生成は、頂点IDにも適用できます。なお、頂点IDまたはエッジ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_ACCOUNTS",
      "key_column": "ID",
      "key_type": "integer",
      "props": [
        {
          "name": "ID",
          "type": "integer"
        },
        {
          "name": "NAME",
          "type": "string"
        }
      ],
      "loading": {
        "create_key_mapping" : true
      }
    }
  ],
  "edge_providers": [
    {
      "name": "Transfers",
      "format": "rdbms",
      "database_table_name": "BANK_TXNS",
      "key_column": "ID",
      "source_column": "FROM_ACCT_ID",
      "destination_column": "TO_ACCT_ID",
      "source_vertex_provider": "Accounts",
      "destination_vertex_provider": "Accounts",
      "props": [
         {
          "name": "ID",
          "type": "integer"
        },
        {
          "name": "AMOUNT",
          "type": "double"
        }
      ],
      "loading": {
        "create_key_mapping" : true
      }
    }
  ]
}

ノート:

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

グラフがロードされると、PGXは、プロバイダのどのプロパティがプロバイダのキーに対応するかについての情報を保持します。前述の例では、頂点プロパティIDが頂点キーに対応し、エッジ・プロパティIDもエッジ・キーに対応しています。各プロバイダはこのようなキー・プロパティを最大で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)のようになります。

パーティション化されたIDを含むPGQL問合せの実行の詳細は、パーティション化されたIDを含むPGQL問合せを参照してください。