Gremlin: Qual é uma maneira eficiente de encontrar uma aresta entre dois vértices?
Então, obviamente, uma maneira direta de encontrar uma aresta entre dois vértices é:
graph.traversal().V(outVertex).bothE(edgeLabel).filter(__.otherV().is(inVertex))
Eu sinto issofilter
O passo precisará percorrer todas as arestas, tornando-o muito lento para algumas aplicações com muitas arestas.
Outra maneira poderia ser:
traversal = graph.traversal()
.V(outVertex)
.bothE(edgeLabel)
.as("x")
.otherV()
.is(outVertex) // uses index?
.select("x");
Estou assumindo que a segunda abordagem poderia ser muito mais rápida, pois usará o índice de ID, que a tornará mais rápida que a primeira.
Qual deles é mais rápido e mais eficiente (em termos de IO)?
Estou usando o Titan, então você também pode fazer sua resposta específica ao Titan.
EditarEm termos de tempo, parece que a primeira abordagem é mais rápida (as arestas eram 20k para o vérticeb
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
E quanto ao IO?