【问题标题】:Neo4J bulk create relationshipsNeo4J 批量创建关系
【发布时间】:2017-02-09 11:40:08
【问题描述】:

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

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

我的程序

我使用的是 Neo4j 2.1.7。我尝试一次创建大约 50000 个关系。我以 10000 个批量执行查询,插入全部 50000 个大约需要 120-140 秒

我的查询如下:

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

【问题讨论】:

    标签: java neo4j cypher


    【解决方案1】:

    正如documentation中所写:

    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
    

    【讨论】:

    • 非常感谢!我将使用此解决方案测试性能,几小时后通知您
    • @顺便说一句,如果您使用嵌入式服务器,为什么要使用密码?为什么不使用 java-way:graphDb.findNodes 等? neo4j.com/docs/java-reference/current/…
    • 我们将使用螺栓协议
    • @VolodymyrBakhmatiuk 顺便说一句,如果您需要批量创建关系,我不建议您返回任何东西。或者至少返回创建关系的数量 - return count(r)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多