Neo4j加载csv的时间很长
大家好,Stackoverflow 我有一个简单的查询来加载csv,但浏览器需要很长时间才能加载,并且仍然显示加载符号 我的问题是:Neo4j加载csv的时间很长,neo4j,cypher,load-csv,Neo4j,Cypher,Load Csv,大家好,Stackoverflow 我有一个简单的查询来加载csv,但浏览器需要很长时间才能加载,并且仍然显示加载符号 我的问题是: LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line WITH line MERGE (u:User{name:line.userId}) MERGE (m:Movie {movieId:line.movieId}) MERGE (u)-[r:RATED {ratin
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED {rating:line.rating}]->(m)
RETURN u, m, r
我看不出代码中有错误
ratings_small.csv有以下列:
用户ID电影ID分级时间戳
1312.51260759144
1 1029 3 1260759179
1106131260759182
112921260759185
1172 4 1260759205
有100004条记录
亲切问候,,
Anna我相信你没有关于:User(name)和:Movie(movieId)的索引 执行以下两个查询,然后重试LOAD CSV命令,它将在几秒钟内导入该命令:
CREATE CONSTRAINT ON (u:User) ASSERT u.name IS UNIQUE;
CREATE CONSTRAINT ON (m:Movie) ASSERT m.moveId IS UNIQUE;
其次,我假设用户只对一部电影进行一次评分,因此不必对属性进行关系合并,您可以如下更改查询:
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
为了避免Neo4j试图在一个事务中处理完整的CSV,您可以(为了避免内存问题)如下:
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
最后,我怀疑您是否有任何应用程序,甚至Neo4j浏览器可以同时显示所有内容,因此我不会从LOAD CSV查询返回任何内容:
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
我相信你没有关于:User(name)和:Movie(movieId)的索引 执行以下两个查询,然后重试LOAD CSV命令,它将在几秒钟内导入该命令:
CREATE CONSTRAINT ON (u:User) ASSERT u.name IS UNIQUE;
CREATE CONSTRAINT ON (m:Movie) ASSERT m.moveId IS UNIQUE;
其次,我假设用户只对一部电影进行一次评分,因此不必对属性进行关系合并,您可以如下更改查询:
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
为了避免Neo4j试图在一个事务中处理完整的CSV,您可以(为了避免内存问题)如下:
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
RETURN u, m, r
最后,我怀疑您是否有任何应用程序,甚至Neo4j浏览器可以同时显示所有内容,因此我不会从LOAD CSV查询返回任何内容:
USING PERIODIC COMMIT 2000
LOAD CSV WITH HEADERS FROM "file:///ratings_small.csv" AS line
WITH line MERGE (u:User{name:line.userId})
MERGE (m:Movie {movieId:line.movieId})
MERGE (u)-[r:RATED]->(m)
SET r.rating = line.rating
谢谢我添加了约束,现在我有了这个错误:Neo.DatabaseError.Statement.ExecutionFailed-java heap spaceI设置如下:dbms.memory.heap.initial\u size=5G dbms.memory.heap.max\u size=5G@Anna我编辑了答案.dbms.memory.pagecache.size=2G节点(:Movie,:User)一个接一个地加载正常。现在,我运行查询:------->使用定期提交2000加载CSV,标题来自“file:///ratings_small.csv“作为行与行匹配(u:User{userId:line.userId}),(m:Movie{movieId:line.movieId})创建(u)-[r:RATED]->(m)SET r.rating=line.rating----------->它输出:执行在开放事务中使用定期提交的查询是不可能的,现在我有了这个错误:Neo.DatabaseError.Statement.ExecutionFailed-java heap spaceI设置如下:dbms.memory.heap.initial\u size=5G dbms.memory.heap.max\u size=5G@Anna我编辑了答案.dbms.memory.pagecache.size=2G节点(:Movie,:User)一个接一个地加载正常。现在,我运行查询:------->使用定期提交2000加载CSV,标题来自“file:///ratings_small.csv“作为行与行匹配(u:User{userId:line.userId}),(m:Movie{movieId:line.movieId})创建(u)-[r:RATED]->(m)SET r.rating=line.rating----------->它输出:不可能在打开的事务中执行使用定期提交的查询