2016-09-27 3 views
2

У меня есть график neo4j, который составлен Serie как узлы и EDGE как отношения. У меня есть запрос, который способен вычислять allShortestaPaths между двумя узлами.Выполнение запроса NEO4J, запрашивающего несколько раз

MATCH (serie1:Serie {serie_id: 'id1'}), 
     (serie2:Serie {serie_id: 'id2'}), 
     p = allShortestPaths((serie1)-[EDGE*..6]-(serie2)) 
RETURN p as shortestPath 

Мое приложение делает несколько итераций, на каждой итерации выполнить запрос несколько раз с помощью двух различных узлов (serie1, serie2), а затем записывает новые КРАЯ на графике.

Первая итерация (20 запросов) выполняется очень быстро, но на второй итерации время ответа начинает увеличиваться, и запрос занимает более 3 минут при каждом выполнении.

Я создал индекс по свойству serie_id, а также увеличил кучу пространства до 8 ГБ пространства, а размер кеша страницы также был включен с достаточным пространством.

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

Я полагаю, что проблема связана с количеством исполнений, но не уверен в том, как ее оптимизировать.

+0

какая версия neo4j вы используете? –

+0

Вы можете «ПРОФИЛЬ» один из запросов до и после первой итерации, чтобы сравнить результаты? –

+0

Im using neo4j version 3.6 – silvestrelosada

ответ

0

Мое приложение делает несколько итераций, на каждой итерации выполнить запрос несколько раз с помощью двух различных узлов (serie1, serie2), а затем записывает новые КРАЯ на графике.

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

Я хотел бы предложить вам проверить файл logs/debug.log, если вы видите такие строки:

2016-09-22 09:32:39.178+0000 INFO [o.n.k.i.a.i.s.OnlineIndexSamplingJob] Sampled index :WithIndex(id) with 1001 unique values in sample of avg size 1001 taken from index containing 1001 entries 
2016-09-22 09:32:49.179+0000 INFO [o.n.k.i.a.i.s.OnlineIndexSamplingJob] Sampled index :WithIndex(id) with 1001 unique values in sample of avg size 1001 taken from index containing 1001 entries 

AND 

2016-09-22 07:26:01.359+0000 INFO [o.n.c.i.ExecutionEngine] Discarded stale query from the query cache: CREATE (n:Node {id: {i} }) 
2016-09-22 07:26:01.361+0000 INFO [o.n.c.i.CypherCompiler] Discarded stale query from the query cache: CREATE (n:Node {id: {i} }) 
2016-09-22 07:26:10.403+0000 INFO [o.n.c.i.ExecutionEngine] Discarded stale query from the query cache: CREATE (n:Node {id: {i} }) 
2016-09-22 07:26:10.404+0000 INFO [o.n.c.i.CypherCompiler] Discarded stale query from the query cache: CREATE (n:Node {id: {i} }) 

Конечно эти строки отражают запросы я делаю в моем приложении, ваши запросы должны появиться вместо этого. Вы также можете увидеть паузы GC во время этих журналов.

Вы можете настроить вызов, на который запросы считаются устаревшими. Установка описана здесь:

https://neo4j.com/docs/operations-manual/current/reference/#config_cypher.statistics_divergence_threshold

и здесь

https://neo4j.com/docs/operations-manual/current/reference/#config_cypher.min_replan_interval

Там нет вне стоимости коробки, я бы увеличил первый до 0,8, может быть, но это не так так как это может повлиять на другие запросы.

+0

Я вижу некоторые запросы, отмеченные как устаревшие, но эти запросы не воспринимаются слишком много времени Отброшенный устаревший запрос из кеша запроса: MATCH (серия: Serie {serie_id: 'serieie1}}) RETURN count (*). Я думаю, что проблема связана с сборщиком мусора.Существует так много журналов 2016-09-27 16: 20: 01.946 + 0000 WARN [o.n.k.i.c.MonitorGc] Монитор GC: потоки приложений заблокированы за 78198мс. 2016-09-27 16: 21: 22.061 + 0000 WARN [o.n.k.i.c.MonitorGc] Монитор GC: потоки приложений заблокированы для 79705ms. – silvestrelosada

+0

Вы создаете новые узлы «Серии» во время записи? Как предложил Фрэнк, пожалуйста, обновите свой вопрос с помощью начального профиля и запроса, который вы выполняете для написания новых данных. –

+0

Хорошо, я вижу, вы уже добавили план запроса. –

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