Node.js 所有简单(循环)路径查询返回的数据过多->;堆溢出

Node.js 所有简单(循环)路径查询返回的数据过多->;堆溢出,node.js,neo4j,cypher,neo4j-driver,neo4j-desktop,Node.js,Neo4j,Cypher,Neo4j Driver,Neo4j Desktop,我对Neo4j非常陌生,使用带有Javascript驱动程序的Neo4j桌面版本。我的图有大约30000个节点和40000条边。最后一种方法是获取图形中的所有简单循环,但我在尝试执行以下cypher查询时遇到了堆溢出: let res = await session.run('MATCH p=(n)-[*2..4]-(n) RETURN nodes(p)') 这当然是因为查询试图返回找到的所有简单循环,这对我的堆来说非常重要,不幸的是,增加node.js的内存不是一个选项 有没有办法绕过这个问

我对Neo4j非常陌生,使用带有Javascript驱动程序的Neo4j桌面版本。我的图有大约30000个节点和40000条边。最后一种方法是获取图形中的所有简单循环,但我在尝试执行以下cypher查询时遇到了堆溢出:

let res = await session.run('MATCH p=(n)-[*2..4]-(n) RETURN nodes(p)')
这当然是因为查询试图返回找到的所有简单循环,这对我的堆来说非常重要,不幸的是,增加node.js的内存不是一个选项

有没有办法绕过这个问题,从图中得到所有简单的循环

以下是我得到的堆溢出错误:

/Users/paulus/.nvm/versions/node/v15.10.0/bin/node /Users/paulus/routeplanner/RouteFinder.js

<--- Last few GCs --->

[39630:0x104e00000]   227813 ms: Scavenge (reduce) 2033.5 (2077.9) -> 2032.1 (2072.1) MB, 113.5 / 0.0 ms  (average mu = 0.577, current mu = 0.321) allocation failure 
[39630:0x104e00000]   228171 ms: Scavenge (reduce) 2036.5 (2072.6) -> 2035.5 (2075.6) MB, 28.6 / 0.0 ms  (average mu = 0.577, current mu = 0.321) allocation failure 
[39630:0x104e00000]   228558 ms: Scavenge (reduce) 2039.1 (2075.6) -> 2038.5 (2080.4) MB, 28.2 / 0.0 ms  (average mu = 0.577, current mu = 0.321) allocation failure 


<--- JS stacktrace --->


<--- Last few GCs --->

[39630:0x104e00000]   227813 ms: Scavenge (reduce) 2033.5 (2077.9) -> 2032.1 (2072.1) MB, 113.5 / 0.0 ms  (average mu = 0.577, current mu = 0.321) allocation failure 
[39630:0x104e00000]   228171 ms: Scavenge (reduce) 2036.5 (2072.6) -> 2035.5 (2075.6) MB, 28.6 / 0.0 ms  (average mu = 0.577, current mu = 0.321) allocation failure 
[39630:0x104e00000]   228558 ms: Scavenge (reduce) 2039.1 (2075.6) -> 2038.5 (2080.4) MB, 28.2 / 0.0 ms  (average mu = 0.577, current mu = 0.321) allocation failure 


<--- JS stacktrace --->

FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory
FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory

<--- Last few GCs --->

[39630:0x104e00000]   227813 ms: Scavenge (reduce) 2033.5 (2077.9) -> 2032.1 (2072.1) MB, 113.5 / 0.0 ms  (average mu = 0.577, current mu = 0.321) allocation failure 
[39630:0x104e00000]   228171 ms: Scavenge (reduce) 2036.5 (2072.6) -> 2035.5 (2075.6) MB, 28.6 / 0.0 ms  (average mu = 0.577, current mu = 0.321) allocation failure 
[39630:0x104e00000]   228558 ms: Scavenge (reduce) 2039.1 (2075.6) -> 2038.5 (2080.4) MB, 28.2 / 0.0 ms  (average mu = 0.577, current mu = 0.321) allocation failure 


<--- JS stacktrace --->

FATAL ERROR: MarkCompactCollector: young object promotion failed Allocation failed - JavaScript heap out of memory

Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
/Users/paulus/.nvm/versions/node/v15.10.0/bin/node/Users/paulus/routeplanner/RouteFinder.js
[39630:0x104e00000]227813毫秒:清除(减少)2033.5(2077.9)->2032.1(2072.1)MB,113.5/0.0毫秒(平均mu=0.577,当前mu=0.321)分配失败
[39630:0x104e00000]228171毫秒:清除(减少)2036.5(2072.6)->2035.5(2075.6)MB,28.6/0.0毫秒(平均mu=0.577,当前mu=0.321)分配失败
[39630:0x104e00000]228558毫秒:清除(减少)2039.1(2075.6)->2038.5(2080.4)MB,28.2/0.0毫秒(平均mu=0.577,当前mu=0.321)分配失败
[39630:0x104e00000]227813毫秒:清除(减少)2033.5(2077.9)->2032.1(2072.1)MB,113.5/0.0毫秒(平均mu=0.577,当前mu=0.321)分配失败
[39630:0x104e00000]228171毫秒:清除(减少)2036.5(2072.6)->2035.5(2075.6)MB,28.6/0.0毫秒(平均mu=0.577,当前mu=0.321)分配失败
[39630:0x104e00000]228558毫秒:清除(减少)2039.1(2075.6)->2038.5(2080.4)MB,28.2/0.0毫秒(平均mu=0.577,当前mu=0.321)分配失败
致命错误:MarkCompactCollector:年轻对象升级失败分配失败-JavaScript堆内存不足
致命错误:MarkCompactCollector:年轻对象升级失败分配失败-JavaScript堆内存不足
[39630:0x104e00000]227813毫秒:清除(减少)2033.5(2077.9)->2032.1(2072.1)MB,113.5/0.0毫秒(平均mu=0.577,当前mu=0.321)分配失败
[39630:0x104e00000]228171毫秒:清除(减少)2036.5(2072.6)->2035.5(2075.6)MB,28.6/0.0毫秒(平均mu=0.577,当前mu=0.321)分配失败
[39630:0x104e00000]228558毫秒:清除(减少)2039.1(2075.6)->2038.5(2080.4)MB,28.2/0.0毫秒(平均mu=0.577,当前mu=0.321)分配失败
致命错误:MarkCompactCollector:年轻对象升级失败分配失败-JavaScript堆内存不足
过程结束,退出代码为139(被信号11:SIGSEGV中断)

在不知道图形的数据模型的情况下,很难给出精确的解决方案,但使用skip/limit以较小的体积获取数据可能会有所帮助

这将获得前100个模式:

MATCH p=(n)-[*2..4]-(n) RETURN nodes(p) SKIP 0 LIMIT 100
这是下一个100:

MATCH p=(n)-[*2..4]-(n) RETURN nodes(p) SKIP 100 LIMIT 100

这很好,但是我如何找出限制呢?如果你参考了模式的总数,你可以首先用一个计数(匹配p=(n)-[*2..4]-(n)返回计数(p))来查询总数。但是如果你提到批量大小,你必须根据你拥有的数据量和它的大小来计算它(大到不能做很多查询,但又不会大到可以失败)。。。谢谢