由于并发操作无法序列化:memgraph

Can't serialize due to concurrent operations: memgraph

我正在对单个 memgraph 实例执行混合查询 (reads/write/updates/deletes)。 为此,我使用 Neo4j 的 Java 客户端,我当前使用的所有 API 都是来自驱动程序的同步 API。

在我的案例中,查询的性质使我可以同时执行它们而没有副作用。为了获得更好的性能,我并行触发查询。我得到的错误是 CREATE 操作,我在其中创建两个节点之间的边。这是一致的,因为我多次尝试 运行 相同的设置,每次,所有查询都会通过,除了在创建边缘阶段时崩溃。

查询参考:

OPTIONAL MATCH (node1) WHERE id(node1) = $nodeId1
OPTIONAL MATCH (node2) WHERE id(node2) = $nodeId2
CREATE (node1)-[:KNOWS]-> (node2)

我找不到任何关于此类错误的文档。请指出一些类似这样的文档或任何变通方法,如果其他查询正在操作相同的对象,我可以使用这些变通方法让 memgraph 暂停查询。

我认为的一种方法是对任何此类失败的查询实施重试,但我正在寻找一种更简洁的方法。

P.S。我之前 运行 在 Neo4j 上进行了相同的设置并且没有遇到任何问题。

是的,在出现此错误的情况下,代码应重试查询。我认为 Neo4j 中可能会发生类似的问题,但由于 Memgraph 对锁定更乐观,有时错误可能会更频繁地发生。一般来说,正确的做法是对这种情况实施错误处理。