Py2neo 中的批量插入
Bulk Insertion in Py2neo
我正在为 mongo-connector 编写自定义文档管理器,以将 mongodb 文档复制到 neo4j。在这里,我想创建批量关系。我正在使用 py2neo2020.0.
好像以前的版本有一些选项,这个版本没有。有什么方法可以在 py2neo
中创建批量节点和关系
我目前正在研究批量加载功能。下一个版本中将提供一些新功能。在那之前,Cypher UNWIND...CREATE 查询是您提高性能的最佳选择。
我强烈建议切换到 neo4j
Python 驱动程序,因为 Neo4j 直接支持它。
无论如何,您也可以直接在 Cypher 中进行批量插入,and/or 使用 neo4j
驱动程序从 Python 中调用该 Cypher。
我建议先导入节点,然后再导入关系。如果您有一个保证节点的唯一标识符,它会有所帮助,因为这样您就可以在加载之前在 属性 上设置索引。然后你可以像这样从 CSV(或者更好的是 TSV)文件加载节点:
// Create constraint on the unique ID - greatly improves performance.
CREATE CONSTRAINT ON (a:my_label) ASSERT a.id IS UNIQUE
;
// Load the nodes, along with any properties you might want, from
// a file in the Neo4j import folder.
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///my_nodes.tsv" AS tsvLine FIELDTERMINATOR '\t'
CREATE (:my_label{id: toInteger(tsvLine.id), my_field2: tsvLine.my_field2})
;
// Load relationships.
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///my_relationships.tsv" AS tsvLine FIELDTERMINATOR '\t'
MATCH(parent_node:my_label)
WHERE parent_node.id = toInteger(tsvLine.parent)
MATCH(child_node:my_label)
WHERE child_node.id = toInteger(tsvLine.child)
CREATE(parent_node) --> (child_node)
;
我正在为 mongo-connector 编写自定义文档管理器,以将 mongodb 文档复制到 neo4j。在这里,我想创建批量关系。我正在使用 py2neo2020.0.
好像以前的版本有一些选项,这个版本没有。有什么方法可以在 py2neo
中创建批量节点和关系我目前正在研究批量加载功能。下一个版本中将提供一些新功能。在那之前,Cypher UNWIND...CREATE 查询是您提高性能的最佳选择。
我强烈建议切换到 neo4j
Python 驱动程序,因为 Neo4j 直接支持它。
无论如何,您也可以直接在 Cypher 中进行批量插入,and/or 使用 neo4j
驱动程序从 Python 中调用该 Cypher。
我建议先导入节点,然后再导入关系。如果您有一个保证节点的唯一标识符,它会有所帮助,因为这样您就可以在加载之前在 属性 上设置索引。然后你可以像这样从 CSV(或者更好的是 TSV)文件加载节点:
// Create constraint on the unique ID - greatly improves performance.
CREATE CONSTRAINT ON (a:my_label) ASSERT a.id IS UNIQUE
;
// Load the nodes, along with any properties you might want, from
// a file in the Neo4j import folder.
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///my_nodes.tsv" AS tsvLine FIELDTERMINATOR '\t'
CREATE (:my_label{id: toInteger(tsvLine.id), my_field2: tsvLine.my_field2})
;
// Load relationships.
USING PERIODIC COMMIT 1000
LOAD CSV WITH HEADERS FROM "file:///my_relationships.tsv" AS tsvLine FIELDTERMINATOR '\t'
MATCH(parent_node:my_label)
WHERE parent_node.id = toInteger(tsvLine.parent)
MATCH(child_node:my_label)
WHERE child_node.id = toInteger(tsvLine.child)
CREATE(parent_node) --> (child_node)
;