Neo4j py2neo合并导致并行化时ConstraintValidationFailed节点已存在

Neo4j py2neo合并导致并行化时ConstraintValidationFailed节点已存在,neo4j,cypher,py2neo,Neo4j,Cypher,Py2neo,我试图在py2Neo中使用多进程合并来并行化一个图形创建查询。请求如下: def add_edge(start_node_name, start_type, end_node_name, end_type): statement = """MERGE (A:Entity{Name:{Start}, Type:{T_start}}) MERGE (B:Entity{Name:{End}, Type:{T_end}})

我试图在py2Neo中使用多进程合并来并行化一个图形创建查询。请求如下:

def add_edge(start_node_name, start_type, end_node_name, end_type):
    statement = """MERGE (A:Entity{Name:{Start}, Type:{T_start}}) 
                   MERGE (B:Entity{Name:{End}, Type:{T_end}}) 
                   MERGE (A)-[r:LINKED_TO]->(B) ON CREATE SET r.cnt = 1 ON MATCH SET r.cnt = r.cnt + 1"""

    trans_action.run(statement, {"Start": start_node_name, "End": end_node_name, "T_start": start_type, "T_end": end_type})
对于遇到的每个节点,每个进程都多次执行相同的函数。节点“start\u name”或“end\u name”可以复制,这就是我使用MERGE的原因

根据我的理解,使用MERGE可以防止多次创建节点:如果它与已经存在的节点匹配,则只需选择它并继续。然而,我刚刚收到py2neo的一个错误,指出:

py2neo.database.ClientError: ConstraintValidationFailed: Node(411606) already exists with label `Entity` and property `Name` = 'INSA RENNES'
这不应该发生,因为如果这是真的,节点将只是匹配,它将只是使用它。我看到的唯一原因是事务不能保证原子性,两个进程发现节点不存在,因此试图同时创建它。 根据我的理解,这也是不可能的,因为事务应该是原子的。除非这是py2neo的问题,但从错误消息来看,它看起来更像Neo的问题