我尝试过使用 py2neo 上传中等大小数据集的方法。就我而言,每天需要加载大约 80 K 个节点和 400 K 个边。我想分享我的经验,并向社区询问是否还有我没有遇到的更好的方法。
使用 创建节点graph.merge_one()并使用 设置属性push()。我很快就忽略了这一点,因为它非常慢,甚至在几分钟内都不会超过 10 K 记录。毫不奇怪,py2neo 的文档和这里的一些帖子推荐使用 Cypher。
py2neo.cypher.CypherTransaction append()在循环中和commit()最后使用。
# query sent to MSSQL. Returns ~ 80K records
result = engine.execute(query)
statement = "MERGE (e:Entity {myid: {ID}}) SET e.p = 1"
# begin new Cypher transaction
tx = neoGraph.cypher.begin()
for row in result:
tx.append(statement, {"ID": row.id_field})
tx.commit()
Run Code Online (Sandbox Code Playgroud)
这会超时并使 Neo4j 服务器崩溃。我知道问题是所有 80 K Cypher 语句都试图一次性执行。