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