用py2neo查询neo4j的写性能

Query writing performance on neo4j with py2neo

目前我正在努力寻找一种高效的方法,运行使用 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 的 运行 many 但没有成功,查询从未完成。我也尝试了自动提交的相同编写方法。有一个更好的方法吗?有什么技巧,比如先删除索引,然后插入数据后再添加索引?

-- 编辑:附加信息:

我正在使用 Neo4j 3.4、Py2neo v4 和 Python 3.7

您可能想阅读 Michael Hunger 的 tips and tricks for fast batched updates

关键技巧是使用UNWIND将列表元素转换为行,然后逐行执行后续操作。

有支持功能可以轻松为您创建列表,例如range()

例如,如果你想创建 10k 个节点并添加一个名称 属性,然后 return 节点名称及其图形 ID,你可以这样做:

UNWIND range(1, 10000) as index
CREATE (n:Node {name:'Node ' + index})
RETURN n.name as name, id(n) as id

同样,如果您有大量数据要导入,您可以创建参数映射列表,调用查询,然后展开列表以立即对每个条目进行操作,类似于我们处理 CSV 文件的方式加载 CSV。