View a markdown version of this page

Verwenden Sie lieber benutzerdefinierte IDs für node/relationship - Amazon Neptune

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Verwenden Sie lieber benutzerdefinierte IDs für node/relationship

Neptune ermöglicht es Benutzern, Knoten und Beziehungen explizit IDs zuzuweisen. Die ID muss im Datensatz global eindeutig und deterministisch sein, um nützlich zu sein. Eine deterministische ID kann genau wie Eigenschaften als Such- oder Filtermechanismus verwendet werden. Die Verwendung einer ID ist jedoch aus Sicht der Abfrageausführung viel optimierter als die Verwendung von Eigenschaften. Die Verwendung benutzerdefinierter IDs bietet mehrere Vorteile:

  • Eigenschaften können für eine vorhandene Entität Null sein, aber die ID muss existieren. Dadurch kann die Abfrage-Engine während der Ausführung einen optimierten Join verwenden.

  • Wenn Abfragen mit gleichzeitigen Mutationen ausgeführt werden, verringert sich die Wahrscheinlichkeit von Concurrent Modification Exceptions (CMEs) erheblich, wenn IDs für den Zugriff auf Knoten verwendet werden, da aufgrund ihrer erzwungenen Eindeutigkeit weniger Sperren IDs als Eigenschaften annehmen.

  • Durch die Verwendung von IDs wird vermieden, dass doppelte Daten entstehen, da Neptune im Gegensatz zu Eigenschaften die Eindeutigkeit von IDs erzwingt.

Das folgende Abfragebeispiel verwendet eine benutzerdefinierte ID:

Anmerkung

Die Eigenschaft ~id wird verwendet, um die ID anzugeben, während sie nur wie jede andere Eigenschaft gespeichert id wird.

CREATE (n:Person {`~id`: '1', name: 'alice'})

Ohne eine benutzerdefinierte ID zu verwenden:

CREATE (n:Person {id: '1', name: 'alice'})

Wenn Sie den letzteren Mechanismus verwenden, wird die Eindeutigkeit nicht durchgesetzt und Sie könnten die Abfrage später ausführen:

CREATE (n:Person {id: '1', name: 'john'})

Dadurch wird ein zweiter Knoten mit dem id=1 Namen john erstellt. In diesem Szenario hätten Sie jetzt zwei Knoten mit id=1 jeweils einem anderen Namen - (Alice und John).