Обнаружение циклов в графе свойств neo4j с использованием cypher
Каков наилучший способ обнаружения циклов на графике значительного размера с использованием cypher.
У меня есть график, который имеет около 250000 узлов и около 270000 отношений, и я хотел бы обнаружить циклы на подграфе около 10 тыс. узлов и задействовать отношения 100 тыс. Цифр, который я написал, похож на
start
n = node:node_auto_index(some lucene query that returns about 10k nodes)
match
p = n-[:r1|r2|r3*]->n
return p
Однако это не очень эффективно.
Может кто-нибудь предложить лучший способ сделать это.
Ответы
Ответ 1
1) Подсчитать узлы без знака
2) Узлы флагов без исходящих отношений (листья)
3) Узлы флагов без входящих отношений (корней)
4) Если какие-либо узлы были помечены в 2 или 3, вернитесь к шагу 1
5) Если узлы без флажка остаются, у вас есть как минимум 1 цикл
цикл будет находиться в наборе неустановленных узлов
поиск узлов с наименьшим краем [in | out] может помочь
если их еще слишком много, чтобы идентифицировать цикл