如何提高 NEO4J 中 LOAD CSV 的性能

How to improve performance of LOAD CSV in NEO4J

我正在使用 neo4j.I 的社区版,我正在尝试使用 CSV 创建 50000 个节点和 93400 个关系 file.But neo4j 中的加载 csv 命令需要大约 40 分钟来创建节点和关系。 使用 python 中的 py2neo 包进行连接,运行 cypher queries.Load csv 命令类似于以下命令:

USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file:///Sample.csv" AS row WITH row 
MERGE(animal:Animal { name:row.`ANIMAL_NAME`})
ON CREATE SET animal{name:row.`ANIMAL_NAME`,type:row.`TYPE`, status:row.`Status`, birth_date:row.`DATE`}
ON MATCH SET animal +={name:row.`ANIMAL_NAME`,type:row.`TYPE`,status:row.`Status`,birth_date:row.`DATE`}
MERGE (person:Person { name:row.`PERSON_NAME`})
ON CREATE SET person ={name:row.`PERSON_NAME` age:row.`AGE`, address:row.`Address`, birth_date:row.`PERSON_DATE`}
ON MATCH SET person += { name:row.`PERSON_NAME`, age:row.`AGE`, address:row.`Address`, birth_date:row.`PERSON_DATE`}
MERGE (person)-[:OWNS]->(animal);

Infrastructure Details: dbms.memory.heap.max_size=16384M

dbms.memory.heap.initial_size=2048M

dbms.memory.pagecache.size=512M

neo4j_version:3.3.9

我如何让它提前工作faster.Thanks

理想情况下,您应该使用最新的 neo4j 版本,因为自 3.3.9 以来已经有了很多性能改进。由于您已经在 :Animal(name):Person(name) 上建立了索引,另一个主要问题可能是 Cypher 规划器正在生成昂贵的 Eager operation (at least in neo4j 4.0.3) for your query. Whenever you have performance issues, you. should use EXPLAIN or PROFILE 以查看 Cypher 规划器生成的操作。

尝试使用这个更简单的查询(它应该与您的查询执行相同的操作)。在neo4j 4.0.3中使用EXPLAIN,这个查询没有使用Eager操作:

:auto USING PERIODIC COMMIT LOAD CSV WITH HEADERS FROM "file:///Test.csv" AS row
MERGE(animal:Animal {name: row.`ANIMAL_NAME`})
SET animal += {type:row.`TYPE`, status:row.`Status`, birth_date:row.`DATE`}
MERGE (person:Person { name:row.`PERSON_NAME`})
SET person += {age:row.`AGE`, address:row.`Address`, birth_date:row.`PERSON_DATE`}
MERGE (person)-[:OWNS]->(animal);

neo4j 4.x中使用USING PERIODIC COMMIT时需要:auto命令。