Гремлин: Какой эффективный способ найти грань между двумя вершинами?
Очевидно, что прямой способ найти ребро между двумя вершинами состоит в следующем:
graph.traversal().V(outVertex).bothE(edgeLabel).filter(__.otherV().is(inVertex))
я так чувствуюfilter
Шаг должен пройти через все ребра, делая очень медленным для некоторых приложений с большим количеством ребер.
Другой способ может быть:
traversal = graph.traversal()
.V(outVertex)
.bothE(edgeLabel)
.as("x")
.otherV()
.is(outVertex) // uses index?
.select("x");
Я предполагаю, что второй подход мог бы быть намного быстрее, так как он будет использовать индекс индекса, который сделает его быстрее, чем первый подход.
Какой из них быстрее и эффективнее (с точки зрения IO)?
Я использую Титан, так что вы также можете сделать свой ответ Титан конкретным.
редактироватьС точки зрения времени, кажется, что первый подход быстрее (ребра были 20k для вершиныb
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
Как насчет IO?