当通过 py2neo for Python 使用 REST API 时,我发现 Neo4j 添加节点和关系/弧/边的速度很慢。我知道这是由于每个 REST API 调用都作为一个独立的事务执行。
具体来说,添加数百对具有它们之间关系的节点需要几秒钟,在 localhost 上运行。
在使用 Python 的同时显着提高性能的最佳方法是什么?
使用bulbflow 和Gremlin 会是构建批量插入事务的一种方式吗?
谢谢!
有几种方法可以使用py2neo进行批量创建,每种方法只调用一次服务器。
create
方法在单个批次中构建多个节点和关系。WriteBatch
类(本周刚发布)手动制作一批节点和关系(这真的只是1的手动版)。如果您有一些代码,我很乐意查看它并就性能调整提出建议。还有很多测试你可能会从中获得灵感。
干杯,尼日
除非您进行批量插入,否则 Neo4j 的写入性能很慢。
Neo4j 批量导入器 ( https://github.com/jexp/batch-import ) 是将数据加载到 Neo4j 中的最快方法。它是一个 Java 实用程序,但您不需要了解任何 Java,因为您只是在运行可执行文件。它处理类型化的数据和索引,并从 CSV 文件导入。
要将其与 Bulbs ( http://bulbflow.com/ ) 模型一起使用,请使用模型get_bundle()
方法获取数据、索引名称和索引键,为插入做好准备,然后将数据输出到 CSV 文件。或者,如果您不想为数据建模,只需将数据从 Python 输出到 CSV 文件。
这对你有用吗?
网上有很多关于这个问题的旧答案,以至于我花了很长时间才意识到 neo4j 附带了一个导入工具。它非常快,是我能找到的最好的工具。
如果我们要导入学生节点,这是一个简单的示例:
bin/neo4j-import --into [path-to-your-neo4j-directory]/data/graph.db --nodes students
学生文件包含如下所示的数据,例如:
studentID:Id(Student),name,year:int,:LABEL
1111,艾米,2000,学生
2222,简,2012,学生
3333,约翰,2013,学生
解释:
这是它的文档:http: //neo4j.com/docs/stable/import-tool-usage.html
注意:我意识到这个问题特别提到了 python,但另一个有用的答案提到了一个非 python 解决方案。
好吧,我自己也需要 neo4j 的大规模性能。我最终做了以下事情来提高图形性能。