2016-04-03 121 views
0

我試圖將數據從MySQL數據庫導入到Neo4j,使用CSV文件作爲中介。我正在關注basic example,但無法完成它的工作。我正在用這些查詢導入兩個表格:將CSV關係導入到Neo4j

//Import projects. 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:/tmp/projects.csv" AS row 
CREATE (:project 
{ 
    project_id: row.fan, 
    project_name: row.project_name 
}); 

//Import people. 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:/tmp/persons.csv" AS row 
CREATE (:person 
{ 
    person_id: row.person_id, 
    person_name: row.person_name, 
}); 

//Create indicies. 
CREATE INDEX ON :project(project_id); 
CREATE INDEX ON :project(project_name); 
CREATE INDEX ON :person(person_id); 
CREATE INDEX ON :person(person_name); 

此部件適用。當我嘗試導入關係時,不起作用的是:

//Create project-person relationships. 
USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:/tmp/project_persons.csv" AS row 
MATCH (project:project {project_id: row.project_id}) 
MATCH (person:person {person_id: row.person_id}) 
MERGE (person)-[:CONTRIBUTED]->(project); 

控制檯接受沒有錯誤的查詢,但從未結束。它在100%CPU,25%RAM下運行數天,但磁盤使用率可以忽略不計。數據庫信息中沒有關係。

我在某個地方犯了錯,還是真的這麼慢? project_persons.csv文件長度爲1300萬行,但不應該定期提交現在顯示的內容嗎?

回答

0
shouldn't the periodic commit make something show up by now? 

僅適用於LOAD - 做一個「解釋」在前面的創建,它會告訴你它是如何構建的更新和預計處理記錄#。我遇到了同樣的問題 - Neo4j將整個更新作爲單個事務進行,並且從未完成。交易需要分解成5萬到10萬個tx塊以完成一切。

執行此操作的一種方法是將關係信息作爲一組標記節點導入,然後使用這些節點來MATCH()人員和項目節點並根據需要創建關係。這種多次

MATCH (r:Relations) 
MATCH (prj:project {project_id: r.project_id}) 
MATCH (per:person {person_id: r.person_id}) 
WITH r, prj, per LIMIT 50000 
MERGE (per)-[:CONTRIBUTED]->(prj) 
DELETE r 

運行,直到創建了所有的關係,你是好去:

USING PERIODIC COMMIT 
LOAD CSV WITH HEADERS FROM "file:/tmp/project_persons.csv" AS row 
CREATE (:Relations {project_id: row.project_id, person_id: row.person_id}) 

然後在50K批量處理的記錄。

+0

它可以工作,但即使增加了限制,導入所有數據也很乏味。由於某種原因,我有剩餘的200k關係,不會合並或刪除。 – Rachie

+0

同意單調乏味。你在做什麼來刪除不需要的關係? –

+0

我不知道如何處理它們,或者即使它們是不需要的。 – Rachie