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.
repeatMode Hinweis zur Gremlin-Abfrage
Der Neptune-Abfragehinweis repeatMode
gibt an, wie die Neptune-Engine den Schritt repeat()
in einer Gremlin-Traversierung evaluiert: Breadth First, Depth First oder Chunked Depth.
Der Evaluierungsmodus des repeat()
-Schritts ist wichtig, wenn er verwendet wird, um einen Pfad zu finden oder ihm zu folgen, anstatt einfach einen Schritt für eine bestimmte Zahl von Malen zu wiederholen.
Syntax
Der repeatMode
-Abfragehinweis wird durch Hinzufügen eines withSideEffect
-Schritts zu der Abfrage angegeben.
g.withSideEffect('Neptune#repeatMode', '
mode
').gremlin-traversal
Anmerkung
Alle Gremlin-Abfragehinweis-Nebeneffekte haben das Präfix Neptune#
.
Verfügbare Modi
-
BFS
Breadth-First-Suche.
Standard-Ausführungsmodus für den
repeat()
-Schritt. Dies erfasst alle verwandten Knoten auf derselben Ebene, bevor der Pfad tiefer weiterverfolgt wird.Diese Version ist speicherintensiv, und die Grenzen können sehr groß werden. Es besteht ein höheres Risiko, dass der Arbeitsspeicher für die Abfrage nicht ausreicht und sie von der Neptune-Engine abgebrochen wird. Dies entspricht weitestgehend anderen Gremlin-Implementierungen.
-
DFS
Depth-First-Suche.
Folgt jedem Pfad bis zur maximalen Tiefe, bevor zur nächsten Lösung weitergegangen wird.
Dies verbraucht weniger Speicher. Es kann eine bessere Leistung in Situationen wie beim Suchen nach einem einzelnen Pfad ab dem Startpunkt aus mehreren Hops bieten.
-
CHUNKED_DFS
Chunked Depth-First-Suche.
Ein hybrides Verfahren, bei dem die Graph-Tiefe zuerst in Gruppen von 1 000 Knoten (und nicht nach einzelnen Knoten) (
DFS
) oder alle Knoten (BFS)
durchsucht werden.Die Neptune-Engine erfasst bis zu 1 000 Knoten auf jeder Ebene, bevor der Pfad tiefer weiterverfolgt wird.
Diese Vorgehensweise sorgt für einen besseren Ausgleich zwischen Geschwindigkeit und Speichernutzung.
Dies ist auch nützlich, wenn Sie
BFS
verwenden möchten, die Abfrage verwendet jedoch zu viel Speicherplatz.
Beispiel
Der folgende Abschnitt beschreibt die Auswirkung des Repeat-Modus auf eine Gremlin-Traversierung.
In Neptune wird für den repeat()
-Schritt standardmäßig eine Breadth-First-Ausführungsstrategie (BFS
) für alle Traversierungen ausgeführt.
In den meisten Fällen verwendet die TinkerGraph Implementierung dieselbe Ausführungsstrategie, in einigen Fällen ändert sie jedoch die Ausführung eines Traversals.
Die TinkerGraph Implementierung ändert beispielsweise die folgende Abfrage.
g.V("
3
").repeat(out()).times(10).limit(1).path()
Der repeat()
-Schritt in dieser Traversierung wird zur folgenden Traversierung „ausgerollt“, was zu einer Depth First-Strategie (DFS
) führt.
g.V(<id>).out().out().out().out().out().out().out().out().out().out().limit(1).path()
Wichtig
Die Neptune-Abfrage-Engine führt dies nicht automatisch aus.
Breadth-first (BFS
) ist die Standardausführungsstrategie und ähnelt TinkerGraph in den meisten Fällen. Es gibt jedoch einige Fälle, in denen Depth-First (DFS
)-Strategien vorzuziehen sind.
BFS(Standard)
Breadth-first (BFS) ist die Standardausführungsstrategie für den repeat()
Operator.
g.V("
3
").repeat(out()).times(10).limit(1).path()
Die Neptune-Engine durchsucht die ersten Neun-Hop-Grenzen vollständig, bevor nach einer Lösung ab dem zehnten Hop gesucht wird. Dies ist in vielen Fällen effektiv, etwa bei Abfragen nach dem kürzesten Pfad.
Im vorangehenden Beispiel wäre die Traversierung mittels des Depth-First-Modus (DFS
) für den Operator repeat()
jedoch sehr viel schneller.
DFS
Die folgende Abfrage verwendet den Depth-First-repeat()
-Modus für den DFS
-Operator.
g.withSideEffect("Neptune#repeatMode", "DFS").V("
3
").repeat(out()).times(10).limit(1)
Dies folgt jeder einzelnen Lösung bis zur maximalen Tiefe, bevor die nächste Lösung untersucht wird.