我运行这个:
MATCH (b:Bisac) WHERE (b.bisac_code =~ '.*000000') SET b:Main;
现在我想删除标记为Main的节点。查询
match (m:Main)-[r]-() delete r, m;
需要很长时间,并且只有52个节点需要删除。我哪里做错了?
虽然这些删除永远不会完成,但没有其他查询返回。数据库引擎似乎不再响应了。
过了一会儿,像这样失败:
match (m:Main)-[r]-() delete r, m;
Error occurred in server thread; nested exception is:
java.lang.OutOfMemoryError: Java heap space
再次提到:当这是无休止地运行时,没有其他查询返回,没有其他会话可能被打开。显然,数据库的工作方式就像一个单用户/单连接/单线程系统。
首先要确保只有52:
MATCH (m:Main) RETURN count(m)
除此之外,您可以尝试以下查询:
MATCH (m:Main) OPTIONAL MATCH m-[r]-() DELETE r, m;
虽然我不太确定为什么另一个需要这么多资源。
如果我是你,我会尝试将关系和节点删除分开,运行两个单独的查询:
match (m:Main)-[r]-() delete r;
match (m:Main) delete m;
不确定这是不是一个好主意,但我怀疑Neo4j必须推迟删除您的第一个查询类型中的关系,并将某种关系标记为"to_be_deleted"。数据库中有这么多的关系,这可能会导致问题。
我更改了neo4j-wrapper.conf文件中的以下参数。
wrapper.java.initmemory=10240
wrapper.java.maxmemory=10240
我也删除了所有的东西,重新加载没有SET Main。我永远不会再使用它,因为它不清楚如何消除时,不再需要