首页 > 解决方案 > 使用py2neo批量API在neo4j数据库中批量创建关系(具有多种关系类型)

问题描述

我正在尝试使用 py2neo bulk api 在 neo4j 数据库中批量创建关系create_relationship()。我在列表中有多种关系类型(如知道、关注等),并且我想在图形数据库中创建大量关系(超过 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. 在调查时,我WriteBatch从 py2neo 库中找到了一些用于创建我们自己的批处理的示例,但是我无法在具有WriteBatch()API 的 py2neo 中导入 neo4j 模块,因为我使用的是 py2neo 版本 2021.1。那么有什么方法可以解决这个问题,或者有没有其他方法可以使用 py2neo 创建自己的批次。

先感谢您。

标签: pythonperformanceneo4jrelationshippy2neo

解决方案


推荐阅读