我正在尝试将 Neo4J 与 neomodel 一起使用来表示一些图形关系。但是,当我尝试构建具有数百万个节点和关系的图形时,我遇到了性能问题。
当我有 10k 个节点和它们之间的 30k 个关系的图形时,需要 4:20 秒才能将其导入 Neo4j。创建节点需要 1:40,与 call 建立关系需要 2:40 foo.connect(bar)
。它非常慢。
当我使用neomodel提供的批处理api时,我可以在4s内创建所有节点,但不影响创建关系所需的时间。
Neomodel 使用 CYPHER 查询来逐一创建关系。因此,我决定编写自己的查询,首先匹配创建 100 个关系所需的所有节点,然后创建这些关系。它发生了一两次,它在几秒钟内完成。在其他情况下,它又需要几分钟。当我使用 htop 查看时,我可以看到发生了什么,neo4j 数据库充分利用了 2 个内核。
我发现了以下文章:Import 10M Stack Overflow Questions into Neo4j In Just 3 Minutes正在使用neo4j-import
,但我想避免它。
我使用的是默认配置,但我使用dbms.jvm.additional=-Xss256M
的是能够执行那些批量关系查询。我对用于节点查找的属性具有唯一索引。在每次实验之前,我都会删除所有节点和关系。
你有什么想法,如何加快速度?