是否可以覆盖关系的Neo4j锁定行为?

时间:2015-06-18 16:01:51

标签: multithreading transactions neo4j spring-data-neo4j

请参阅:http://neo4j.com/docs/stable/transactions-locking.html “在创建或删除关系时,将对特定关系及其两个节点进行写锁定”

假设我需要在事务中创建许多关系。我不关心锁定连接到这些关系的节点。特别是对于其他并发事务: 1)更新这些节点上的属性不会干扰我的操作 2)创建或删除与这些节点的其他关系不会干扰我的操作

“默认锁定行为”会在某些情况下产生大量争用和死锁的可能性。例如,我有一个30个节点的集合X,并且两个事务同时创建与X中每个节点有关系的新节点。这要求每个事务在X中的所有30个节点上获得写锁定;僵局很有可能。

将行为描述为“默认”会使其听起来像是可以覆盖此行为。如果是这样,我该怎么做?

(更多背景信息:系统通常使用Spring Data Neo4j和Cypher查询与数据库进行交互。)

1 个答案:

答案 0 :(得分:1)

无法覆盖锁定行为。 Neo4j过去常常支持多个隔离级别,因此可能是“default”一词来自那个时间,而且页面需要更新。

在Neo4j中,您无法删除具有关系的节点。我认为这就是它在创建关系时锁定节点的原因。它干扰修改属性和其他关系是不幸的。

如果您可以对图模型采取自由,则可以引入竞争节点可以将其不稳定关系委派给的关系节点。这样你就会以更复杂的图形为代价来锁定锁。