2015-04-13 4 views
0

Я работаю с Neo4j 2.1.7. Я пытаюсь подсчитать пути, начиная с узла и заканчивая на один и тот же узел (т. Е. Петли) с максимальной заданной длиной пути.Neo4j - Показатели количества путей

Мои (очень простой) запрос

match p=(n:MyLabel) -[r*..maxLength]- (n) 
return n.myid, count(p) 

Весь граф имеет 200k узлов, в то время как MyLabel узлы являются только 50k, но у меня очень низкая производительность даже при низких значениях MaxLength (5 или 6).

Как я могу улучшить?

Заранее спасибо

ответ

0

Это глобальный граф запросы, которые будут создавать показательные результаты.

E.g. если у вас есть 100 релей на узел, тогда 6 шагов будут 100^6 = 1.000.000.000.000 путей, которые он найдет на узел, а затем вы также перейдете ко всем узлам.

Я рекомендую вам вместо этого взглянуть на shortestPath, но даже в этом случае сделать это в 50 тыс. Раз по-прежнему много, попробуйте использовать PROFILE для вывода плана запроса, чтобы вы могли видеть количество данных, которые вы касаетесь.

match (n:MyLabel) 
match shortestPath((n)-[*..maxLength]- (n)) 
return n.myid, count(*) 

Возможно, Neo4j 2.2 с новым планировщиком запросов лучше.

+0

Большое спасибо за ваш ответ. Я не понимаю функцию shortestPath: ваш запрос производит 0 результатов, а удаление shortestPath (и использование операции глобального графика) приводит к различным результатам. Можете ли вы указать мне какую-нибудь документацию? большое спасибо – besil

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