并发写入时出现 Neo4j 500 内部服务器错误

Neo4j 500 Internal Server Error on concurrent writes

我在对 Neo4j 执行并发写入时偶尔会遇到 500 内部服务器错误。下面的查询示例。

MATCH (u1:User {id:{id1}})
MATCH (u2:User {id:{id2}})
MERGE (u1)-[:FOLLOWS]->(u2)

对于非常受欢迎的用户,您可以体验到 u2 节点的大量并发关系创建。

目前我正在明确处理 DeadlockDetectedException 并且有一个重试逻辑。但有时我会从服务器获得 500,响应正文如下。

 <html>
     <head><title>500 Internal Server Error</title></head>
     <body bgcolor="white">
         <center><h1>500 Internal Server Error</h1></center>
         <hr><center>nginx</center>
      </body>
 </html>

这让我不知道服务器上发生了什么。如果我处理它并执行重试,一切都会按预期进行。但这看起来很狡猾,因为我基本上猜测在这种特殊情况下发生了死锁,这可能是错误的并且与实际的服务器错误无关。

此问题与我们的 ngnix 框配置有关,该配置在某些情况下给出通用 500 而不是传播 DeadlockDetectedException