我构建了一个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导入它。
答案 0 :(得分:3)
无需增加限制。该限制基本上决定了交易的规模。由于事务在刷新到磁盘之前在内存中建立(在提交时),因此事务的最大大小由可用的Java堆空间量决定。
match(n:Label)
with n limit 10000
delete n
return count(n)
此语句抓取标记为Label
的前10000个节点并删除它们。没有首先选择节点的已定义顺序。
在删除前10k个节点后,再次调用同一语句会再次获取10k个节点并删除它们。
返回中的count
报告已处理的节点数。您调用该语句,直到报告的值为0并且所有Label
个节点都消失。