Самый оптимальный запрос Нептуна для получения всех связанных вершин с наименьшими расстояниями - PullRequest
0 голосов
/ 04 января 2019

Мне нужно получить все связанные вершины с кратчайшими расстояниями до данной вершины, расстояние которых не превышает некоторого максимального значения расстояния.

Я придумал следующий запрос для максимального расстояния 4, но возможно ли еще оптимизировать этот запрос? Может быть, в Нептуне есть какой-то алгоритм поиска расстояний между графами?

g.V('XXX').repeat(both().dedup()).emit().times(4) .project('id', 'count').by(id()).by(path().count(local))

1 Ответ

0 голосов
/ 07 января 2019

Я вижу две проблемы, которые могут повлиять на производительность вашего запроса.

  1. используется отслеживание пути (дорого, следовательно, медленно)
  2. Возвращается к начальной вершине, вы, вероятно, не хотите использовать ее в своем результате

Вот что я бы сделал вместо этого:

g.V('XXX').as('x').
  repeat(both().dedup().sack(assign).by(loops())).
    emit().
    times(4).
  where(neq('x')).
  project('id', 'count').
    by(id).
    by(sack()) // distances start at 0; if you want the distance to
               // start at 1, use sack(sum).by(constant(1)).sack()
...