麻烦帮忙看看这个查询消耗8G内存是否正常?

数据量如下图:

执行如下查询语句后报内存不足,查看服务器发现占用了8G内存:
MATCH p = (a)-[e:zjmx*4]->(b) WHERE id(a) == ‘2BBE92FEC73208A3E063D00CC70AE4C9’ and all(i IN range(1, size(e)-1) WHERE e[i].jysj > e[i-1].jysj) RETURN p;


请问这种情况下占用这么多内存是否正常?

你的 space 的 vid的配置是什么?

如果这个路径关联度比较复杂,是有可能的。比如a->b,a->c两个路径,这样a会在内存里存两份。所以如果很复杂的路径关系,可能会导致一些数据在内存里复制很多份

vid设置的是点的UUID主键


从这个点出发的边只有11条,麻烦问一下,怎么看这个复杂度?

MATCH p = (a)-[e:zjmx*4]->(b) WHERE id(a) == ‘2BBE92FEC73208A3E063D00CC70AE4C9’ RETURN count(p);

看看?8G 内存是所有路径加起来的

方杨老师,给了个语句,可以看到。如果那个语句还查不出来,那你只能使用笨方法,一跳一跳分批查,看看是多少了。或者先加大点内存,看下能不能查出来方杨老师给的语句


4跳内存会溢出,3跳显示有这么多,是因为关联边太多了么?

是的,就是关联到数据太多导致。
目前 cypher 到语法没有办法做到一边过滤一边查询,因此,你现在的语法表达是捞到所有路径以后做过滤的做法。因此路径太多了导致内存占用大

使用find path是不是也没有办法做到这种边时序条件的过滤?比方说前一条边的交易时间小于后一条边的交易时间?
或者能不能实现自查询嵌套,我先用条件过滤生成一个子图,然后再根据这个子图执行上面的查询语句?

目前没有其他的好的方法。企业版内存消耗会好不少

此话题已在最后回复的 30 天后被自动关闭。不再允许新回复。