Neo4j事务锁定

时间:2015-09-18 07:14:26

标签: neo4j spring-data-neo4j java-api

我使用嵌入式JavaAPI进行实时应用。当一个事务被锁定数据库时,我的另一个ajax调用抛出数据库实例已被其他进程锁定的错误。大部分时间我的电话都是只读的。所以我的问题是:Neo4J JavaAPI中是否存在任何方法,以便我可以将事务锁定为只读,以便其他请求可以从DB获取数据。



dbFactory = new GraphDatabaseFactory();
db= dbFactory.newEmbeddedDatabase(DB_PATH);
tx = db.beginTx();




所以在这个db.beginTx()中我可以告诉Neo4j它是一个只读模式还是那样的。

谢谢,

1 个答案:

答案 0 :(得分:5)

不幸的是没有这样的方法。但事实上 - 它并不需要。

Neo4j locking behaviour

读锁:它们是“共享的”。如果一个事务从节点读取数据,那么其他事务也可以这样做。

写锁:它们是“独占的”。当执行写入锁定时,所有事务将等待,直到该锁定将被重新启动,然后才进一步继续。如果另一个事务在节点上具有读锁定,那么写锁定将等待该节点“空闲”。

在正常情况下 - 您不应该收到任何错误。

有可能获得File file = new File(SAVED_IMAGE_FILE_PATH);more info),但这种情况很少见。如果您不使用自己的同步方法,则不会看到此类异常。

修改

您应该确保您的应用中只有一个 DeadlockException个实例。数据库实例完全是线程安全的。