Cypher Query Выполните много времени, чтобы найти конечный узел - PullRequest
1 голос
/ 18 июня 2019

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

Я использую neo4j

MATCH p=(a:player{id:"500025"})-[:ADDRESS*]->(b:player)
WHERE NOT ((b)-[:ADDRESS]->()) AND (b.playerId = a.playerId)
WITH relationships(p) AS consRel, length(p) AS size, nodes(p) AS consAct
RETURN DISTINCT consAct AS activities,  consRel AS relationships

1 Ответ

1 голос
/ 18 июня 2019

Добавьте верхнюю границу вашего отношения переменной длины, более чем вероятно, что количество возможных путей взлетело до небес и сделало гораздо больше работы, чем может обработать БД (вы также можете проверить настройки конфигурации памяти, в случае кучи или страничного кэша)слишком мало).

Вы можете проверить, сколько путей строится:

MATCH p=(a:player{id:"500025"})-[:ADDRESS*..10]->(b:player)
WHERE NOT ((b)-[:ADDRESS]->()) AND (b.playerId = a.playerId)
RETURN count(p)

Посмотрите, как увеличивается число при увеличении верхней границы ваших отношений var-length,Более чем вероятно, что количество путей увеличивается до миллионов или выше по мере увеличения верхней границы.Вы, вероятно, должны выбрать разумную верхнюю границу и придерживаться ее.

...