2016-07-06 141 views
0

我正在使用加载csv操作将关系加载到Neo4j中的图形db中。节点已经创建。我有四种不同类型的关系可以从四个不同的CSV文件(文件1 - 59关系,文件2 - 905关系,文件3 - 173,000关系,文件4 - 超过100万个关系)创建。密码查询执行得很好,但是文件1(59个关系)需要25秒才能执行,文件2需要6.98分钟,文件3从过去2小时开始仍在继续。鉴于neo4j处理数百万关系的能力,我不确定这些执行时间是否正常。下面给出了我正在使用的示例密码查询。在neo4j中使用加载csv添加关系需要花费很多时间

load csv with headers from 
"file:/sample.csv" 
as rels3 
match (a:Index1 {Filename: rels3.Filename}) 
match (b:Index2 {Field_name: rels3.Field_name}) 
create (a)-[:relation1 {type: rels3.`relation1`}]->(b) 
return a, b 

'a'和'b'是我为两个希望加快查找操作的预加载节点类别创建的两个索引。

其他信息 - 节点数量(类别) - 1791年 节点数量(B类) - 3341

有没有加载这个更快的方法,并不会加载CSV操作花费这么多的时间?我在哪里错了?

回答

1

Index1.FilenameIndex2.Field_name创建索引:

CREATE INDEX ON :Index1(Filename); 
CREATE INDEX ON :Index2(Field_name); 

验证这些索引在线:

:schema 

验证您的查询使用索引加入PROFILE到您的查询的开始和期待在执行计划中查看是否正在使用索引。

更多信息here

+0

你好,威廉,我创建了索引,他们在线。我现在将验证索引是否正在使用。 – MohanVS

+0

是威廉,看起来像索引没有被使用,因为它正在扫描数据库中的所有节点。 – MohanVS

1

我喜欢跑步查询之前要做的就是运行explain首先看是否有任何警告。由于警告,我修复了许多查询。
(简单的预先追加explain到您的查询)

此外,也许你可以删除return语句。查询完成后,您可以运行另一个查看节点。

我使用非常类似于您的查询,在大约54分钟内创建了大约20M的关系。

指数很重要,因为这就是neo如何找到节点。

+0

你好阿尔贝!你在一小时内使用什么样的硬件来建立两千万个关系?我试图运行超过100,000的查询,并在某个时间后挂起。我在台式机上运行Neo,使用16个内存和一个i5四核处理器(3.2 GHz)。 – MohanVS

+1

这是一个英特尔氙E3-1220 4核@ 3.1Ghz,32GB的RAM,1TB SSD。我注意到你在加载查询中有一个return语句,这不是真的有必要。看看是否删除它加快速度。我不确定Neo是如何处理它的,但它可以保持它在内存中返回所需的节点,从而快速消耗你的内存 - 但这只是猜测。您可以随时查看加载后的数据。 –

+0

我发现查询实际上被执行,但浏览器挂起。当我杀死页面并重新加载时,我可以看到所有节点/关系都已成功创建。然后,当我编写一个简单的“match(n)return n limit 100,000”查询时,浏览器会再次挂起。该查询的限制高达10000左右,但一旦它超过了一定的限制,浏览器挂起。 – MohanVS

相关问题