So führen Sie die Seitennummerierung im Gremlin durch

8

In Tinkerpop 3, wie wird Paginierung durchgeführt? Ich möchte die ersten 10 Elemente einer Abfrage holen, dann die nächsten 10, ohne sie alle im Speicher laden zu müssen. Die folgende Abfrage gibt beispielsweise 1.000.000 Datensätze zurück. Ich möchte sie 10 zu 10 holen, ohne alle 1000,000 gleichzeitig zu laden.

%Vor%

Bearbeiten

Eine Lösung, die über HttpChannelizer auf Gremlin Server funktioniert, wäre ideal.

    
M-T-A 03.10.2016, 08:03
quelle

1 Antwort

12

Aus funktionaler Sicht wäre ein gut aussehender kleiner Gremlin zum Paging:

%Vor%

Auf diese Weise erhalten Sie die Gesamtzahl der Scheitelpunkte mit dem Ergebnis. Leider zwingt die fold() Sie, alle Scheitelpunkte zu zählen, die es erfordern, sie alle zu durchlaufen (d. H., Sie alle in den Speicher zu bringen).

Es gibt wirklich keine Möglichkeit, die Iteration aller 100.000 Vertices in diesem Fall zu vermeiden, solange Sie beabsichtigen, Ihre Traversierung in mehreren separaten Versuchen auszuführen. Zum Beispiel:

%Vor%

Die erste Anweisung ist dieselbe, als hätten Sie die Traversierung mit limit(2) beendet. Bei der zweiten Traversierung, die nur die zweiten beiden Ecken haben möchte, ist es nicht so, als ob Sie die ersten beiden magisch überspringen, da es eine neue Traversierung ist. Ich bin mir keiner Implementierung von TinkerPop Graph-Datenbanken bewusst, die das effizient machen wird - sie alle haben dieses Verhalten.

Die einzige Möglichkeit, zehn Vertices gleichzeitig auszuführen, ohne sie alle im Speicher zu haben, besteht darin, dieselbe Traversal -Instanz wie in:

zu verwenden %Vor%

Mit diesem Modell iterieren Sie die Scheitelpunkte nur einmal und bringen sie nicht alle zu einem bestimmten Zeitpunkt in den Speicher.

    
stephen mallette 03.10.2016, 10:35
quelle

Tags und Links