Neo4j 事务锁定

标签 neo4j spring-data-neo4j java

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

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


所以在这个 db.beginTx() 我可以告诉 Neo4j 它是一个只读模式或类似的模式。

谢谢,

最佳答案

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

Neo4j locking behaviour

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

写锁:它们是“独占的”。当获取写锁时,所有事务将等待直到此锁被释放,然后才继续进行。如果另一个事务在节点上有读锁,那么写锁将一直等到这个节点“空闲”。

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

有机会获得DeadlockException ( more info ),但这种情况很少见。如果不使用自己的同步方法,则不会看到此类异常。

编辑:

你应该确保你只有 GraphDatabaseService 的实例在您的应用程序中。数据库实例是完全线程安全的。

关于Neo4j 事务锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32645985/

相关文章:

java - 如何使用 Neo4j Ha 集群配置 Spring?

Java:在其他各种类中使用一个类的相同实例

java.lang.VerifyError : (class: GregorSamsa, method : . ..) 跳转或分支的非法目标

java - 使用 JNDI 连接到 AD - 为什么必须以用户名@域的格式提供安全主体?

java - 自定义查询不适用于 Spring Data Neo4j 存储库中的界面投影

java - 在处理来自 @Index(unique=true) 的 ClientException 后,对 Neo4j 的所有后续调用都会卡住

java - Neo4j 无法在 Centos 上启动

neo4j - 如何获得关系的标签

json - 我想得到一个 json 格式的 Neo4j 结果集?

Neo4j 1.9 : How connect to HA machines? 通过 IP?当机器出现故障时我可以做什么?