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.
Einhaltung der Gremlin-Standards in Amazon Neptune
Die folgenden Abschnitte bieten einen Überblick über die Neptune-Implementierung von Gremlin und wie sie sich von der Apache-Implementierung unterscheidet. TinkerPop
Neptune implementiert einige Gremlin-Schritte nativ in seiner Engine und verwendet die Apache TinkerPop Gremlin-Implementierung, um andere zu verarbeiten (siehe). Native Unterstützung für Gremlin-Schritte in Amazon Neptune
Anmerkung
Einige Beispiele für diese Implementierungsunterschiede zwischen der Gremlin-Konsole und Amazon Neptune finden Sie im Abschnitt Verwenden von Gremlin für den Zugriff auf Grafikdaten in Amazon Neptune im Schnellstart.
Themen
Geltende Standards für Gremlin
Die Gremlin-Sprache wird eher durch die TinkerPop Apache-Dokumentation und die TinkerPop Apache-Implementierung
von Gremlin als durch eine formale Spezifikation definiert. Für numerische Formate folgt Gremlin dem Standard IEEE 754 (IEEE 754-2019 – IEE Standard for Floating-Point Arithmetic
; siehe auch die Wikipedia-Seite für IEEE 754 ).
Variablen und Parameter in Skripts
Wenn es sich um bereits gebundene Variablen handelt, ist das Traversierungs-Objekt g
in Neptune bereits gebunden und das graph
-Objekt wird nicht unterstützt.
Obwohl Neptune weder Gremlin-Variablen noch Parametrisierung in Skripts unterstützt, finden Sie im Internet häufig Beispielskripts für Gremlin Server, die Variablendeklarationen enthalten, zum Beispiel:
String query = "x = 1; g.V(x)"; List<Result> results = client.submit(query).all().get();
Es gibt auch viele Beispiele, die beim Absenden von Abfragen Parametrisierung
Map<String,Object> params = new HashMap<>(); params.put("x",1); String query = "g.V(x)"; List<Result> results = client.submit(query).all().get();
Die Parameterbeispiele sind in der Regel mit Warnungen vor einer Beeinträchtigung der Leistung verbunden, wenn keine Parametrisierung erfolgt, wenn dies möglich ist. Es gibt eine Menge solcher Beispiele, denen Sie vielleicht begegnen werden TinkerPop , und sie klingen alle ziemlich überzeugend, was die Notwendigkeit der Parametrisierung angeht.
Sowohl die Funktion zur Deklaration von Variablen als auch die Parametrisierungsfunktion (zusammen mit den Warnungen) gelten jedoch nur für den Gremlin-Server, TinkerPop wenn dieser den verwendet. GremlinGroovyScriptEngine
Sie gelten nicht, wenn Gremlin Server die gremlin-language
-ANTLR-Grammatik von Gremlin verwendet, um Abfragen zu analysieren. Die ANTLR-Grammatik unterstützt weder Variablendeklarationen noch Parametrisierung. Wenn Sie ANTLR verwenden, müssen Sie sich daher keine Sorgen über eine fehlende Parametrisierung machen. Da es sich bei der ANTLR-Grammatik um eine neuere Komponente handelt TinkerPop, spiegeln ältere Inhalte, denen Sie im Internet möglicherweise begegnen, diesen Unterschied im Allgemeinen nicht wider.
Neptune verwendet in der Abfrageverarbeitungs-Engine die ANTLR-Grammatik und nicht GremlinGroovyScriptEngine
. Daher werden Variablen, Parametrisierung oder die Eigenschaft bindings
nicht unterstützt. Daher sind die Probleme im Zusammenhang mit einer fehlenden Parametrisierung nicht auf Neptune anwendbar. Mit Neptune können Abfragen einfach so gesendet werden, wie sie sind, ohne sie zu parametrisieren. Daher kann das vorherige Beispiel wie folgt vereinfacht werden, ohne dass die Leistung beeinträchtigt wird:
String query = "g.V(1)"; List<Result> results = client.submit(query).all().get();
TinkerPop Aufzählungen
Neptune unterstützt keine vollständig qualifizierten Klassennamen für Aufzählungswerte. In Ihrer Groovy-Anforderung müssen Sie beispielsweise single
anstelle von org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
verwenden.
Der Aufzählungstyp wird durch den Parametertyp bestimmt.
Die folgende Tabelle zeigt die zulässigen Aufzählungswerte und den zugehörigen TinkerPop vollqualifizierten Namen.
Zulässige Werte | Klasse |
---|---|
id , key , label , value |
|
T.id , T.key , T.label , T.value |
|
set , single |
org.apache.tinkerpop.gremlin.structure. VertexProperty. Kardinalität |
asc , desc , shuffle |
|
Order.asc , Order.desc , Order.shuffle |
|
global , local |
|
Scope.global , Scope.local |
|
all , first , last , mixed |
|
normSack |
org.apache.tinkerpop.gremlin.process.traversal. SackFunctions. Barriere |
addAll , and , assign , div ,
max , min , minus , mult ,
or , sum , sumLong |
|
keys , values |
|
BOTH , IN , OUT |
|
any , none |
org.apache.tinkerpop.gremlin.process.traversal.step. TraversalOptionParent. Wählen |
Java-Code
Neptune unterstützt keine Aufrufe von Methoden, die durch beliebige Java- oder Java-Bibliotheksaufrufe definiert wurden, mit Ausnahme von unterstütztem Gremlin. APIs Beispiel: java.lang.*
, Date()
und g.V().tryNext().orElseGet()
sind nicht zulässig.
Eigenschaften von Elementen
Neptune unterstützt das in TinkerPop 3.7.0 eingeführte materializeProperties
Flag zur Rückgabe von Eigenschaften von Elementen nicht. Infolgedessen gibt Neptune immer noch nur Scheitelpunkte oder Kanten als Referenzen mit nur ihrem UND zurück. id
label
Skriptausführung
Alle Abfragen müssen mit g
, dem Traversal-Objekt, beginnen.
Bei der Übermittlung von Zeichenfolgenabfragen können mehrere Traversierungen ausgegeben werden, durch Semikolon (;
) oder ein Zeichen für eine neue Zeile (\n
) getrennt. Alle Anweisungen außer der letzten Anweisung müssen mit einem .iterate()
-Schritt beendet werden, um ausgeführt zu werden. Es werden nur die Daten der letzten Traversierung zurückgegeben. Beachten Sie, dass dies nicht für ByteCode GLV-Abfragen gilt.
Sitzungen
Sitzungen in Neptune sind auf 10 Minuten Dauer beschränkt. Weitere Informationen finden Sie unter Skriptbasierte Gremlin-Sitzungen und in der TinkerPopSitzungsreferenz
Transaktionen
Neptune öffnet zu Beginn jeder Gremlin-Traversierung eine neue Transaktion und schließt sie nach dem erfolgreichen Abschluss der Traversierung. Wenn ein Fehler auftritt, wird ein Rollback für die Transaktion durchgeführt.
In einer einzelnen Transaktion sind mehrere Anweisungen, die durch Semikolon (;
) oder Zeilenumbruchzeichen (\n
) getrennt sind, enthalten. Jede Anweisung, die nicht die letzte Anweisung ist, muss mit einem auszuführenden next()
-Schritt enden. Es werden nur die Daten der letzten Traversierung zurückgegeben.
Eine manuelle Transaktionslogik mit tx.commit()
und tx.rollback()
wird nicht unterstützt.
Wichtig
Dies gilt nur für Methoden, bei denen Sie die Gremlin-Abfrage als Textzeichenfolge senden (siehe Gremline-Transaktionen).
Scheitelpunkt und Kante IDs
Neptune Gremlin Vertex und Edge IDs müssen vom Typ sein. String
Diese ID-Zeichenfolgen unterstützen Unicode-Zeichen und dürfen eine Größe von 55 MB nicht überschreiten.
Vom Benutzer bereitgestellte Dateien IDs werden unterstützt, sind aber bei normalem Gebrauch optional. Wenn Sie beim Hinzufügen eines Eckpunkts oder einer Kante keine ID angeben, generiert Neptune eine UUID und konvertiert sie in eine Zeichenfolge mit dem folgenden Format: "48af8178-50ce-971a-fc41-8c9a954cea62"
Sie entsprechen UUIDs nicht dem RFC-Standard. Wenn Sie also einen Standard benötigen, sollten UUIDs Sie sie extern generieren und beim Hinzufügen von Scheitelpunkten oder Kanten angeben.
Anmerkung
Der Load
Neptune-Befehl erfordert, dass Sie das Feld ~id im Neptune-CSV-Format angeben IDs.
Vom Benutzer bereitgestellt IDs
Vom Benutzer bereitgestellte IDs Dateien sind in Neptune Gremlin mit den folgenden Bestimmungen erlaubt.
IDs Die mitgelieferten Produkte sind optional.
Es werden nur Eckpunkte und Kanten unterstützt.
Es wird nur der
String
-Typ unterstützt.
Zum Erstellen eines neuen Vertex mit benutzerdefinierter ID verwenden Sie den property
-Schritt mit dem id
-Schlüsselwort g.addV().property(id, 'customid')
.
Anmerkung
Schließen Sie das id
-Schlüsselwort nicht in Anführungszeichen ein. Dies bezieht sich auf T.id
.
Jeder Scheitelpunkt IDs muss einzigartig sein, und alle Kanten IDs müssen einzigartig sein. Neptune lässt jedoch zu, dass ein Eckpunkt und eine Kante dieselbe ID haben.
Wenn Sie versuchen, einen neuen Vertex mit g.addV()
zu erstellen und es ist bereits ein Vertex mit dieser ID vorhanden, schlägt die Operation fehl. Dabei gilt die folgende Ausnahme: Wenn Sie eine neue Bezeichnung für den Vertex angeben, ist die Operation erfolgreich, fügt die neue Bezeichnung und alle zusätzlichen angegebenen Eigenschaften aber zum vorhandenen Vertex hinzu. Es wird nichts überschrieben. Es wird kein neuer Vertex erstellt. Die Vertex-ID ändert sich nicht und bleibt eindeutig.
Die folgende Gremlin-Konsolenbefehl können beispielsweise erfolgreich ausgeführt werden:
gremlin> g.addV('label1').property(id, 'customid') gremlin> g.addV('label2').property(id, 'customid') gremlin> g.V('customid').label() ==>label1::label2
Eigenschaft „Scheitelpunkt“ IDs
Die Eckpunkteigenschaften IDs werden automatisch generiert und können bei der Abfrage als positive oder negative Zahlen angezeigt werden.
Kardinalität von Eckpunkteigenschaften
Neptune unterstützt Set-Kardinalität und Single-Kardinalität. Wenn die Kardinalität nicht angegeben ist, wird die Set-Kardinalität ausgewählt. Das bedeutet, dass, wenn ein Eigenschaftswert festgelegt wird, ein neuer Wert zur Eigenschaft hinzugefügt wird, sofern dieser nicht bereits im Wertesatz enthalten ist. Dies ist der Gremlin-Aufzählungswert von Set
List
wird nicht unterstützt. Weitere Informationen zur Kardinalität von Eigenschaften finden Sie im Thema Scheitelpunkt
Aktualisieren einer Eckpunkteigenschaft
Zum Aktualisieren eines Eigenschaftswerts ohne Hinzufügung eines zusätzlichen Werts zum Wertesatz geben Sie die single
-Kardinalität im property
-Schritt an.
g.V('exampleid01').property(single, 'age', 25)
Dadurch werden alle vorhandenen Werte für die Eigenschaft entfernt.
Labels
Neptune unterstützt mehrere Bezeichnungen für einen Eckpunkt. Sie können mehrere Bezeichnungen angeben, indem Sie diese durch ::
trennen. Beispielsweise fügt g.addV("Label1::Label2::Label3")
einen Knoten mit drei verschiedenen Bezeichnungen hinzu. Der hasLabel
-Schritt entspricht dem Knoten mit allen drei Bezeichnungen: hasLabel("Label1")
, hasLabel("Label2")
und hasLabel("Label3")
.
Wichtig
Das ::
-Trennzeichen ist dieser Verwendung vorbehalten. Sie können im hasLabel
-Schritt nicht mehrere Bezeichnungen angeben. Beispiel: Für hasLabel("Label1::Label2")
gibt es keine Übereinstimmung.
Escape-Zeichen
Neptune löst alle Escape-Zeichen wie im Abschnitt Escaping Special Characters
Groovy-Einschränkungen
Neptune unterstützt keine Groovy-Befehle, die nicht mit g
beginnen. Dies umfasst mathematische Zeichen (z. B.: 1+1
), Systemaufrufe (z. B: System.nanoTime()
) und Variablendefinitionen (z. B: 1+1
).
Wichtig
Neptune unterstützt keine vollständig qualifizierten Klassennamen. In Ihrer Groovy-Anforderung müssen Sie beispielsweise single
anstelle von org.apache.tinkerpop.gremlin.structure.VertexProperty.Cardinality.single
verwenden.
Serialisierung
Neptune unterstützt die folgenden Serialisierungen basierend auf dem angeforderten MIME-Typ.
MIME-Typ | Serialisierung | Konfiguration |
|
GraphSONMessageSerializerV1 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphSONUntypedMessageSerializerV1 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphSONMessageSerializerV2 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
GraphSONUntypedMessageSerializerV2 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
GraphSONMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphSONUntypedMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphSONUntypedMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphBinaryMessageSerializerV1 |
|
|
GraphBinaryMessageSerializerV1 |
serializeResultToString: true |
|
GraphSONMessageSerializerGremlinV1 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV1] |
|
GraphSONMessageSerializerV2 (funktioniert nur mit) WebSockets |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV2] |
|
|
|
|
GraphSONMessageSerializerV3 |
ioRegistries: [org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerIoRegistryV3] |
|
GraphBinaryMessageSerializerV1 |
|
Neptune unterstützt zwar diese verschiedenen Serialisierertypen, die Anleitung für ihre Verwendung ist jedoch recht einfach. Wenn Sie über HTTP eine Verbindung zu Neptune herstellen, sollten Sie der Verwendung von Priorität einräumen, application/vnd.gremlin-v3.0+json;types=false
da die eingebetteten Typen in der alternativen Version von GraphSon 3 die Arbeit erschweren. Wenn Sie TinkerPop Apache-Treiber verwenden, müssen Sie wahrscheinlich keine Auswahl treffen, da Sie die Standardeinstellung von verwenden würden. application/vnd.graphbinary-v1.0
Das application/vnd.graphbinary-v1.0-stringd
ist im Allgemeinen nur nützlich, wenn es in Verbindung mit der Gremlin-Konsole verwendet wird, da es alle Ergebnisse zur einfachen Anzeige in eine Zeichenkettendarstellung konvertiert. Die übrigen Formate bleiben aus älteren Gründen weiterhin vorhanden.
Anmerkung
Die hier gezeigte Serializer-Tabelle bezieht sich auf die Benennung ab Version 3.7.0. TinkerPop Wenn Sie mehr über diese Änderung erfahren möchten, lesen Sie bitte die TinkerPop Upgrade-Dokumentation.
Lambda-Schritte
Lambda-Schritte werden von Neptune nicht unterstützt.
Nicht unterstützte Gremlin-Methoden
Die folgenden Gremlin-Methoden werden von Neptune nicht unterstützt:
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.program(org.apache.tinkerpop.gremlin.process.computer.VertexProgram)
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.sideEffect(java.util.function.Consumer)
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.from(org.apache.tinkerpop.gremlin.structure.Vertex)
org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.to(org.apache.tinkerpop.gremlin.structure.Vertex)
Die folgende Traversierung ist beispielsweise nicht zulässig: g.V().addE('something').from(__.V().next()).to(__.V().next())
.
Wichtig
Dies gilt nur für Methoden, bei denen die Gremlin-Abfrage als Textzeichenfolge gesendet wird.
Nicht unterstützte Gremlin-Schritte
Die folgenden Gremlin-Schritte werden von Neptune nicht unterstützt:
Der Gremlin-Schritt io( )
wird von Neptune nur teilweise unterstützt. Er kann in einem Lesekontext verwendet werden, wie in g.io(
, jedoch nicht zum Schreiben.(url)
).read()
Features von Gremlin-Diagrammen in Neptune
Die Neptune-Implementierung von Gremlin legt das graph
-Objekt nicht offen. Die folgenden Tabellen listen Gremlin-Features auf und geben an, ob Neptune sie unterstützt oder nicht.
Neptune-Unterstützung für graph
-Features
Die Neptune-Diagramm-Features (wenn vorhanden) sind mit den Features identisch, die vom Befehl graph.features()
zurückgegeben würden.
Diagramm-Feature | Aktiviert? |
---|---|
Transactions |
true |
ThreadedTransactions |
false |
Computer |
false |
Persistence |
true |
ConcurrentAccess |
true |
Neptune-Unterstützung für Variablen-Features
Variablen-Feature | Aktiviert? |
---|---|
Variables |
false |
SerializableValues |
false |
UniformListValues |
false |
BooleanArrayValues |
false |
DoubleArrayValues |
false |
IntegerArrayValues |
false |
StringArrayValues |
false |
BooleanValues |
false |
ByteValues |
false |
DoubleValues |
false |
FloatValues |
false |
IntegerValues |
false |
LongValues |
false |
MapValues |
false |
MixedListValues |
false |
StringValues |
false |
ByteArrayValues |
false |
FloatArrayValues |
false |
LongArrayValues |
false |
Neptune-Unterstützung für Eckpunkt-Features
Eckpunkt-Feature | Aktiviert? |
---|---|
MetaProperties |
false |
DuplicateMultiProperties |
false |
AddVertices |
true |
RemoveVertices |
true |
MultiProperties |
true |
UserSuppliedIds |
true |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
false |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
Neptune-Unterstützung für Eckpunkt-Eigenschafts-Features
Eckpunkt-Eigenschafts-Feature | Aktiviert? |
---|---|
UserSuppliedIds |
false |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
true |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
Properties |
true |
SerializableValues |
false |
UniformListValues | false |
BooleanArrayValues |
false |
DoubleArrayValues |
false |
IntegerArrayValues |
false |
StringArrayValues |
false |
BooleanValues |
true |
ByteValues |
true |
DoubleValues |
true |
FloatValues |
true |
IntegerValues |
true |
LongValues |
true |
MapValues |
false |
MixedListValues |
false |
StringValues |
true |
ByteArrayValues |
false |
FloatArrayValues |
false |
LongArrayValues |
false |
Neptune-Unterstützung für Kanten-Features
Kanten-Feature | Aktiviert? |
---|---|
AddEdges |
true |
RemoveEdges |
true |
UserSuppliedIds |
true |
AddProperty |
true |
RemoveProperty |
true |
NumericIds |
false |
StringIds |
true |
UuidIds |
false |
CustomIds |
false |
AnyIds |
false |
Neptune-Unterstützung für Kanten-Eigenschafts-Features
Kanten-Eigenschafts-Feature | Aktiviert? |
---|---|
Properties |
true |
SerializableValues |
false |
UniformListValues |
false |
BooleanArrayValues |
false |
DoubleArrayValues |
false |
IntegerArrayValues |
false |
StringArrayValues |
false |
BooleanValues |
true |
ByteValues |
true |
DoubleValues |
true |
FloatValues |
true |
IntegerValues |
true |
LongValues |
true |
MapValues |
false |
MixedListValues |
false |
StringValues |
true |
ByteArrayValues |
false |
FloatArrayValues |
false |
LongArrayValues |
false |