2017-04-04 59 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