Neo4j和关系创建:表现不佳

时间:2017-08-06 11:12:19

标签: database performance database-design graph neo4j

您好,并提前感谢您的协助。

我正在使用 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的笔记本电脑,如果这些信息有帮助的话)

1 个答案:

答案 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个关系(再次,根据您的解释做出的假设),这应该非常快。