我使用嵌入式JavaAPI作为实时应用程序。当一个事务被锁定时,我的另一个ajax调用会抛出DB实例被其他进程锁定的错误。大多数时候我的电话都是只读的。因此,我的问题是: Neo4J JavaAPI中是否存在任何方法,以便我可以将事务锁定为只读,以便其他请求能够从DB获取数据。
dbFactory = new GraphDatabaseFactory();
db= dbFactory.newEmbeddedDatabase(DB_PATH);
tx = db.beginTx();
因此,在这个db.beginTx()中,我能告诉Neo4j它是只读模式或类似的模式吗?
谢谢,
发布于 2015-09-18 08:06:31
不幸的是,没有这样的方法。但是,事实上,这是不必要的。
Neo4j锁定行为
读锁:它们是“共享的”。如果一个事务从节点读取数据,那么其他事务也可以这样做。
写锁:它们是“独占的”。当采取写锁时,所有事务将等待此锁被重新释放,然后才会继续进行。如果另一个事务已在节点上读取锁,则写锁将等待此节点“空闲”。
在正常情况下--您不应该收到任何错误。
有可能得到DeadlockException (更多信息),但这是罕见的情况。如果您不使用自己的同步方法,那么您将不会看到这样的异常。
编辑:
您应该确保应用程序中只有一个GraphDatabaseService的实例。DB实例完全是线程安全。
https://stackoverflow.com/questions/32645985
复制相似问题