我正在尝试使用cypher将大约500,000个节点的中等数据集导入neo4j。我在带有SSD的3.4 GHz i7 iMac上本地运行neo4j-community-2.0.0-M05。
我正在将密码传递给neo4j shell,将每40k行包装成一个事务。
我正在使用标签,在开始之前,我在每个标记节点的一个属性上创建了索引。
当我昨晚离开时,MATCH CREATE UNIQUE每人约需15ms。今天早上他们大约需要6000毫秒。
慢查询看起来像这样
MATCH n:Artifact WHERE n.pathId = 'ZZZ' CREATE UNIQUE n-[r:DEPENDS_ON]->(a:Artifact {pathId: 'YYY'}) RETURN a
1 row
5719 ms
pathId已编入索引。
我知道这是一个里程碑式的构建,可能没有性能优化。但是我通过导入的方式不到三分之一,而且它的速度越来越慢。
我应该查看除cypher之外的其他一些方法来导入这些数据吗?
答案 0 :(得分:2)
我只是想回答我自己的问题以防其他人发现这个问题。感谢Peter建议批量导入项目。我使用了2.0 tree。
我的工作流程最终是(1)将所有数据加载到关系数据库中,(2)清理重复数据,然后(3)编写脚本以将数据导出为CSV文件。
使用cypher,我杀了它之前24小时都运行了导入。使用java导入工具,使用neo4j-community-2.0.0-M06整个导入需要11秒。
结论:不要试图写出密码来导入大块数据。如有必要,花一小时清理数据,然后导出到CSV并使用java批量导入工具。