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

所以在这个db.beginTx()中我可以告诉Neo4j它是一个只读模式还是那样的。
谢谢,
答案 0 :(得分:5)
不幸的是没有这样的方法。但事实上 - 它并不需要。
读锁:它们是“共享的”。如果一个事务从节点读取数据,那么其他事务也可以这样做。
写锁:它们是“独占的”。当执行写入锁定时,所有事务将等待,直到该锁定将被重新启动,然后才进一步继续。如果另一个事务在节点上具有读锁定,那么写锁定将等待该节点“空闲”。
在正常情况下 - 您不应该收到任何错误。
有可能获得File file = new File(SAVED_IMAGE_FILE_PATH);
(more info),但这种情况很少见。如果您不使用自己的同步方法,则不会看到此类异常。
修改强>
您应该确保您的应用中只有一个 DeadlockException
个实例。数据库实例完全是线程安全的。