我正在尝试使用 cypher 将大约 500,000 个节点的中等数据集导入到 neo4j 中。我在配备 SSD 的 3.4 GHz i7 iMac 上本地运行 neo4j-community-2.0.0-M05。
我将密码传输到 neo4j shell,将每 40k 行包装到一个事务中。
我正在使用标签,在开始之前,我为每个标记节点的一个属性创建了索引。
当我昨晚离开时,MATCH CREATE UNIQUE 每个花费了大约 15 毫秒。今天早上他们花了大约 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 之外的其他方法来导入此数据吗?
我只想回答我自己的问题,以防其他人发现这个问题。感谢 Peter 建议批量导入项目。我用的是2.0 tree https://github.com/jexp/batch-import/tree/20.
我的工作流程最终是 (1) 将所有数据加载到关系数据库中,(2) 清理重复项,然后 (3) 编写脚本将数据导出到 CSV 文件中。
使用 cypher,我让导入运行了 24 小时,然后才终止它。使用java导入工具,neo4j-community-2.0.0-M06的整个导入花费了11秒。
底线:不必费心尝试编写密码来导入大块数据。如有必要,请花一个小时清理数据,然后导出为 CSV 并使用 java 批量导入工具。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)