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.
Native Unterstützung für Gremlin-Schritte in Amazon Neptune
Die Amazon-Neptune-Engine bietet zurzeit keine vollständige native Unterstützung für alle Gremlin-Schritte, wie in Optimieren von Gremline-Abfragen beschrieben. Die aktuelle Unterstützung lässt sich in vier Kategorien einteilen:
Gremlin-Schritte, die jederzeit in native Neptune-Engine-Operationen konvertiert werden können
Viele Gremlin-Schritte können in native Neptune-Engine-Operationen konvertiert werden, solange sie die folgenden Bedingungen erfüllen:
Ihnen geht in der Abfrage kein Schritt voraus, der nicht konvertiert werden kann.
Der übergeordnete Schritt, wenn vorhanden, kann konvertiert werden.
Alle untergeordneten Schritte, wenn vorhanden, können konvertiert werden.
Die folgenden Gremlin-Schritte können stets in native Neptune-Engine-Operationen konvertiert werden, solange sie die folgenden Bedingungen erfüllen:
Gremlin-Schritte, die in einigen Fällen in native Neptune-Engine-Operationen konvertiert werden können
Einige Gremlin-Schritte können in einigen Situationen in native Neptune-Engine-Operationen konvertiert werden, in anderen nicht:
addE( )
– Der Schritt addE()
kann grundsätzlich in eine native Neptune-Engine-Operation konvertiert werden, es sei denn, der unmittelbar folgende Schritt ist einproperty()
-Schritt mit einer Traversierung als Schlüssel.addV( )
– Der Schritt addV()
kann grundsätzlich in eine native Neptune-Engine-Operation konvertiert werden, es sei denn, ihm folgt unmittelbar einproperty()
-Schritt, der eine Traversierung als Schlüssel enthält oder es sind mehrere Bezeichnungen zugewiesen.-
aggregate( )
– Der Schritt aggregate()
kann grundsätzlich in eine native Neptune-Engine-Operation konvertiert werden, es sei denn, der Schritt wird in einer untergeordneten Traversierung oder Subtraversierung verwendet oder es handelt sich beim gespeicherten Wert nicht um einen Eckpunkt-, Kanten-, ID-, Bezeichnungs- oder Eigenschaftswert.Im folgenden Beispiel wird
aggregate()
nicht konvertiert, da er in einer untergeordneten Traversierung verwendet wird:g.V().has('code','ANC').as('a') .project('flights').by(select('a') .outE().aggregate('x'))
In diesem Beispiel wird aggregate( ) nicht konvertiert, da
min()
gespeichert wird:g.V().has('code','ANC').outE().aggregate('x').by(values('dist').min())
barrier( )
– Der Schritt barrier()
kann grundsätzlich in eine native Neptun-Engine-Operation konvertiert werden, es sei denn, der folgende Schritt wird nicht konvertiert.-
cap( )
– Der einzige Fall, in dem der Schritt cap()
konvertiert wird, ist in Kombination mit dem Schrittunfold()
, um die nicht entfaltete Version eines Aggregats von Eckpunkt-, Kanten-, ID- oder Eigenschaftswerten zurückzugeben. In diesem Beispiel wirdcap()
konvertiert, weil.unfold()
folgt:g.V().has('airport','country','IE').aggregate('airport').limit(2) .cap('airport').unfold()
Wenn Sie
.unfold()
entfernen, wirdcap()
jedoch nicht konvertiert:g.V().has('airport','country','IE').aggregate('airport').limit(2) .cap('airport')
coalesce ()
— Der coalesce()
Schritt wird nur konvertiert, wenn er dem auf der Rezeptseite empfohlenen Upsert-Musterfolgt. TinkerPop Andere coalesce( )-Muster sind nicht erlaubt. Die Konvertierung erfolgt nur, wenn alle untergeordneten Traversierungen konvertiert werden können, alle denselben Typ als Ausgabe erzeugen (Eckpunkt, Kante, ID, Wert, Schlüssel oder Bezeichnung), alle zu einem neuen Element traversieren und sie nicht den Schritt repeat()
enthalten.-
constant( )
– Der Schritt constant() wird zurzeit nur konvertiert, wenn er innerhalb des sack().by()
-Teils einer Traversierung verwendet wird, um einen konstanten Wert zuzuweisen, z. B.:g.V().has('code','ANC').sack(assign).by(constant(10)).out().limit(2)
-
cyclicPath()
— Der cyclicPath()
Schritt kann im Allgemeinen in eine native Neptune-Engine-Operation umgewandelt werden, es sei denn, der Schritt wird mitby()
from()
, oderto()
Modulatoren verwendet. In den folgenden Abfragen wirdcyclicPath()
beispielsweise nicht konvertiert:g.V().has('code','ANC').as('a').out().out().cyclicPath().by('code') g.V().has('code','ANC').as('a').out().out().cyclicPath().from('a') g.V().has('code','ANC').as('a').out().out().cyclicPath().to('a')
drop( )
– Der Schritt drop()
kann grundsätzlich in eine native Neptune-Engine-Operation konvertiert werden, es sei denn, der Schritt wird innerhalb des SchrittssideEffect(
oderoptional()
verwendet.-
fold ()
— Es gibt nur zwei Situationen, in denen der Schritt fold () konvertiert werden kann, nämlich wenn er in dem Upsert-Muster verwendet wird, das auf der TinkerPop Rezeptseite empfohlen wird, und wenn er in einem group().by()
Kontext wie diesem verwendet wird:g.V().has('code','ANC').out().group().by().by(values('code', 'city').fold())
-
id( )
– Der Schritt id()
wird konvertiert, wenn er nicht in einer Eigenschaft verwendet wird, z. B.:g.V().has('code','ANC').properties('code').id()
-
mergeE ()
— Der mergeE()
Schritt kann in eine native Neptune-Engine-Operation umgewandelt werden, wenn die Parameter (die Zusammenführungsbedingung,onCreate
undonMatch
) konstant sind (entwedernull
eine KonstanteMap
oderselect()
von a).Map
Alle Beispiele in Upserting Edges können konvertiert werden. -
mergeV ()
— Der Schritt mergeV () kann in eine native Neptune-Engine-Operation umgewandelt werden, wenn die Parameter (die Zusammenführungsbedingung, onCreate
undonMatch
) konstant sind (entwedernull
eine Konstante oder von a).Map
select()
Map
Alle Beispiele, bei denen Scheitelpunkte nach oben verschoben werden, können konvertiert werden. -
order( )
– Der Schritt order()
kann grundsätzlich in eine native Neptun-Engine-Operation konvertiert werden, es sei denn, eine der folgenden Bedingungen wird erfüllt:-
Der Schritt
order()
ist Teil einer verschachtelten untergeordneten Traversierung wie folgt:g.V().has('code','ANC').where(V().out().order().by(id))
Es wird eine lokale Anordnung verwendet, zum Beispiel mit
order(local)
.-
In der Modulation
by()
, nach der sortiert werden werden soll, wird ein benutzerdefinierter Komparator verwendet. Ein Beispiel ist diese Verwendung vonsack()
:g.withSack(0). V().has('code','ANC'). repeat(outE().sack(sum).by('dist').inV()).times(2).limit(10). order().by(sack())
Es gibt mehrere Anordnungen für dasselbe Element.
-
-
project( )
– Der Schritt project()
kann grundsätzlich in eine native Neptune-Engine-Operation konvertiert werden, es sei denn, die Anzahl derby()
-Anweisungen, die aufproject()
folgen, stimmt nicht mit der Anzahl der angegebenen Bezeichnungen überein, z. B.:g.V().has('code','ANC').project('x', 'y').by(id)
range( )
– Der Schritt range()
wird nur konvertiert, wenn das untere Ende des jeweiligen Bereichs null ist (z. B.range(0,3)
).-
repeat( )
– Der Schritt repeat()
kann grundsätzlich in eine native Neptune-Engine-Operation konvertiert werden, es sei denn, er ist in einem anderenrepeat()
-Schritt verschachtelt, z. B.:g.V().has('code','ANC').repeat(out().repeat(out()).times(2)).times(2)
-
sack( )
– Der Schritt sack()
kann grundsätzlich in eine native Neptune-Engine-Operation konvertiert werden, außer in den folgenden Fällen:Wenn ein nicht-numerischer sack-Operator verwendet wird.
Wenn ein anderer numerischer sack-Operator als
+
,-
,mult
,div
,min
undmax
verwendet wird.-
Wenn
sack()
innerhalb eineswhere()
-Schritts verwendet wird, um nach einem sack-Wert zu filtern, z. B.:g.V().has('code','ANC').sack(assign).by(values('code')).where(sack().is('ANC'))
-
sum( )
– Der Schritt sum()
kann grundsätzlich in eine native Neptune-Engine-Operation konvertiert werden, jedoch nicht, wenn er zur Berechnung einer globalen Summierung verwendet wird, z. B.:g.V().has('code','ANC').outE('routes').values('dist').sum()
union( )
– Der Schritt union()
kann in eine native Neptune-Engine-Operation konvertiert werden, solange er abgesehen vom letzten Schritt der letzte Schritt in der Abfrage ist.-
unfold ()
— Der unfold()
Schritt kann nur dann in eine native Neptune-Engine-Operation umgewandelt werden, wenn er in dem auf der TinkerPopRezeptseiteempfohlenen Upsert-Muster verwendet wird und wenn er zusammen mit dem folgenden verwendet wird: cap()
g.V().has('airport','country','IE').aggregate('airport').limit(2) .cap('airport').unfold()
-
where( )
– Der Schritt where()
kann grundsätzlich in eine native Neptune-Engine-Operation konvertiert werden, außer in den folgenden Fällen:-
Wenn by()-Modulationen verwendet werden, z. B.:
g.V().hasLabel('airport').as('a') .where(gt('a')).by('runways')
Wenn andere Vergleichsoperatoren als
eq
,neq
,within
undwithout
verwendet werden.Wenn vom Benutzer bereitgestellte Aggregationen verwendet werden.
-
Gremlin-Schritte, die niemals in native Neptune-Engine-Operationen konvertiert werden können
Die folgenden Gremlin-Schritte werden in Neptune unterstützt, können jedoch nie in native Neptune-Engine-Operationen konvertiert werden. Sie werden stattdessen vom Gremlin-Server ausgeführt.
Gremlin-Schritte, die in Neptune überhaupt nicht unterstützt werden
Die folgenden Gremlin-Schritte werden in Neptune überhaupt nicht unterstützt. In den meisten Fällen liegt dies daran, dass sie GraphComputer
erfordern, was Neptune derzeit nicht unterstützt.
Der io()
Schritt wird sogar teilweise unterstützt, da er für „read()
von aURL“ verwendet werden kann, aber nicht für „bis“. write()