Я разрабатываю совершенно новое приложение, которое много полагается на даты. В принципе, каждый запрос, который я делаю, начинается с ряда дат. Я сделал дату дерева, как это:Соотношение отношений по пути - Проблемы с производительностью
(:Date)-[:NEXT_DAY]->(:Date)-[:NEXT_DAY]-> ....
Я обнаружил, что использование [:NEXT_DAY]
отношений является очень эффективным для запроса диапазонов и результатов заказа.
У меня есть много документов, связанных с этими днями:
(:Document)-[:PUBLISHED_ON]->(:Day)
Более основной запрос должен соответствовать всем документам, опубликованных по дате пути. Это мой фактический запрос:
MATCH DatePath = (b:Date)-[:NEXT*30]->(e:Date {day:20150101})
UNWIND nodes(DatePath) as date
WITH date
MATCH (doc:Document)-[:PUBLISHED_ON]->(date)
RETURN count(doc)
Запрос занимает около секунды, чтобы вернуть менее 30 тыс. Узлов. Поэтому мой вопрос: это нормальное поведение? Или, может быть, есть лучший способ сопоставить отношения по пути?
Мой ': Дата (день)' INDEX был в порядке, но вы абсолютно правы: сначала раскалываете запрос и опускаете сделанное большое улучшение! Я пришел с 1800 мс до 80 мс! Большое спасибо за вашу помощь – Creaforge
Посмотрите на GraphAware TimeTree, может представлять интерес для вашего прецедента: https://github.com/graphaware/neo4j-timetree –