测量 NEO4j 中 2 个节点之间距离的最快方法是什么
What is the quickest way to measure distance betwen 2 nodes in NEO4j
我有 (day) 节点与 (:NEXT) 关系所以
(year {year:2014})-
[:HAS_MONTH]->(month {month:1})-
[:HAS_DAY]->(day {day:1})-
[:NEXT]->(day {day:2})
等等。
如果假设我想测量从 2020 年 -> 第 12 月 -> 第 31 天到 2014 年 1 月 1 日的距离,测量两个节点之间距离的最快方法是什么?
我曾尝试使用 [:NEXT*] 但是它只是超时,将其降低到 [:NEXT*0..100] 似乎可以执行(虽然不是很快)
也许发布您使用的查询可以帮助我们优化它,它还可以显示您的尝试以及您是如何尝试的。
通常情况下,如果您找到一种有效匹配开始和结束节点的方法,这种查询应该运行非常快。
在您当前的模型中,年份节点是唯一的,因此应该使用唯一约束模式索引,从那里您可以高效地找到您想要的节点。
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 月以及每个月的天数相同
- 确保在年月日节点上使用标签和indexes/constraints
此外,您可能想看看 GraphAware TimeTree Neo4j 插件:https://github.com/graphaware/neo4j-timetree
我有 (day) 节点与 (:NEXT) 关系所以
(year {year:2014})- [:HAS_MONTH]->(month {month:1})- [:HAS_DAY]->(day {day:1})- [:NEXT]->(day {day:2})
等等。
如果假设我想测量从 2020 年 -> 第 12 月 -> 第 31 天到 2014 年 1 月 1 日的距离,测量两个节点之间距离的最快方法是什么?
我曾尝试使用 [:NEXT*] 但是它只是超时,将其降低到 [:NEXT*0..100] 似乎可以执行(虽然不是很快)
也许发布您使用的查询可以帮助我们优化它,它还可以显示您的尝试以及您是如何尝试的。
通常情况下,如果您找到一种有效匹配开始和结束节点的方法,这种查询应该运行非常快。
在您当前的模型中,年份节点是唯一的,因此应该使用唯一约束模式索引,从那里您可以高效地找到您想要的节点。
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 月以及每个月的天数相同 - 确保在年月日节点上使用标签和indexes/constraints
此外,您可能想看看 GraphAware TimeTree Neo4j 插件:https://github.com/graphaware/neo4j-timetree