测量NEO4j中2个节点之间距离的最快方法是什么

时间:2015-02-17 19:00:42

标签: neo4j

我的(day)节点有(:NEXT)关系,所以

  

(年{年:2014}) -      [:HAS_MONTH] - >(月{月:1}) -      [:HAS_DAY] - >(day {day:1}) -           [:NEXT] - >(day {day:2})

等等。

测量2个节点之间距离的最快方法是什么?如果我想说我想从2020年开始测量 - >第12个月 - >第31天回到2014年1月1日?

我试图使用[:NEXT *]然而只是超时,将其降低到[:NEXT * 0..100]似乎执行(虽然不是很快)

1 个答案:

答案 0 :(得分:3)

也许发布您使用的查询可以帮助我们优化它,它也会显示您尝试的内容以及您是如何尝试的。

通常,如果您找到一种有效匹配起始节点和结束节点的方法,这种查询应该运行得非常快。

在当前模型中,年节点是唯一的,然后应使用唯一约束模式索引,从那里您可以有效地找到所需的节点。

MATCH (y:Year {year:2020})
MATCH (y)-[:HAS_MONTH]->(month {month:12})-[:HAS_DAY]->(day {day:31})
WITH day
MATCH (y2:Year {year:2014})
MATCH (y2)-[:HAS_MONTH]->(month2 {month:1})-[:HAS_DAY]->(day2 {day:1})
MATCH p=(day2)-[:NEXT*]->(day)
RETURN length(p)

但是,有几点可以帮助您的情况并优化当前查询:

  • 在日节点上使用时间戳索引属性以实现真正快速的直接访问
  • 在年份和12月份节点之间使用LAST关系,FIRST和1月相同,每月相同天数
  • 确保在年,月和日节点上使用标签和索引/约束

此外,您可能需要查看GraphAware TimeTree Neo4j插件:https://github.com/graphaware/neo4j-timetree