Neo4J批量创建关系

时间:2017-02-09 11:40:09

标签: java neo4j cypher

CSV是加速创建批量关系的唯一选择吗?

我在互联网上阅读了很多文章,他们都在讲述CSV。 CSV肯定会给我带来性能提升(你能想到有多大吗?),但我不确定我能否以CSV格式存储数据。 还有其他选择吗?使用Neo4J 3 BOLT协议可以获得多少收益?

我的节目

我正在使用Neo4j 2.1.7。我尝试一次创建大约50000个关系。我以10000的批量执行查询,并且需要 120-140秒 才能插入所有50000.

我的查询如下:

MATCH (n),(m) 
WHERE id(n)=5948 and id(m)=8114 
CREATE (n)-[r:MY_REL {
    ID:"4611686018427387904",
    TYPE: "MY_REL_1"
    PROPERTY_1:"some_data_1",
    PROPERTY_2:"some_data_2",
    .........................
    PROPERTY_14:"some_data_14"
}]->(m) 
RETURN id(n),id(m),r

1 个答案:

答案 0 :(得分:1)

正如documentation

所写
  

Cypher支持使用参数查询。这意味着开发人员不会   必须求助于字符串构建来创建查询。此外   这也使得Cypher的执行计划缓存变得更加容易。

因此,您需要将数据打包为参数并通过cypher查询传递:

UNWIND {rows} as row
MATCH (n),(m) 
WHERE id(n)=row.nid and id(m)=row.mid
CREATE (n)-[r:MY_REL {
    ID:row.relId,
    TYPE:row.relType,
    PROPERTY_1:row.someData_1,
    PROPERTY_2:row.someData_2,
    .........................
    PROPERTY_14:row.someData_14
}]->(m) 
RETURN id(n),id(m),r