我的图形数据库有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)