Как быть быстрее в neo4j при запросе пути? - PullRequest
0 голосов
/ 02 января 2019

Есть около 1000 узлов, 3600 отношений и многие звенят в отношениях. Есть запрос sql:

match p=(:Devices{name:"123.123.123.208"})-[r:Cost*1..7]->(:Devices{name:"123.123.123.20"}) 
with p,reduce(x=0,a in relationships(p)|x+a.Cost) as value 
order by value desc 
limit 1 
return p;

Профиль: enter image description here

1 Ответ

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

Чтобы избежать обхода циклов, вы можете использовать Процедуры APOC , в частности, процедуры расширения пути :

MATCH (start:Devices{name:"123.123.123.208"}), (end:Devices{name:"123.123.123.20"})
CALL apoc.path.expandConfig(start, {terminatorNodes:[end], relationshipFilter:'Cost>', minLevel:1, maxLevel:7, uniqueness:'NODE_PATH'}) YIELD path
WITH path, reduce(x=0,a in relationships(path)|x+a.Cost) as value 
ORDER BY value DESC 
LIMIT 1 
RETURN path;

Уникальность NODE_PATH гарантирует, что узел не может использоваться более одного раза для одного пути.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...