大数据导入neo4j

时间:2015-04-15 17:59:26

标签: neo4j cypher

我输入的数据大约有1200万个节点和1300万个关系。

首先,我使用csv导入定期提交50000并将数据分成不同的块,但仍然需要花费太多时间。

然后我看到了批量插入方法。但是对于批量插入方法,我必须在Excel工作表中创建新的数据集。

基本上我从 SqlServer 导入数据:首先我将数据保存到csv中,然后将其导入我的 neo4j

另外,我使用的是neo4j社区版。我确实改变了我在stackoverflow上找到的所有属性。但是最初还是在预先提交50K它会更快但是在100万之后需要花费太多时间。

有没有在短时间内直接从sql导入这些数据,因为neo4j因其快速处理大数据而闻名?有什么建议或帮助吗?

以下是使用的LOAD CSV(数字索引(num)):

USING PERIODIC COMMIT 50000 load csv with headers from "file:c:/Users/hasham munir/Desktop/Numbers/CRTest2/Numbers.csv" 
AS csvLine fieldterminator ';' 
Merge (Numbers:Number {num: csvLine.Numbers}) return * ; 

USING PERIODIC COMMIT 50000 load csv with headers from "file:c:/Users/hasham munir/Desktop/Numbers/CRTest2/Level1.csv" 
AS csvLine fieldterminator ';' 
MERGE (TermNum:Number {num: csvLine.TermNum}) 
MERGE (OrigNum:Number {num: (csvLine.OrigNum)}) 
MERGE (OrigNum)-[r:CALLS ]->(TermNum) return * ;

2 个答案:

答案 0 :(得分:2)

需要多长时间?

为了给你一个参考,我的数据库大约是4m节点,650,000个独特的关系,~10m-15m的属性(不是很大,但应该提供一个想法)。加载节点文件+设置多个标签需要不到10分钟,然后加载关系文件+设置关系(全部通过LOAD CSV)。这也是在一台加速计算机上完成的,但是如果你需要几个小时,我会做一些调整。

我的建议如下:

  • 您是否故意在MERGE之后返回节点?我无法想象你正在做任何事情,但不管怎样,考虑删除RETURN *。使用RETURN *,您将返回查询中找到的所有节点,关系和路径,这些都会减慢速度。 (http://neo4j.com/docs/stable/query-return.html#return-return-all-elements

  • “num”字段是否唯一?如果是这样,请考虑添加以下约束(注意:这也将创建索引,因此无需单独创建它)。我认为这可能会加速MERGE(我不确定),但请看下一点。

    CREATE CONSTRAINT ON(Numbers:Number)ASSERT Numbers.num IS UNIQUE;

  • 如果num字段是唯一的并且这是一个全新的数据库(即,当您运行此脚本时,您从头开始),则调用CREATE来创建节点,而不是MERGE(用于创建仅限节点。

  • 正如Christophe已经提到的那样,你绝对应该将堆大小增加到4g左右。

告诉我们它是怎么回事!

编辑1 我无法找到有关Windows版本的内存/性能调整的相关信息。我发现的东西给我留下了几个问题,并且可能已经过时了。

这可能已经过时,但提供了一些不同设置的背景知识以及Windows和Linux之间的差异 http://blog.bruggen.com/2014/02/some-neo4j-import-tweaks-what-and-where.html

Windows与Windows之间的差异Linux本身已从一个版本更改为下一个版本(如以下链接所示)
Cypher MATCH query speed
https://stackoverflow.com/a/29055966/4471711

迈克尔上面的回答似乎表明,如果你没有使用Neo4j运行java应用程序,你不需要担心堆(-Xmx),但是考虑到其他人,这似乎并不在我的脑海中。我看到的信息,但也许所有其他信息都在2.2之前。

我也经历过这个。 http://neo4j.com/docs/stable/configuration.html

所以,我所做的是将堆(neo4j.vmoptions中的-Xmx)和pagecache都设置为32g。

答案 1 :(得分:1)

您可以将堆设置修改为4096MB。

此外,在第二个LOAD CSV中,数据库中已存在两个第一个MERGE的数字?如果是,请使用MATCH。

我也会承诺10000级。