【发布时间】:2015-03-07 18:56:56
【问题描述】:
我已经根据Nicole White 在this link 中的这个答案为我的neo4j 数据库建模
我也成功测试了密码查询
MATCH (a:Stop {name:'A'}), (d:Stop {name:'D'})
MATCH route = allShortestPaths((a)-[:STOPS_AT*]-(d)),
stops = (a)-[:NEXT*]->(d)
RETURN EXTRACT(x IN NODES(route) | CASE WHEN x:Stop THEN 'Stop ' + x.name
WHEN x:Bus THEN 'Bus ' + x.id
ELSE '' END) AS itinerary,
REDUCE(d = 0, x IN RELATIONSHIPS(stops) | d + x.distance) AS distance
针对一个有 10 个节点的小型测试图。
但我的原始图表包含大约 2k 个节点和 6k 个关系,导致查询出现问题。查询停止了,我得到一个错误:
java.lang.OutOfMemoryError: Java 堆空间
您能帮我优化查询或任何其他解决方案吗?
谢谢
【问题讨论】:
-
我想更多信息会很有用,比如你的架构索引、neo4j 配置(尤其是堆设置)和执行计划的输出。
-
这里的这一位:
stops = (a)-[:NEXT*]->(d)似乎枚举了通过您的数据的大量路径,考虑到它不是特定于任何公交路线,而只是询问可以从哪些其他车站到达哪些车站.如果你有一个高度互联的公交路线系统,那将是很多东西。一些路径可能是直接的,其他路径可能会穿过您的大部分系统(通过连接点)。 -
是的,这似乎是问题所在。那么我有什么选择?我是 cypher 新手,非常感谢一些指导。
标签: neo4j query-optimization cypher graph-databases