您好,并提前感谢您的协助。
我正在使用 Neo4j (版本3.2.1 ,在 Windows 10 上)导入2个CSV文件并在两者之间创建图表与往常一样,具有共同字段的不同数据。
第一个导入产生 1百万个节点( Label_1 ),第二个导入 100000 个节点( Label_2 )。
我已经导入了文件并成功创建了节点;我尝试用简单的查询连接节点,但它太慢,每分钟约100个关系:
MATCH (c:Label_1) WITH c,
c.label_1_key AS currentid
MATCH (g:Label_2)
WHERE g.label_2_key = currentid
CREATE (g)-[:rel]->(c);
创建2个索引(一个位于 label_1_key ,另一个位于 label_2_key )似乎无法提高性能。
加速关系创建阶段的最佳方法是什么?
(我正在使用带有Intel i3 1.9 Ghz和8GB RAM的笔记本电脑,如果这些信息有帮助的话)
答案 0 :(得分:1)
试试这个:
1)创建唯一索引:
CREATE CONSTRAINT ON (l1:Label_1) ASSERT l1.label_1_key IS UNIQUE;
CREATE CONSTRAINT ON (l2:Label_2) ASSERT l2.label_2_key IS UNIQUE;
2)加载CSV以创建节点(我假设从您的解释中它是两个单独的文件,因此两个不同的负载)。由于索引会略微变慢,但仍然应该很快。
3)使用第二个文件(最小的)再做一次LOAD CSV。
USING PERIODIC COMMIT
LOAD CSV WITH HEADERS FROM "file:///second_file.csv" as line
MATCH (l1:Label1 {label_1_key: line.whatevertheheaderofthekeyis})
MATCH (l2:Label2 {label_2_key: line.whatevertheheaderofthekeyis})
MERGE (l1)-[:REL]->(l2);
由于您只创建了100000个关系(再次,根据您的解释做出的假设),这应该非常快。