目前,我正在努力寻找一种高性能的方法,使用 py2neo 运行多个查询。我的问题是 python 中有一大堆需要写入 neo4j 的写入查询。
我现在尝试了多种方法来解决这个问题。对我来说最好的工作方法如下:
from py2neo import Graph
queries = ["create (n) return id(n)","create (n) return id(n)",...] ## list of queries
g = Graph()
t = graph.begin(autocommit=False)
for idx, q in enumerate(queries):
t.run(q)
if idx % 100 == 0:
t.commit()
t = graph.begin(autocommit=False)
t.commit()
编写查询仍然需要很长时间。我还尝试从 apoc 运行多次但没有成功,查询从未完成。我也尝试了自动提交的相同写入方法。有一个更好的方法吗?有没有什么技巧,比如先删除索引,然后在插入数据后添加索引?
-- 编辑:附加信息:
我正在使用 Neo4j 3.4、Py2neo v4 和 Python 3.7
您可能想阅读迈克尔·饥饿 (Michael Hunger) 的著作快速批量更新的提示和技巧 https://medium.com/neo4j/5-tips-tricks-for-fast-batched-updates-of-graph-structures-with-neo4j-and-cypher-73c7f693c8cc.
关键技巧是使用UNWIND https://neo4j.com/docs/developer-manual/current/cypher/clauses/unwind/将列表元素转换为行,然后逐行执行后续操作。
有一些支持功能可以轻松地为您创建列表,例如range() https://neo4j.com/docs/developer-manual/current/cypher/functions/list/#functions-range.
举个例子,如果你想创建 10k 个节点并添加一个 name 属性,然后返回节点名称及其图形 id,你可以这样做:
UNWIND range(1, 10000) as index
CREATE (n:Node {name:'Node ' + index})
RETURN n.name as name, id(n) as id
同样,如果您有大量数据要导入,则可以创建参数映射列表,调用查询,然后展开列表以立即对每个条目进行操作,类似于我们使用 LOAD CSV 处理 CSV 文件的方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)