在Neo4j中使用密码加速关系和节点创建

时间:2014-06-11 22:16:33

标签: java performance neo4j cypher query-performance

我有2个csv文件A和B. 文件A包含7000行,包含6个属性,文件B包含10M行,包含11个属性。 此外,文件A具有用作主键的属性PKA,而文件B具有用作PKA的外键方面的属性FKA。

我想以这种方式将这些文件加载​​到Neo4j中: 1 - 为文件A和文件B的每一行插入一个新节点 2 - 在创建的任何节点之间添加一个关系,表示所描述的主关系和外键之间的关系。

目前,我已使用JAVA API为BatchInserter插入这些文件,为这些文件的每一行添加一个节点,并分别为文件A和文件B设置标签“A”和“B”。 我还为PKA和FKA创建了两个索引。 要添加关系,我的意图是调用以下cypher语句(来自Neo4jShell):

match (a:A), (b:B) where a.PKA=b.FKB create (a)<-[:KEYREL]-(b);

我的问题是: - 使用BatchInserter添加节点需要14分钟用于文件B(最大的一个),最后只有一个提交(~12k节点/秒,~130k属性/秒),我想加速2倍的导入过程。 - 使用此数据集大小无法处理密码查询,但我希望可以使用。

我在运行IntelXeon @ 2.6Ghz双核和8GB RAM且安装了Windows 64bit和Java8 64位的VM上运行。 我使用以下java选项运行我的import java程序和Neo4jShell:

-server -XX:+UseConcMarkSweepGC -Xms2000m -Xmx5000m

1 个答案:

答案 0 :(得分:1)

当在大量数据上使用时,运行MATCH通常很慢。

您可以尝试加速在节点上创建constraint,其中您将每个节点定义为唯一。这可以speed up the MATCH操作,但创建约束也需要时间:

CREATE CONSTRAINT ON (a:A) ASSERT a.PKA IS UNIQUE;
CREATE INDEX ON :B(PKB); 

然后,您可以运行MATCH,您可以根据Neo4j docs从第三个CSV文件运行MATCH,它描述了与您类似的场景。