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