2017-08-06 57 views
0

您好,并提前感谢您的帮助。Neo4j和人际关系创造:表现不佳

我使用的Neo4j版3.2.1,上视窗10)导入2个CSV文件并创建不同的数据之间的曲线图与一个共同的字段,像往常一样。

第一进口产生1百万个节点(Label_1)的,第二进口节点(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)似乎没有提高性能。

什么是加速关系创建阶段的最佳途径?

(我正在与英特尔i3笔记本1.9 GHz和8GB的内存,如果这些信息能够帮助)

+0

这个查询是否工作/完成?需要多长时间? –

+0

是的,它的工作原理。我已经停止了7个小时后的过程(因为我决定搜索更好的解决方案......并在这里寻求帮助^^“) –

回答

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关系来创建(再次,根据您的解释做出的假设),那应该相当快。

+0

这很完美,谢谢!!!只需60秒即可建立关系! –