使用LOAD CSV功能在neo4j中上传的最大文件大小是多少

时间:2016-08-26 19:36:04

标签: file-upload neo4j

使用其LOAD CSV功能可以上传到Neo4J数据库的最大文件大小是多少?那取决于系统规格吗? 我已成功上传包含500K记录(约180MB)的文件,但尝试使用java堆空间错误的4.8GB文件时上传崩溃

1 个答案:

答案 0 :(得分:1)

LOAD CSVPERIODIC COMMIT一起使用时,您需要了解eager - 问题。根据您执行的操作,查询计划可能会显示包含eager的元素。

可以通过EXPLAIN LOAD CSV .....检查查询计划(剥离PERIODIC COMMIT进行检查)。

eager基本上意味着Cypher认为可能存在跨行依赖,因此该语句无法在多个事务中执行,并且PERIODIC COMMIT已停用。因此,您的CSV文件将在一次交易中处理。

但是有一种方法可以解决这个问题:Neo4j APOC允许您使用apoc.periodic.iterateapoc.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});