Gremlin: Was ist ein effizienter Weg, um eine Kante zwischen zwei Eckpunkten zu finden?
So offensichtlich ist ein direkter Weg, um eine Kante zwischen zwei Eckpunkten zu finden:
graph.traversal().V(outVertex).bothE(edgeLabel).filter(__.otherV().is(inVertex))
Ich fühle, dassfilter
step muss alle Kanten durchlaufen, was bei einigen Anwendungen mit vielen Kanten sehr langsam ist.
Ein anderer Weg könnte sein:
traversal = graph.traversal()
.V(outVertex)
.bothE(edgeLabel)
.as("x")
.otherV()
.is(outVertex) // uses index?
.select("x");
Ich gehe davon aus, dass der zweite Ansatz viel schneller sein könnte, da er den ID-Index verwendet, wodurch er schneller als der erste Ansatz ist.
Welche ist schneller und effizienter (in Bezug auf IO)?
Ich verwende Titan, daher können Sie Ihre Antwort auch titanspezifisch gestalten.
Bearbeite In Bezug auf die Zeit scheint der erste Ansatz schneller zu sein (Kanten waren 20k für Vertexb
gremlin> clock(100000){g.V(b).bothE().filter(otherV().is(a))}
==>0.0016451789999999999
gremlin> clock(100000){g.V(b).bothE().as("x").otherV().is(a).select("x")}
==>0.0018231140399999999
Wie wäre es mit IO?