如何在Memgraph中提升控制过程内存?代码报错求解
问题分析及解决
你的代码核心问题是语法不符合Cypher规范,MEMORY UNLIMITED的放置位置错误。
Cypher解析器处理完call super_awesome_module.do_something(edges)后,预期的是YIELD关键字、分号或语句结束,而你在此位置插入MEMORY,导致解析失败,触发了mismatched input 'MEMORY'的语法错误。
正确的内存控制方式
如果需要为这段查询或过程调用分配无限制内存,有两种正确写法:
为整个查询设置内存限制
将MEMORY UNLIMITED放在查询起始位置,作用于整个查询生命周期:MEMORY UNLIMITED match (n)-[e]->(m) with collect(e) as edges call super_awesome_module.do_something(edges) YIELD * RETURN *;仅为过程调用设置内存限制
若只想给super_awesome_module.do_something分配无限制内存,需将MEMORY UNLIMITED作为CALL子句的一部分,放在过程名之前:match (n)-[e]->(m) with collect(e) as edges CALL MEMORY UNLIMITED super_awesome_module.do_something(edges) YIELD * RETURN *;
注意:上述语法仅适用于Neo4j 4.4及以上版本,低版本不支持直接在Cypher中设置内存提示,需通过修改Neo4j配置文件的相关参数调整内存分配。
内容的提问来源于stack exchange,提问作者KWriter
相关产品推荐
相关产品推荐

