Neo4jJDBC驱动程序3.x是线程安全的吗

Neo4jJDBC驱动程序3.x是线程安全的吗,jdbc,neo4j,google-cloud-platform,google-cloud-dataflow,Jdbc,Neo4j,Google Cloud Platform,Google Cloud Dataflow,我正在运行一个安装程序,使用JDBCAPI安装Neo4jJDBC驱动程序连接到VM中的neo4j数据库,在执行一些多线程工作时遇到了死锁问题。我想知道是否有人知道Neo4jJDBC驱动程序3.x是否是线程安全的 错误日志 Exception: java.sql.BatchUpdateException: org.neo4j.driver.v1.exceptions.TransientException: LockClient[4211] can't wait on resource RWLock

我正在运行一个安装程序,使用JDBCAPI安装Neo4jJDBC驱动程序连接到VM中的neo4j数据库,在执行一些多线程工作时遇到了死锁问题。我想知道是否有人知道Neo4jJDBC驱动程序3.x是否是线程安全的

错误日志

Exception: java.sql.BatchUpdateException: org.neo4j.driver.v1.exceptions.TransientException: LockClient[4211] can't wait on resource RWLock[NODE(2410), hash=1674994875] since => LockClient[4211] <-[:HELD_BY]- RWLock[NODE(2403), hash=1544505462] <-[:WAITING_FOR]- LockClient[4205] <-[:HELD_BY]- RWLock[NODE(2410), hash=1674994875]
org.neo4j.jdbc.bolt.BoltPreparedStatement.executeBatch(BoltPreparedStatement.java:178)
org.apache.commons.dbcp2.DelegatingStatement.executeBatch(DelegatingStatement.java:345)
org.apache.commons.dbcp2.DelegatingStatement.executeBatch(DelegatingStatement.java:345)
org.apache.beam.sdk.io.jdbc.JdbcIO$Write$WriteFn.finishBundle(JdbcIO.java:480)
Caused By: org.neo4j.driver.v1.exceptions.TransientException: LockClient[4211] can't wait on resource RWLock[NODE(2410), hash=1674994875] since => LockClient[4211] <-[:HELD_BY]- RWLock[NODE(2403), hash=1544505462] <-[:WAITING_FOR]- LockClient[4205] <-[:HELD_BY]- RWLock[NODE(2410), hash=1674994875]
org.neo4j.driver.internal.connector.socket.SocketResponseHandler.handleFailureMessage(SocketResponseHandler.java:71)
org.neo4j.driver.internal.messaging.PackStreamMessageFormatV1$Reader.unpackFailureMessage(PackStreamMessageFormatV1.java:464)
org.neo4j.driver.internal.messaging.PackStreamMessageFormatV1$Reader.read(PackStreamMessageFormatV1.java:425)
org.neo4j.driver.internal.connector.socket.SocketClient.receiveOne(SocketClient.java:130)
org.neo4j.driver.internal.connector.socket.SocketConnection.receiveOne(SocketConnection.java:143)
Stack trace truncated. Please see Cloud Logging for the entire trace.

Exception:java.sql.BatchUpdateException:org.neo4j.driver.v1.exceptions.transienteException:LockClient[4211]无法在资源rBlock[NODE(2410),hash=1674994875]上等待,因为=>LockClient[4211]死锁是存在并发请求时“正常”neo4j行为的结果。您应该了解neo4j的,以及

这可能是最有用的一段:

频繁发生死锁表示并发写入 请求以无法执行的方式发生 他们同时也不辜负预期的隔离和保护 一致性。解决方案是确保并发更新在 合理的方法。例如,给定两个特定节点(A和B), 以随机顺序向这两个节点添加或删除关系 当有两个或多个事务时,每个事务都会导致死锁 更多的交易同时进行。一个解决办法是 确保更新总是以相同的顺序进行(先A后B)。 另一个解决方案是确保每个线程/事务都不会 对节点或关系进行任何与其他节点或关系冲突的写入 并发事务。例如,可以通过让 单线程执行特定类型的所有更新


什么样的僵局问题?请显示错误日志。使用错误日志更新了描述。谢谢您的回答。我的设置不允许线程遵循特定的顺序,我也不能使用
try
catch
子句来执行重试。然而,我能够通过使用
neo4jjava驱动程序
并为每个线程创建一个新的驱动程序来解决这个问题,因为java驱动程序是线程安全的。这就是为什么我想知道Neo4jJDBC驱动程序是否也是线程安全的。线程安全驱动程序不会防止死锁。避免neo4j死锁的唯一方法是了解neo4j自动锁定是如何工作的,以及在必要时如何解决这一问题。neo4j jdbc 3.X在后台使用neo4j java驱动程序,并且需要向其发送事务。我可以假设,如果neo4jjava驱动程序适合您,那么neo4jdbc驱动程序也适合您(当然,如果您使用的是BOLT协议)