2016-04-01 1 views
0

Я пытаюсь запустить эти два запроса cypher, и я не понимаю разницу между ними. Цель здесь состоит в том, чтобы найти несколько путей между заданными двумя узлами, чтобы сумма транзитного времени в этом пути находилась в порядке возрастания.разница между двумя запросами cypher

Q1:

MATCH p =(:`ml` { placeId: 960 })-[:ETA*0..10]->(:`ml` { placeId: 814 }) 
return p, p as allshortestPaths, 
REDUCE(time=0, r in relationships(p) | time+r.transit_time) AS totalTime 
ORDER BY totalTime ASC 

Q2:

MATCH (from:`ml` { placeId: 960}), (to: `ml` {placeId: 814}) , 
paths = allShortestPaths((from)-[:ETA*]->(to)) 
WITH REDUCE(time = 0, rel in rels(paths) | time + rel.transit_time) 
AS totalTime, paths 
RETURN (totalTime) 
ORDER BY totalTime ASC 

В этом я получить лучший результат из Q1 Кроме того, эти операции занимают очень много времени. Любой другой лучший способ сделать это может использовать алгоритмы графа? Я думаю, что это можно сделать с помощью алгоритма Дейкстры, любая помощь о том, как указать cost_parameter там, и как использовать, будет замечательно. Я использую py2neo и neo4j.

ответ

0

Neo4j имеет integrated tool to explain queries, на самом деле это не объяснение, а профилирование.

Вы также можете найти here документацию о плане выполнения, чтобы объяснить каждую операцию.

Пример плана выполнения со сложным запросом: Neo4j execution plan example

source

Смежные вопросы