Neo4j用查询导入数据

时间:2013-08-07 23:45:29

标签: import neo4j

我在这个论坛搜索并用谷歌搜索但我无法找到解决我的特殊问题的方法。我必须创建一个新的图形数据库(neo4j,cypher),我必须创建许多数据。类似的东西:

CREATE (:Mitglied { userID:1, vorname:"Jennifer", nachname:"Koch", geburtstag:"1977-12-11" }),
(:Mitglied { userID:2, vorname:"Lina", nachname:"Hansen", geburtstag:"1984-04-08" }), 
(:Mitglied { userID:3, vorname:"Paul", nachname:"Brandt", geburtstag:"1956-08-13" }), 
(:Mitglied { userID:4, vorname:"Sophie", nachname:"Peters", geburtstag:"1972-12-24" }), 
(:Mitglied { userID:5, vorname:"Manuel", nachname:"Graf", geburtstag:"1996-02-06" }),
...

所以我尝试用C#执行shell批处理(Neo4jShell.bat),复制&将一些数据粘贴到webadmin中。没有成功:(我的代码(开始一个新进程并使用输入流插入每一行)在短时间后停止,没有任何事情发生(无论是数据还是程序).Webadmin需要loooooong时间只有500 Creates。我有2,100,000 Creates ...

你们中的任何人都可以帮助我并说出我能做些什么吗?我现在还不知道:( 它用于研究,因此导入关系数据库不是一个解决方案 - 必须使用查询创建数据..但由于大量数据应该自动发生;)

非常感谢!

2 个答案:

答案 0 :(得分:2)

我在你的评论中看到你正在使用C#,但你是否精通Java?如果是这样,您可以使用batch inserter,这适用于此类大型一次性摄取。

如果没有,请更快地使用List of Maps吗?

答案 1 :(得分:0)

我发现这个问题的解决方案是在C#中手动执行查询。我有一个大学生数据库。 这是我的代码:

StringBuilder query_text = new StringBuilder();
query_text.Append("LOAD CSV WITH HEADERS FROM \"file:C:/.../students.csv\" AS csvLine ");
query_text.Append("MERGE(faculty: Faculty { name: csvLine.faculty}) ");
query_text.Append("MERGE(university: University { name: csvLine.university }) ");
query_text.Append("CREATE(student: Student { studentid: csvLine.student_id, name: csvLine.name, surname: csvLine.surname, address: csvLine.address, faculty: csvLine.faculty, university: csvLine.university}) ");
query_text.Append("CREATE(student) -[:STUDIES]->(faculty) ");
query_text.Append("CREATE(faculty) -[:OF]->(university)");
CypherQuery query = new CypherQuery(query_text.ToString(), new Dictionary<string, object>(), CypherResultMode.Set);
try {
    ((IRawGraphClient)client).ExecuteGetCypherResults<Studentas>(query);
}
catch(Exception e){ }