Neo4j在尝试返回适合某个描述的节点数时出现内存不足错误

时间:2017-05-06 12:40:05

标签: neo4j

关注的问题是:

MATCH (node:Wallet)
WHERE size((node)-[:SendTo]-()-[:SendTo]-())>0 or size(()-[:SendTo]-(node)-[:SendTo]-())>0
RETURN count(node)

数据库的大小为12.5 GB。电子钱包节点的数量超过100000.

我尝试使用Java over Eclipse运行查询,其中VM参数为-Xmx28000m -Xms28000m -Xss9m (我也在neo4j.conf中设置了相应的行:

dbms.memory.heap.initial_size=28000m
dbms.memory.heap.max_size=28000m
dbms.jvm.additional=-Xss4m

之后不久就会出现内存不足的错误。任务管理器显示相应的程序使用大约28 GB。 (它是一台64位计算机,内存为32 GB。)

周围有什么办法吗?

1 个答案:

答案 0 :(得分:1)

您可以稍微改进一下谓词。在其中一种情况下,我们可以使用关系存储(它不需要扩展),在另一种情况下我们可以使用exists()函数。

试试这个。

MATCH (node:Wallet)
WHERE size((node)-[:SendTo]-()) >= 2 or exists((node)-[:SendTo*2]-())
RETURN count(node)