2017-02-21 16 views
0

Мои данные моделируются таким образом:найти лучшие шаблоны сортировки для каждого узла

У меня есть узлы футболистов, голов и спички. игрок подключен, чтобы соответствовать соотношению [: играл], и к цели с отношением [: забил]. цель связана с соотношением [: scoreIn]. каждый матч имеет свойство (Long) date.

Я пытаюсь найти игроков, набравших наибольшее количество голов в последних 5 матчах (с сортировкой DESC по свойству match.date).

Что было бы самым эффективным способом? Я могу перебирать совпадения каждого игрока, отсортированные по DESC, сохранять идентификаторы совпадений, а затем находить в них (игрок) - [: забил] -> (цель) - [: scoreIn] -> (m) в этих соответствующих матчах, но это очень медленно.

Кажется, что я чего-то не хватает, как я могу найти эти шаблоны с относительной сортировкой?

Благодаря

+2

Показать нас ваш 'медленный' запрос. –

+0

, что-то вроде ответа ниже ... – user3008826

ответ

0

Это может помочь PROFILE или EXPLAIN запроса и вставить полученный план в описание (с расширенными всеми элементами).

Принимая во внимание удар, похоже, что мы ищем самый простой запрос. Один игрок, возможно, набрал много голов, и ему нужно расширить каждый гол и сделать хеш-соединение с забитыми в игре мячами, похоже, что это может быть очень дорого.

Если вместо этого мы получаем последние 5 игр игрока, а затем получаем забитые мячи в игре и отфильтровываем те, что основаны на игроке, что может быть более эффективным.

Что-то вроде:

MATCH (p:Player)-[:played]->(m) 
WITH p, m 
ORDER BY m.date DESC 
WITH p, COLLECT(m)[..5] as matches 
UNWIND matches as match 
MATCH (match)<-[:scoredin]-(g) 
WHERE (g)<-[:scored]-(p) 
RETURN p, COUNT(g) as goalsInLast5 
ORDER BY goalsInLast5 DESC 
LIMIT 10 // or whichever top n you want 

С большой граф, это все еще может быть дорогой запрос.

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

Что-то вроде:

(игрок) - [: набрал] -> (цели: цели {Цели: 4}) - [: scoredin] -> (матч)

+0

Это на самом деле мой «медленный» запрос - получение последних 5 матчей для каждого игрока, получение целей каждого игрока и сортировка. это занимает 10-12 секунд на моем графике в 50 000 совпадений, поэтому я боюсь, что у меня что-то не хватает, и есть лучший способ достичь этой цели. – user3008826

+0

Не могли бы вы ПРОФИЛЬ запроса и добавить его в свое описание (сначала все расширения)? – InverseFalcon

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

  • Нет связанных вопросов^_^