2016-05-29 17 views
0

zugegebenermaßen ist der Großteil meiner Datenbank Erfahrung relational. Einer der Grundsätze in diesem Raum besteht darin, das Verschieben von Daten über das Netzwerk zu vermeiden. Dies manifestiert sich durch so etwas wie mit:werden Gremlin-Graphabfragen immer Operationen in ihrem eigenen Adressraum ausführen?

select * from person order by last_name limit 10 

, die vermutlich um und Grenze innerhalb der Datenbank-Engine so etwas wie vs mit:

select * from person 

und anschließend die Bestellung und unter die Top 10 auf dem Client, die haben könnte katastrophale Auswirkungen, wenn es eine Million Personendatensätze gibt.

so, mit Gremlin (von Groovy), wenn ich so etwas wie:

g.V().has('@class', 'Person').order{println('!'); it.a.last_name <=> it.b.last_name}[0..9] 

Ich sehe die ! gedruckt, so dass ich gehe davon aus, dass diese alle Person Aufzeichnungen in den Adressraum meines Klienten zu bringen vor der Reihenfolge und begrenzen Schritte, die nicht der gewünschte Effekt ist.

werden meine Optionen für die Verarbeitung von Abfragen vollständig in der Datenbank-Engine produktspezifisch (z. B. für orient-db vielleicht die Abfrage in ihrem Geschmack von SQL), oder gibt es etwas über Gremlin, die ich vermisse?

Antwort

0

Wenn der Abfrageoptimierer des Implementierers aktiviert werden soll, müssen Sie so viele Gremlin-Schritte wie möglich verwenden und eine reine Groovy/In-Memory-Verarbeitung Ihrer Graph-Traversale vermeiden.

Sie sind höchstwahrscheinlich die Suche nach so etwas wie (Stand TinkerPop v3.2.0):

g.V().has('@class', 'Person').order().by('last_name', incr).limit(10) 

Wenn Sie sich mit Lambda-Ausdrücke finden, die Chancen sind oft hoch, dass dies mit reinen Gremlin Schritten getan werden könnte, . Gunst Gremlin tritt über Lambdas.

Siehe TinkerPop v3.2.0 Dokumentation:

+0

dank @jbmusso, die Sinn macht. Leider sieht es so aus, als ob die Version von orient, die ich verwende ('2.2') immer noch auf Gremlin 2 steht, was diese Syntax noch nicht unterstützt. Ich frage mich, ob es eine Syntax in Gremlin 2 für Ordnung, Limit und Offset gibt, die serverseitige Ausführung erlaubt ... es ist prollo gut, s/o Etikette als separate Frage einzureichen;) –