Graph 如何在Neo4J中插入大量节点
我需要在Neo4j中插入大约100万个节点。我需要指定每个节点都是唯一的,因此每次插入节点时都必须检查是否存在相同的节点。此外,关系必须是唯一的 我正在使用Python和Cypher:Graph 如何在Neo4J中插入大量节点,graph,neo4j,nodes,traceroute,Graph,Neo4j,Nodes,Traceroute,我需要在Neo4j中插入大约100万个节点。我需要指定每个节点都是唯一的,因此每次插入节点时都必须检查是否存在相同的节点。此外,关系必须是唯一的 我正在使用Python和Cypher: uq = 'CREATE CONSTRAINT ON (a:ipNode8) ASSERT a.ip IS UNIQUE' ... queryProbe = 'MERGE (a:ipNode8 {ip:"' + prev + '"})' ... queryUpdateRelationship= 'MATCH (a
uq = 'CREATE CONSTRAINT ON (a:ipNode8) ASSERT a.ip IS UNIQUE'
...
queryProbe = 'MERGE (a:ipNode8 {ip:"' + prev + '"})'
...
queryUpdateRelationship= 'MATCH (a:ipNode8 {ip:"' + prev + '"}),(b:ipNode8 {ip:"' + next + '"}) MERGE (a)-[:precede]->(b)'
问题是,将40-50K节点放入Neo4j后,插入速度会很快减慢,我无法再放入任何其他节点。对于这样的大规模插入,最好与定期提交或 我认为使用参数化查询而不是将值追加到字符串中也是最佳实践
此外,您还在:ipNode8上创建了一个唯一的属性约束,而不是:ipNode,后者是第一个合并的属性约束。似乎你也需要一个独特的约束条件。你的问题是非常开放的。除了@InverseFalcon的建议之外,您还可以调查其他一些事情来加快进度
数据
应该是格式为{a:123,b:234}
的对象列表。您可以使列表尽可能长(例如,20K),以避免在服务器在单个事务中处理列表时耗尽服务器上的内存。(此查询假设您还希望创建b
(如果它不存在)
您也可以使用APOC程序UNWIND {data} AS d
MERGE (a:ipNode8 {ip: d.a})
MERGE (b:ipNode8 {ip: d.b})
MERGE (a)-[:precede]->(b)