从Neo4j删除300k +节点

时间:2015-08-20 15:12:36

标签: neo4j nosql

我构建了一个Neo4j数据库。它具有以下属性:

<a id="a" draggable="true">
  <div id="span" draggable="true">and some more text</div>
</a>

我的数据库大小约为2 GB。 现在我犯了一个错误:我添加了 300k 节点,但我必须删除它们。假设这些节点的标签是 Label
首先,我尝试了常见的:

 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-+-+-+-+-+--+-+-+-
 +number of nodes used  + number of properties used + number of relationships used +
 +-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
 +        1.000.085     +            4.000.133      +       2.599.838              + 
 +-+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-+-+-+--+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

我有堆内存错误。

然后我尝试了这个:

match(n:Label)
delete n

然后10000用20000替换,然后30000 ....当我把50000我的堆内存错误。

如何删除这些300k节点?我不想再建立我的数据库,因为我从MongoDB导入它。

1 个答案:

答案 0 :(得分:3)

无需增加限制。该限制基本上决定了交易的规模。由于事务在刷新到磁盘之前在内存中建立(在提交时),因此事务的最大大小由可用的Java堆空间量决定。

match(n:Label)
with n limit 10000
delete n
return count(n)

此语句抓取标记为Label的前10000个节点并删除它们。没有首先选择节点的已定义顺序。

在删除前10k个节点后,再次调用同一语句会再次获取10k个节点并删除它们。

返回中的count报告已处理的节点数。您调用该语句,直到报告的值为0并且所有Label个节点都消失。