使用py2neo批量API(具有多种关系类型)在neo4j数据库中批量创建关系

2024-05-06 00:07:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用py2neo批量apicreate_relationship()在neo4j数据库中批量创建关系。 我在列表中有多种关系类型(如knows、follows等),而且我想在图形数据库中创建大量关系(超过3000万)。 目前我正在使用Neo4j Desktop 1.4.7和python版本3.9

我已经使用create_nodes()py2neo.bulk api批量创建了节点。
下面是相同的示例代码:

from py2neo import Graph
from py2neo.bulk import create_nodes,create_relationships
from py2neo.data import Node

graph = Graph(auth=('neo4j', 'abc123'))
one_node=Node("Person", name="Alice", nid="01")
two_node=Node("Person", name="ACME", nid="02")
t_node=Node("Person", name="Mahi", nid="03")
f_node=Node("Person", name="Ali", nid="04")
data = []
data.append(one_node)
data.append(two_node)
data.append(t_node)
data.append(f_node)

try:
    create_nodes(graph.auto(), data, labels={"Person"})
except Exception as error:
    print(error)

try:
    graph.run("CREATE INDEX ON :Person(nid)")
except Exception as error:
    print(error)

#I have created a relationship using create_relationship() api of 
#py2neo.bulk. Below is the sample code for the same.

rel_data= [
    ("01", {}, "02"),
    ("03", {}, "04"),
]

try:
    create_relationships(graph.auto(), rel_data, "WORKS_FOR", \
        start_node_key=("Person", "nid"), end_node_key=("Person", "nid"))
except Exception as error:
    print(error)

我面临以下问题:

  1. 在上面的代码中,如果我为所有3000万个节点提供一个关系类型,那么数据只需74秒就可以插入。但是我想在Neo4j中插入的数据有多种关系类型(就像我提到的文件有79种关系类型,每种类型都有自己的数据集)。因此,我用它自己的数据调用了create_relationship()API 79次,花了9分钟才完成。所以结论是单一的关系类型可以提供更好的性能,我们可以在一次访问create_relationship()API中提供多个关系类型

  2. 在上面的代码中,如果我没有为create_relationship()API提供开始键和结束键,那么创建边的性能会变快,但缺少一些边,但是如果我提供开始键和结束键(如上面的代码所示),那么性能会变慢。那么,有没有更好的方法来建立大量的关系呢?仅供参考在我们的例子中,我们不想使用Load csv查询,如果可能,请建议其他解决方案

  3. 在调查过程中,我从py2neo库中找到了一些WriteBatch样本,用于创建我们自己的批处理,但我无法在py2neo中导入neo4j模块,该模块具有WriteBatch()API,因为我使用的是py2neo版本2021.1。那么,有没有办法解决这个问题,或者有没有其他办法使用py2neo创建自己的批处理

先谢谢你


Tags: 代码namenode类型data关系createerror