16.2 頂点IDとエッジIDについて
グラフ・サーバー(PGX)では、グラフ内の頂点およびエッジごとに一意の識別子が存在することをデフォルトで強制されます。
PgxGraph.getVertex(ID id)
およびPgxGraph.getEdge(ID id)
を使用するか、組込みid()
メソッドを使用するPGQL問合せによって、これらの一意の頂点およびエッジ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_mapping
をtrue
に設定することをお薦めします。ただし、エッジに単一列のキーがない場合は、create_key_mapping
をfalse
に設定できます。同様に、頂点プロバイダでもcreate_key_mapping
をfalse
に設定できます。IDは自動増分機能によって生成され、Accounts(1)
、Accounts(2)
、Accounts(3)
のようになります。
パーティション化されたIDを含むPGQL問合せの実行の詳細は、パーティション化されたIDを含むPGQL問合せを参照してください。
親トピック: グラフ分析を使用したアプリケーションの開発