gpt4 book ai didi

neo4j - 使用 Py2Neo 在 Neo4j 中加速节点之间的边创建

转载 作者:行者123 更新时间:2023-12-04 11:12:58 37 4
gpt4 key购买 nike

我正在尝试在 neo4j 中创建一个巨大的数据库,它将有大约 200 万个节点和大约 400 万条边。我已经能够通过在每个 1000 个节点的批次中创建节点来加快节点创建过程。但是,当我尝试在这些节点之间创建边时,该过程会变慢,然后会超时。最初我虽然根据节点名称进行合并可能会很慢,但是即使我使用 ids 也会变慢 - 我已经手动创建了这些 ids。下面我给出了数据和代码的剪辑,以便更好地理解问题-

  • Node.csv - 此文件包含有关节点的详细信息
    NodeName NodeType NodeId
    Sachin Person 1
    UNO Organisation 2
    Obama Person 3
    Cricket Sports 4
    Tennis Sports 5
    USA Place 6
    India Place 7
  • Edges.csv - 此文件仅包含节点 ID 及其关系
    Node1Id Relationship Node2Id
    1 Plays 4
    3 PresidentOf 6
    1 CitizenOf 7

  • 创建节点的代码如下 -
    from py2neo import Graph
    graph = Graph()
    statement =""
    tx = graph.cypher.begin()
    for i in range(len(Node)):
    statement = "Create(n{name:{A} ,label:{C}, id:{B}})"
    tx.append(statement,{"A": Node[i][0],"C":str(Node[i][1]), "B":str(Node[i][2])})
    if i % 1000 == 0:
    print str(i) + "Node Created"
    tx.commit()
    tx = self.graph.cypher.begin()
    statement =""

    上面的代码奇迹般地运行,在 5 分钟内完成了 200 万节点的创建。
    创建边缘的代码如下 -
    tx = graph.cypher.begin()
    statement = ""
    for i in range(len(Edges)):
    statement = "MATCH (a {id:{A}}), (b {id:{B}}) CREATE (a)-[:"+ Edges[i][1]+"]->(b)"
    tx.append(statement, {"A": Edges[i][0], "B": Edges[i][2]})
    if i % 1000 == 0:
    print str(i) + " Relationship Created"
    tx.commit()
    tx = graph.cypher.begin()
    statement = ""

    上面,代码可以很好地创建前 1000 个关系,但之后需要很多时间并且连接超时。

    我迫切需要解决这个问题,任何可以加快关系创建过程的帮助都会非常有帮助。

    请注意 - 我没有使用 Neo4j 的导入 csv 或 Neo4j shell 导入,因为这些假设节点之间的关系是固定的。而对我来说,关系各不相同,一次导入一个关系是不可行的,因为这意味着手动导入近 2000 次。

    最佳答案

    您忘记为节点使用标签,然后在标签 + id 上创建约束。

    create constraint on (o:Organization) assert o.id is unique;
    create constraint on (p:Person) assert p.id is unique;

    Create(n:Person {name:{A} ,id:{B}})
    Create(n:Organization {name:{A} ,id:{B}})

    match (p:Person {id:{p_Iid}), (o:Organization {id:{o_id}})
    create (p)-[:WORKS_FOR]->(o);

    关于neo4j - 使用 Py2Neo 在 Neo4j 中加速节点之间的边创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31475816/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com