python - Neo4J 与 NeoModel : How to speed up graph creation?

标签 python neo4j graph-databases neomodel

我正在尝试使用 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?

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

请查看: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 就足够了。

关于python - Neo4J 与 NeoModel : How to speed up graph creation?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49024029/

相关文章:

Spring 数据 Neo4j : persist() method undefined

neo4j - Cypher:创建已存在的架构索引

javascript - Neo4j连接nodejs报错

reflection - 如何通过Cypher中的属性名称字符串访问和更改节点属性值?

python - 如何在Python中从用户输入中找到关键字?

neo4j - 使用导入工具将 TSV 数据导入 Neo4j

graph-theory - ArangoDB AQL 中的不相交子图

通过字节码优化 Python

python - 如何根据python中的列表对字典进行排序

python - 在 Mac 上安装适用于 Python 的 Poppler