我正在尝试使用Neo4J和neomodel来表示一些图形关系。但是,当我尝试构建具有数百万个节点和关系的图形时,我遇到了性能问题。
当我有10k节点的图形和它们之间的30k关系时,需要4:20s才能将它导入Neo4j。创建节点需要1:40,而调用foo.connect(bar)
需要2:40创建关系。它非常慢。
当我使用neomodel提供的批处理api时,我能够在4s内创建所有节点,但它不会影响创建关系所需的时间。
Neomodel正在使用CYPHER查询来创建1对1的关系。因此,我决定编写自己的查询,首先匹配创建100个关系所需的所有节点,然后创建这些关系。它发生了一两次,几秒钟就完成了。在其他情况下,它需要几分钟。当我使用htop查看,正在发生的事情,我可以看到,neo4j数据库完全利用了2个内核。
我发现以下文章:Import 10M Stack Overflow Questions into Neo4j In Just 3 Minutes正在使用neo4j-import
,但我想避免使用。
我使用默认配置,但我使用dbms.jvm.additional=-Xss256M
来执行这些批处理关系查询。我有用于节点查找的唯一索引属性。在每次实验之前,我会删除所有节点和关系。
你有什么想法,如何加快速度?
答案 0 :(得分:1)
您的节点有多少个rel?
通常我认为对象映射器不适合大规模插入。
您是否可以为超过1秒的查询启用查询日志记录并共享neomodel生成的查询?
dbms.jvm.additional=-Xss256M
过多。这意味着每个线程分配256M内存,通常2M就足够了。