有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Neo4j事务锁定

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

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

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

谢谢


共 (1) 个答案

  1. # 1 楼答案

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

    Neo4j locking behaviour

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

    写锁:它们是“独占的”。当采取写锁时,所有事务都将等待,直到该锁被解除,然后才继续进行。如果另一个事务在节点上具有读锁,则写锁将等待该节点“空闲”

    在正常情况下,您不应收到任何错误

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

    编辑:

    您应该确保应用程序中只有一个GraphDatabaseService的实例。DB实例是完全线程安全的