3

我正在尝试使用密码将大约 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 之外的其他方法来导入这些数据吗?

4

1 回答 1

3

我只想回答我自己的问题,以防其他人发现这个问题。感谢 Peter 建议批量导入项目。我使用了2.0 树

我的工作流程最终是 (1) 将所有数据加载到关系数据库中,(2) 清理重复项,然后 (3) 编写脚本以将数据导出到 CSV 文件中。

使用 cypher,我在杀死它之前运行了 24 小时的导入。使用 java 导入工具,整个导入用 neo4j-community-2.0.0-M06 耗时 11 秒。

底线:不要费心尝试写出密码来导入大量数据。如有必要,花一个小时清理数据,然后导出为 CSV 并使用 java 批量导入工具。

于 2013-10-18T22:18:52.857 回答