我的图形数据库有350万个节点,数据库的大小为1.6GB,我正在尝试通过neo4jshell与以下查询为所有节点更新一个属性。

Match (p:Person) set p.regId= toInt(p.regId) ;

在执行此操作之前,我已在Person上添加了regId属性的索引。
在执行过程中引发了以下错误

最佳答案

由单个Cypher语句执行的所有更改都在同一事务中执行。事务在内存中累积,并在关闭时持久化。

我猜您的事务在这里增长很大,因此导致内存错误。

解决此问题的通常策略是在cypher语句上使用LIMIT来定义大小,报告所做更改的数量,并运行该语句x次,直到返回值为0。

在您的情况下:

Match (p:Person)
where p.regId <> toInt(p.regId)
with p limit 10000
set p.regId= toInt(p.regId)
return count(p)

10-07 19:01