如何避免与neo4j的死锁

时间:2013-12-10 13:13:29

标签: neo4j spring-data-neo4j database-deadlocks

我刚刚了解到,当我在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会是一个更好的解决方案,而不是将它们与关系联系起来吗?我认为不会因为我们失去了所有图形的兴趣,但我真的不知道如何避免这些死锁?

非常感谢您的帮助

1 个答案:

答案 0 :(得分:3)

您有两种策略:

第一个是悲观的,在添加相关的B1节点之前使用LockManager getWriteLock 方法获取节点B上的独占锁,并在关系创建完成后立即解锁;

第二个,一个乐观的,就是在遇到死锁的情况下实现重试策略,你可以捕获DeadlockDetectedException异常并重试该操作直到它成功。