【发布时间】:2020-05-14 19:14:15
【问题描述】:
我正在使用 neo4j 的社区版。我正在尝试使用 CSV 文件创建 50000 个节点和 93400 个关系。但是 neo4j 中的加载 csv 命令需要大约 40 分钟来创建节点和关系。 在 python 中使用 py2neo 包连接和运行 cypher 查询。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
如何让它更快地工作。在此先感谢
【问题讨论】:
-
您的查询中有多个语法错误。你能显示你的实际查询(并使用多行使其可读)吗?
-
@cybersam 感谢您的回复。我编辑了查询以使其更具可读性,但真正的问题是如何提高性能,可以通过增加资源或优化查询来实现。顺便说一句,我是在此查询之前创建节点索引
-
您仍然有一些语法错误,但我可以对您要执行的操作做出有根据的猜测。您已经拥有哪些索引?另外,你真的需要更新已经存在的节点的属性吗?你用的是什么neo4j版本?
-
语法错误是因为我不得不稍微修改查询,但实际运行成功。我正在使用'CREATE INDEX ON:Animal(name)\ n'为节点Animal和Person创建索引。是的,如果数据发生变化,我需要更新属性。
-
neo4j_version:3.3.9