如何使用cypher高效地从neo4j中的不同文件加载节点和边?

如何使用cypher高效地从neo4j中的不同文件加载节点和边?,neo4j,cypher,Neo4j,Cypher,假设我有一个包含节点信息的csv文件,每一行的第一列都有一个唯一的id,另一个csv文件包含边,通过它们唯一的id描述节点之间的边。以下密码成功加载节点,然后创建边。但是,我可以提高效率吗?我的真实数据集有数百万个节点和数千万条边。显然,我应该使用定期提交并创建索引,但我能否以某种方式避免对每个边缘进行匹配,并使用我知道要构建的每个边缘的唯一节点ID这一事实?还是我完全错了?我想完全用cypher no java来完成这项工作 load csv from 'file:///home/user/n

假设我有一个包含节点信息的csv文件,每一行的第一列都有一个唯一的id,另一个csv文件包含边,通过它们唯一的id描述节点之间的边。以下密码成功加载节点,然后创建边。但是,我可以提高效率吗?我的真实数据集有数百万个节点和数千万条边。显然,我应该使用定期提交并创建索引,但我能否以某种方式避免对每个边缘进行匹配,并使用我知道要构建的每个边缘的唯一节点ID这一事实?还是我完全错了?我想完全用cypher no java来完成这项工作

load csv from 'file:///home/user/nodes.txt' as line
create (:foo { id: toInt(line[0]), name: line[1], someprop: line[2]});

load csv from 'file:///home/user/edges.txt' as line
match (n1:foo { id: toInt(line[0])} ) 
with n1, line
match (n2:foo { id: toInt(line[1])} ) 
// if I had an index I'd use it here with: using index n2:foo(name) 
merge (n1) -[:bar]-> (n2) ;

match p = (n)-->(m) return p;
nodes.txt:

edges.txt:


正如Ron在上面评论的那样,加载CSV可能不是大型数据集的方式,他链接到的CSV批量导入工具非常棒。如果您发现无法以批导入工具的方式轻松嵌入csv,那么Neo4J BatchInserter API的使用非常简单:

如果您有那么多数据,加载csv不是一个好办法。您可以查看Michael Hunger制作的工具:
0,node0,Some Property 0
1,node1,Some Property 1
2,node2,Some Property 2
3,node3,Some Property 3
4,node4,Some Property 4
5,node5,Some Property 5
6,node6,Some Property 6
7,node7,Some Property 7
8,node8,Some Property 8
9,node9,Some Property 9
10,node10,Some Property 10
...
0,2
0,4
0,8
0,13
1,4
1,8
1,15
2,4
2,6
3,4
3,7
3,8
3,11
4,10
...