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
答案 0 :(得分:1)
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