repeatMode Hinweis zur Gremlin-Abfrage - 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.

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.