cle*_*ent 5 neo4j database-deadlocks spring-data-neo4j
我刚刚了解到,当我在 neo4j 中创建两个节点之间的关系时,它们都被锁定(http://docs.neo4j.org/chunked/stable/transactions-locking.html)。然而,在我们的项目中,我们有可以实例化的元素,并且最终在图中有两个通过“INSTANCE_OF”关系链接的节点。例如,如果我实例化元素 B,我就会有一个新元素 B1。它们存储在图中,如 B<-INSTANCE_OF-B1。我的问题是许多用户可以同时实例化元素 B,这会导致死锁。请问我怎样才能避免这些僵局?我不需要在 B 上写入属性,我只想将 B1 “附加”到我的图中的 B 。在 B1 中拥有代表 B id 的属性是否会比将它们与关系链接起来是更好的解决方案?我认为不会,因为我们失去了所有的图形兴趣,但我真的不知道如何避免这些僵局?
非常感谢您的帮助
你有两个策略:
第一种是悲观的,在添加相关的 B1 节点之前使用LockManager getWriteLock方法获取节点 B 上的独占锁,并在关系创建完成后立即解锁;
第二种是乐观的,就是在死锁的情况下实现重试策略,可以捕获DeadlockDetectedException异常并重试操作,直到成功。