Neo4J与NeoModel:如何加速图表创建?

时间:2018-02-28 07:22:52

标签: python neo4j graph-databases neomodel

我正在尝试使用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来执行这些批处理关系查询。我有用于节点查找的唯一索引属性。在每次实验之前,我会删除所有节点和关系。

你有什么想法,如何加快速度?

1 个答案:

答案 0 :(得分:1)

您的节点有多少个rel?

通常我认为对象映射器不适合大规模插入。

请查看:https://medium.com/@mesirii/5-tips-tricks-for-fast-batched-updates-of-graph-structures-with-neo4j-and-cypher-73c7f693c8cc

您是否可以为超过1秒的查询启用查询日志记录并共享neomodel生成的查询?

dbms.jvm.additional=-Xss256M过多。这意味着每个线程分配256M内存,通常2M就足够了。