我在从CSV文件导入大量关系(2M记录)时遇到了一些问题。
我在Mac OSX(10.9.5)上运行Neo4j 2.1.7,16GB RAM。
该文件具有以下架构:
user_id, shop_id
1,230
1,458
1,783
2,942
2,123
等
如上所述 - 它包含大约2M条记录(关系)。
以下是我使用浏览器UI运行的查询(我也尝试使用REST调用执行相同操作):
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file://path/to/my/file.csv" AS relation
MATCH (user:User {id: relation.user_id})
MATCH (shop:Shop {id: relation.shop_id})
MERGE (user)-[:LIKES]->(shop)
此查询需要很长时间才能运行,大约需要800秒。我有索引:用户(id)和:商店(id)。创建它们:
CREATE INDEX ON :User(id)
CREATE INDEX ON :Shop(id)
有关如何提高性能的任何想法?
由于
答案 0 :(得分:0)
删除shop_id之前的空格
尝试运行:
LOAD CSV WITH HEADERS FROM "file:test.csv" AS r
return r.user_id, r.shop_id limit 10;
查看它是否正确加载。在原始数据上,r.shop_id为null,因为列名为shop_id
另外,请确保您没有将ID作为数值存储,然后您必须使用toInt(r.shop_id)
尝试在Neo4j Browser(2.2。)或Neo4j-Shell中分析您的陈述。
为此目的删除PERIODIC COMMIT
并限制行:
PROFILE
LOAD CSV WITH HEADERS FROM "file://path/to/my/file.csv" AS relation
WITH relation LIMIT 10000
MATCH (user:User {id: relation.user_id})
MATCH (shop:Shop {id: relation.shop_id})
MERGE (user)-[:LIKES]->(shop)