2017-04-04 55 views
1

我有一个巨大的两列csv,在source_node和destination_node的格式近100,000,000行。另外我在我的neo4j数据库中有一个图表,其中存在所有节点和一些关系。现在我正在尝试使用此csv构建所有剩余的关系。我可以使用两个查询中的任何一个来做到这一点,但我想知道哪个更有效且更正确。我的查询是什么是更有效的一个匹配或多个匹配管道与

load csv with headers from 
"file:///C:/Users/neo4j_workspace/graph_db/import/dependency_filename.csv" as table 
match (a:Job{name:table.sourcenodename}) 
with a, table 
match (b:Job{name:table.destinationnodename}) 
with a, b 
merge (a)-[:with]->(b) 

OR

load csv with headers from 
"file:///C:/Users/neo4j_workspace/graph_db/import/dependency_filename.csv" as table 
match (a:Job{name:table.sourcenodename}) ,(b:Job{name:table.destinationnodename}) 
merge (a)-[:with]->(b) 
+2

之前,您可以找到为自己的另一种有用的东西查询...还创建约束:作业(名称)将是非常有用的 –

回答

1

我宁愿明确匹配语句的第一种方法。

逗号分隔的匹配语句仍然算作同一个。虽然如果(a)和(b)之间没有关系,这将没有区别,但是当可能存在每个存在的关系时,这可能会改变匹配语句的含义(考虑到您正在使用[:with ]关系),并且在这种情况下可能会使查询速度变慢。

,你能做的只是通过之前使用配置文件使用下面的语句作为前缀负载CSV命令批量加载数据的性能优化

USING PERIODIC COMMIT 10000 //change number based on your specific needs