如何在neo4j中使用load csv for large dataset?

时间:2014-06-09 18:58:56

标签: neo4j

我有一个带学生的user.csv文件:

id, first_name, last_name, locale, gender
1, Hasso, Plattner, en, male
2, Tina, Turner, de, female

以及包含学生会员资格的memberships.csv文件:

id, user_id, course_id
1, 1, 3
2, 1, 4
3, 2, 4
4, 2, 5

将学生和课程转换为顶点 当然,我加入了成员队伍 用户信息到memberships.csv

id, user_id, first_name, last_name, course_id, locale, gender
1, 1, Hasso, Plattner, 3, en, male
2, 1, Hasso, PLattner, 4, en, male
3, 2, Tina, Turner, 4, de, female
4, 2, Tina, Turner, 5, de, female

并使用了加载csv,一些约束和MERGE:

create constraint on (g:Gender) assert g.gender is unique
create constraint on (l:locale) assert l.locale is unique
create constraint on (c:Course) assert c.course is unique
create constraint on (s:Student) assert s.student is unique

USING PERIODIC COMMIT 20000
LOAD CSV WITH HEADERS FROM
'file: memberships.csv'
AS line
MERGE (s:Student {id: line.id, name: line.first_name +" "+line.last_name })
MERGE (c:Course {id: line.course_id})
MERGE (g:Gender {gender:line.gender})
MERGE (l:locale {locale:line.locale})
MERGE (s)-[:HAS_GENDER]->(g)
MERGE (s)-[:HAS_LANGUAGE]->(l)
MERGE (s)-[:ENROLLED_IN]->(c)

对于1 000个会员资格,neo4j需要2秒钟才能加载, 10 000名会员3分钟, 对于100 000,它失败并显示“未知错误”。

i)如何摆脱错误? ii)是否有更优雅的方式从.csv加载这样的结构 有大约60万会员资格?

我使用的是2.4 GHz和16GB RAM的本地机器。

2 个答案:

答案 0 :(得分:0)

Neo4j浏览器在Cypher查询上有60秒的超时时间(由于HTTP传输)。这并不意味着您的查询没有运行完成,实际上在数据库级别没有错误。您的查询将继续通过浏览器运行,但您将无法看到其结果。要查看长时间运行的查询运行完成,请使用Neo4j shell。

http://docs.neo4j.org/chunked/stable/shell.html

答案 1 :(得分:0)

尝试先从CSV导入节点,然后再导入rel。

还尝试在没有Gender和Locale节点的情况下执行导入运行,而是将其存储为属性。

如果您以后确实需要这些(密集)节点,请尝试运行它:

CREATE (g:Gender {gender:"male"})
MATCH (s:Student {gender:"male"})
CREATE (s)-[:HAS_GENDER]->(g)

这些关系将是独一无二的,而且创造比MERGE便宜。我假设每个插入的学生检查2 *(n-1)rels加起来,然后是O(n ^ 2)