Neo4j图形数据库java.lang.OutOfMemoryError:java堆空间。Neo4j图形数据库

Neo4j图形数据库java.lang.OutOfMemoryError:java堆空间。Neo4j图形数据库,java,neo4j,cypher,database,nosql,Java,Neo4j,Cypher,Database,Nosql,我已经成功地将dblp数据集迁移到neo4j数据库中,并使用neo4jShell运行cypher命令。该数据库有数百万个节点以及出版物和作者之间的关系。现在,当我尝试在neo4j数据库上运行一个查询时,需要10到12个小时的处理时间,然后出现了这个错误 服务器线程中发生错误; 嵌套异常为:java.lang.OutOfMemoryError:java堆空间 我使用的是neo4j社区版2.2.3, jdk 1.7机器,配备8GB内存和核心i7处理器 查询: neo4j-sh (?)$ MATCH

我已经成功地将dblp数据集迁移到neo4j数据库中,并使用neo4jShell运行cypher命令。该数据库有数百万个节点以及出版物和作者之间的关系。现在,当我尝试在neo4j数据库上运行一个查询时,需要10到12个小时的处理时间,然后出现了这个错误

服务器线程中发生错误; 嵌套异常为:java.lang.OutOfMemoryError:java堆空间

我使用的是neo4j社区版2.2.3, jdk 1.7机器,配备8GB内存和核心i7处理器

查询:

neo4j-sh (?)$ MATCH (p:`publication`)-[:`publishedby`]->(a:`author`)
RETURN p.year, p.type, a.id, count(*) order by a.id desc LIMIT 25;

专家们请告诉我如何摆脱这个异常。

也许您应该为java进程设置更多的最大内存。Java进程最多只使用配置的最大内存量,默认情况下,它通常只有256 MB。使用-Xmx参数来实现这一点。请阅读此文章以获得更详细的解释


请注意,必须使用64位jdk和64位操作系统将Xmx设置为大于4 GB。

由于您的数据集是公共数据集,如果您可以共享数据库,这将非常有用

一般来说,您正在计算数百万或十亿条路径,这些路径是在事实发生后聚合的,这只需要一段时间。 加上可能内存太少和磁盘速度慢,从磁盘加载数据需要很长时间

这是一个全局图查询,您可以看到,如果以
PROFILE
作为前缀运行它

确保您的id属性为数字

我会这样更改查询:

// this is the expensive operation, to order millions of authors by id
// still, do it and take the top 25
MATCH (a:author) WITH a order by a.id LIMIT 25
// find publications for the top 25 authors
MATCH (a)<-[:publishedby]-(p)
// return aggregation
RETURN a.id, p.year, p.type, count(*)
LIMIT 25;

听起来Neo4J不太合适。对于关系数据库来说,这是一个微不足道的问题。对象数据库对于深层对象图很有意义。听起来不像这里的情况。请尝试重写您的查询。示例:
MATCH(a:author)与限制25匹配(p:publication)-[p:publishedby]->(a)按a.id desc返回p.year、p.type、a.id订单
。使用带有语句的
。可能重复@Raedwald。这不是您建议的重复问题,我在neo4j数据库上得到了此异常。我完全了解jvm内存问题。。。但这里的问题是我想要一个如何解决这个问题的解决方案我修改查询或修改neo4jPlease的任何配置将问题标记为重复,而不是用指向另一个SO问题的链接来回答它…我指向一个解决方案并添加了一些建议。我认为我的答案不坏。也许我应该把这个问题标记为一个重复的问题,但Neo4j方面也有解决方案,所以它不完全是重复的。请重新考虑你的否决票。我认为你的建议虽然有效,但应该是评论而不是回答;与一个重复的标志相结合。您是对的,OPs Neo4j查询可能远未得到优化,但由于您的答案没有处理这一点,所以它与此无关。我非常反对填鸭式地对待那些显然懒得像OP这样搜索的人(在它上面和外面有无数的资源描述什么是OutOfMemory错误以及如何处理它),而你的答案并没有添加任何在上面找不到的重要内容,因此,我们投了反对票。@Raedwald这不是你建议的重复问题,我在neo4j数据库中得到了这个例外。我完全了解jvm内存问题。。。但这里的问题是,我想知道如何解决这个问题,我需要修改查询或修改neo4j的任何配置。@Ricardo感谢您的回复bro,实际上我在十亿节点数据集上运行查询时,neo4j数据库有问题。这就是我想要解决的问题。
export JAVA_OPTS="-Xmx4000M -Xms4000M -Xmn1000M" 
bin/neo4j-shell -path data/graph.db -config conf/neo4j.properties