如何解决使用python时neo4j内存不足错误
在 Python 中运行 neo4j 查询时出现以下内存不足错误。我正在使用 neo4j 4.1.0 desktop
。
neo4j.exceptions.ClientError: {code: Neo.ClientError.Procedure.ProcedureCallFailed} {message: Failed to invoke procedure `gds.alpha.shortestPath.deltaStepping.stream`: Caused by: java.lang.OutOfMemoryError: Java heap space}
我已按照说明更改可用内存:https://neo4j.com/docs/operations-manual/current/configuration/neo4j-conf/ 并为 conf 文件中的相关参数分配了 12GB:
dbms.memory.heap.initial_size=12g
dbms.memory.heap.max_size=12g
dbms.memory.pagecache.size=12g
我的数据库有 63,000 个节点和 57,000 个关系
我的 python 代码如下所示,并在循环中调用,每次更改 id
值:
neo4j_session = neo4j_driver.session()
results_data = neo4j_session.run("MATCH (start:Person {id: 21) \
CALL gds.alpha.shortestPath.deltaStepping.stream({ \
nodeQuery:'MATCH(n:Person) RETURN id(n) AS id',\
relationshipQuery:'MATCH (p1:Person {id: 21})-[p1Knows:KNOWS]->(p1s)-[r:IS_MEMBER_OF*..10]-(p2s)<-[p2Knows:KNOWS]-(p2:Person) WHERE p1.id <> p2.id and p1Knows.self_rating <> 0 and p1Knows.self_rating < p2Knows.self_rating with p1,p2,reduce(cost = 0,x IN r | cost + coalesce(x.distance,0)) as cost RETURN id(p1) AS source,id(p2) AS target,cost AS weight',\
startNode: start,\
relationshipWeightProperty: 'weight',\
delta: 3.0,\
writeProperty: 'sssp' \
}) \
YIELD nodeId,distance \
where gds.util.isFinite(distance) \
with nodeId,gds.util.asNode(nodeId) as n,distance \
RETURN n.name AS Name,distance AS Cost \
ORDER BY Cost".format(person_id)).data()
neo4j_session.close()
错误不会每次都出现在同一个 id 上,所以我想知道我是否没有正确使用 python 驱动程序并且没有清理一些东西?
如果没有,我真的需要 12GB 的内存来查询图表吗?
解决方法
我总是调用 write_transaction 然后使用 run 来执行查询对我来说很好用,我的数据库比你的大得多,没有错误。 问题可能是您在 for 循环中打开和关闭会话。
def data(tx):
# run your for loop here
tx.run(" RUN YOUR QUERY ")
with driver.session() as session:
session.write_transaction(data)
driver.close()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。