我有大量高度连接的节点,有时我希望从数据库中删除这些节点。通过几次遍历,我得到了一个要删除的节点列表:
for (Node nodeToDelete : nodesToDelete)
{
for (Relationship rel : nodeToDelete.getRelationships())
{
rel.delete();
}
nodeToDelete.delete();
} 问题是,无论我设置了多大的堆,我总是得到:java.lang.OutOfMemoryError: GC开销限制超过
删除大量节点列表的最佳方法是什么?我知道我必须先删除它们之间的关系,然后才能真正删除它们--我逐步完成了代码,在删除关系时似乎失败了。是否有比我所拥有的更好的删除节点的功能?所有东西都包装在一个非常重要的事务中,因为删除的任何部分都不允许失败--这会是一个问题吗?
谢谢!
发布于 2012-08-26 01:43:46
一批做一次。问题是您的删除被包装在一个事务中,事务可以被恢复,但是为了存储该还原,它被存储在内存中。试着做这个。
long counter = 0;
for (Node nodeToDelete : nodesToDelete)
{
if (counter == 1000) {
tx.success();
tx.finish();
tx = db.beginTransaction();
counter = 0;
}
for (Relationship rel : nodeToDelete.getRelationships())
{
rel.delete();
}
nodeToDelete.delete();
counter++;
} https://stackoverflow.com/questions/12125390
复制相似问题