【问题标题】:how to avoid deadlocks with neo4jNeo4j 如何避免死锁
【发布时间】:2013-12-10 13:13:28
【问题描述】:

我刚刚了解到,当我在 neo4j 中创建 2 个节点之间的关系时,它们都被锁定(http://docs.neo4j.org/chunked/stable/transactions-locking.html)。 然而,在我们的项目中,我们有可以实例化的元素,我们最终在图中有两个节点,通过“INSTANCE_OF”关系链接。 例如,如果我实例化元素 B,我有一个新元素 B1。它们像 B

非常感谢您的帮助

【问题讨论】:

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


    【解决方案1】:

    你有两种策略:

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

    第二种,比较乐观,就是在死锁的情况下实现重试策略,可以捕获DeadlockDetectedException异常,重试操作直到成功。

    【讨论】:

    • 我尝试了第二种策略,确实效果很好,非常感谢。但我没有实现使用第一个。实际上,允许我获取 LockManager 的 graphDatabaseAPI.getLockManager() 已被弃用,我找不到新的方法来做到这一点。你能告诉我吗?谢谢。
    • 看来2.0.0版本中获取锁的新方式是通过Transaction.acquireWriteLock方法,看documentation有更好的解释。跨度>
    • 我正在使用 node.js REST API 连接到 Neo4j。你认为我们可以处理异常吗?
    猜你喜欢
    • 1970-01-01
    • 2013-06-07
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-29
    相关资源
    最近更新 更多