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