Neo4j 3.0.1 分离删除挂起



尝试清除一种类型的节点以进行每月清除操作。运行:

MATCH (s:SeriesData) DETACH DELETE s

大约有 900,000 个节点需要删除,每个节点只有一个关系。在 Windows 10、英特尔 i7 处理器、快速固态硬盘和 32GB RAM 上运行本地数据库。每个节点都很小,只有一个 UID 和一个浮点属性。Neo4j消耗了>90%的CPU,RAM慢慢增长到10GB以上。此状态将保持不变超过 20 分钟,并且永远不会完成。没有给出任何错误。我假设这是一个错误,因为数据库可以处理数十亿个节点,因此删除 900k 应该是一件容易的事。

关于这个问题的任何想法。我知道我可以用 LIMIT 子句将其分解为块,但我更愿意保持代码干净。Neo4j是否有用于删除的定期提交功能?

如果您使用的是 Neo4j 3.0,请查看 apoc 过程库中的作业管理过程。有一个过程可以为您提供定期提交功能:

CALL apoc.periodic.commit("
    MATCH (s:SeriesData) 
    WITH s LIMIT {num} 
    DETACH DELETE s 
    RETURN count(*)", {num: 1000})

临时事务状态的内存不足。

确保配置了足够的堆,是否可以检查调试.log实际使用了多少堆?

对于 1M 节点 + 1M rels 大约 4G-8G 应该足够了。

您还可以通过运行来计算实际删除了多少:

MATCH (s:SeriesData)
RETURN sum(size((s)--()) + 1) as nodes_and_rels

最新更新