load csv 的时候create relation特别慢。。。
发布于 4 年前 作者 wandf12345 1180 次浏览 来自 问答

各位大佬,我有一个7G的数据,用程序写成nodes.csv和relation.csv两个文件,里面关系很简单,就是一个node的id,连接到另一个node的id… 我在id上还建了index.但是导入nodes 用create的方法很快,导入relations 就及其慢。 跑了一个晚上才10万条。。 请问有啥办法? LOAD CSV WITH HEADERS FROM “file://path/to/my/file.csv” AS csvLine MATCH (user:User {id: userId}) MATCH (brand:Brand {id: brandId}) create (user)-[:LIKES]->(brand)

我看到外面论坛很多类似的问题,最终也没答案。 http://www.codesd.com/item/neo4j-load-csv-extremely-slow-when-merging-relationships-from-a-3mil-node-tag-to-a-set-of-20-nodes.html

11 回复

数据量太大可以使用neo4j-import工具导入

@goodwater 这玩意可以试一下 neo4j-import,…就是每次都要建一个新的db.尤其我是community版本的。。加了新的db没法用。 有办法吗?

cd bin目录下执行 neo4j-admin import --nodes:item “nodes.csv” --relationships:rel “rel_header.csv,rel.csv” --ignore-missing-nodes 这个是之前写的,不知好不好使,你可以试下

不清楚,你可以先删了原来的,再导入

neo4j-admin import是挺快的。。超级快。

就是每次要用新的db。不能实现增量导入。

我在id上建立了index.还是没有改进

还有就是在关系上有10来个attribute. [:LIKES]

问题中引用的文章是Neo4j 2.2版本的,现在是4.2,所以不做评论。

如果用CREATE创建关系,那应该非常快。如果用MERGE,那要看节点是否是超级繁忙节点了。这里提供的Cypher不正确,请提供一下实际使用的、完整的语句?

LOAD CSV WITH HEADERS FROM “file://path/to/my/file.csv” AS csvLine MATCH (user:User {id: userId}) MATCH (brand:Brand {id: brandId}) create (user)-[:LIKES]->(brand)

@graphway …我是用python api来直接执行的。。代码如下:

  1. 创建nodes. cypherQL = “USING PERIODIC COMMIT LOAD CSV FROM 'file:///”     cypherQL = cypherQL + fileNamePrefix + “Nodes.csv’”  + " AS line create "     cypherQL = cypherQL + " (t:Node {name: line[0], uid:line[1], time:line[2], prop1:line[3],prop2:line[4],prop3:line[5],prop4:line[6],prop5:line[7],prop6:line[8],prop7:line[9],prop8:line[10],prop9:line[11],prop10:line[12]})" 2.创建关系。   cypherQL = “USING PERIODIC COMMIT LOAD CSV FROM 'file:///”     cypherQL = cypherQL + fileNamePrefix + “Rels.csv’” + " AS line "     cypherQL = cypherQL + " match (from:Node{uid:line[0]}),(to:Node{uid:line[1]}) "     cypherQL = cypherQL + " create (from)-[r:calls{prop1:line[2], prop2:line[3], prop3:line[4], prop4:line[5], prop5:line[6], prop6:line[7]}]->(to) return r" 其实relationship就是Node之间用uid来连接的(unique id).。即使我在创建完节点后 直接create index on uid…然后在建立relationship还是没用。

    数据量倒是很大。nodes有4000万条。 不过就算我用了小的数据量试验,还是建立关系很慢。 以上是真实的脚本,除了少数名字改成prop以外(本来名字改成propx)。

是SSD硬盘吗?

另外,通常不建议在关系上有太多属性。calls也可以定义成节点。

回到顶部