什么是更有效的一个匹配或多个匹配管道

时间:2017-04-04 12:47:31

标签: neo4j cypher

我有一个巨大的两列csv,几乎100,000,000行,格式为source_node和destination_node。另外,我的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) 

1 个答案:

答案 0 :(得分:1)

我更喜欢显式匹配语句的第一种方法。

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

您可以做的另一个有用的事情是在load csv命令之前使用以下语句作为前缀来批量加载数据以进行性能优化

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