我一直在尝试按照neo4j google群组和其他在线来源的建议运行此查询:
START n = node(*)MATCH n- [r?] - ()WHERE ID(n)> 0 DELETE n,r;
为了删除测试之间的所有节点和关系.当我从控制台这样做时,我用完了java堆空间.当我从python(使用新的graph_db.clear(),这看起来使用相同的查询),我得到一个"SystemError:None",我认为,这是相同的Java堆空间错误.我有一个拥有500k节点,只有5k关系和7M属性的数据库.我使用neo4j-1.8.1运行Mac笔记本电脑(10.6.8),内存为8GB.我想有点惊讶的是删除节点(基本上没有关系,所以非常小的子图)会超过java堆空间,但我对neo4j的工作方式非常天真.任何关于如何前进的建议都表示赞赏.我知道数据目录中的rm -rf从头开始可以工作,但我认为可能会有一个不那么激烈的解决方案.
[交叉发布到neo4j google群组]
Axe*_*ner 18
上面的cypher语句导致所有节点(除了ID为0的根节点)在一个事务中删除之前被实例化.当使用500k节点完成时,这会占用太多内存.
尝试将要删除的节点数量限制在10k-50k左右,例如:
START n = node(*)
MATCH n-[r?]-()
WHERE (ID(n)>0 AND ID(n)<10000)
DELETE n, r;
START n = node(*)
MATCH n-[r?]-()
WHERE (ID(n)>0 AND ID(n)<20000)
DELETE n, r;
Run Code Online (Sandbox Code Playgroud)
等等
但是,删除整个数据库目录没有任何问题,这是一个很好的做法.
小智 10
根据neo4j文档,删除图表是通过以下方式完成的:
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r;
Run Code Online (Sandbox Code Playgroud)
为了避免java堆空间错误,我将此代码与LIMIT结合在一起:
MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 100000 DELETE n,r;
Run Code Online (Sandbox Code Playgroud)
它可以减少节点数量,并最终使用第一个,推荐的和更通用的代码.
问号不再起作用.使用可选匹配..以下应该有效.
START n = node(*)
OPTIONAL MATCH n-[r]-()
WHERE (ID(n)>0 AND ID(n)<10000)
DELETE n, r;
Run Code Online (Sandbox Code Playgroud)
从 Neo4j 2.3.3 开始,引入了一种删除节点和关系的新方法。请参阅2.3.3 文档。
例如,您可以这样做:
MATCH(n) DETACH DELETE n;
Run Code Online (Sandbox Code Playgroud)