2014-12-19 3 views
0

по настройке Neo4j по умолчанию, я создать базу данных с запросомCypher запрос занимает слишком много времени

CREATE (R1:resource { name : '1' }), 
     (R2:resource { name : '2' }), 
     (R3:resource { name : '2' }), 
     (F1:facility { name : '1' }), 
     (F2:facility { name : '2' }), 
     (F10)-[:OUT]->(R6), 
     (R6)-[:IN]->(F3) 

для простоты, я написал часть запроса. Чтобы объяснить, у меня есть 8 ресурсов и 25 объектов, средств или ресурсов с отношениями. У меня 1000 случайно сформированных отношений. Теперь я запрашиваю базу данных с

match (m:facility)-[:OUT]->(n:resource) 
-[:IN]->(k:facility)-[:OUT]->(l:resource) 
-[:IN]->(o:facility) return m,n,k,l,o 

, но это занимает более 15 минут. Разве это не странно Пожалуйста, помогите Thx

+2

Не странно, что это так много, так как вы получаете декартово произведение 4, поэтому O (n^4), что много. Вероятно, вы должны фильтровать узлы. Что именно вы пытаетесь получить с запросом? – zaboco

+0

Я хочу увидеть возможные потоки ресурсов между объектами. Может быть, набор решений будет большим, но, как я читал в «графических базах данных» рудиллических книг, 800 тыс. Строк возвращались через 1-2 секунды. Они цитировались из Neo4j в действии. Они ошибаются? или я что-то пропустил? – kemals

+1

Если у вас есть отношения ': IN' и': OUT', если возможны циклы в этом шаблоне отношений, то ваш запрос кажется, что он оценивает каждый путь между каждым набором узлов в вашей БД. Вы должны установить некоторые ограничения на то, что 'm', и вы должны, вероятно, указать' WHERE m <> k AND k <> o AND n <> l AND l <> o'. – FrobberOfBits

ответ

1

Вы также можете добавить LIMIT 100 к вашему запросу, и попытаться его профиль в Neo4j-оболочки

Вы также должны получить мощность вниз с точки зрения взрывающаяся комбинаторная ширина.

match (m:facility)-[:OUT]->(n:resource)-[:IN]->(k:facility) 
with distinct m,collect(n) as resources_n,k 
match (k)-[:OUT]->(l:resource) 
with distinct with with distinct m,collect(resources_n,k) as flow, l 
match (l)-[:IN]->(o:facility) 
return distinct m,flow,o 
limit 100 
Смежные вопросы