使用其LOAD CSV功能可以上传到Neo4J数据库的最大文件大小是多少?那取决于系统规格吗? 我已成功上传包含500K记录(约180MB)的文件,但尝试使用java堆空间错误的4.8GB文件时上传崩溃
答案 0 :(得分:1)
将LOAD CSV
与PERIODIC COMMIT
一起使用时,您需要了解eager
- 问题。根据您执行的操作,查询计划可能会显示包含eager
的元素。
可以通过EXPLAIN LOAD CSV .....
检查查询计划(剥离PERIODIC COMMIT
进行检查)。
eager
基本上意味着Cypher认为可能存在跨行依赖,因此该语句无法在多个事务中执行,并且PERIODIC COMMIT
已停用。因此,您的CSV文件将在一次交易中处理。
但是有一种方法可以解决这个问题:Neo4j APOC允许您使用apoc.periodic.iterate
和apoc.load.csv
的组合,请参阅以下复杂示例从csv文件导入一些Twitter数据:< / p>
call apoc.periodic.iterate('call apoc.load.csv("file:/tmp/all.csv", {
sep:";",
header:true,
mapping:{
retweets:{type:"int"},
favorites:{type:"int"},
date:{type:"int"},
mentions:{array:true, arraySep:" "},
hashtags:{array:true, arraySep:" "}
}
}) yield map',
"with {map} as map
merge (u:User{username:map.username})
merge (t:Tweet {id:map.id})
on create set t.text=map.text, t.date=map.date, t.retweet=map.retweets, t.favorite=map.favorites, t.link=map.permalink
merge (k:Keyword{name:map.keyword})
merge (t)-[:HAS_KW]->(k)
merge (u)-[:SENT_TWEET]->(t)
FOREACH (m IN [x in map.mentions WHERE x<>''] |
MERGE (mentioned:User {username:substring(m,1)})
MERGE (t)-[:MENTIONS]->(mentioned)
)
FOREACH (h in [x in map.hashtags WHERE x<>''] |
MERGE (ht:HashTag{name:h})
MERGE (t)-[:USES_HASHTAG]->(ht)
)
", {batchSize:5000, parallel:false});