EmbeddedReadOnlyGraphDatabase抱怨锁定数据库

时间:2013-04-17 10:57:28

标签: neo4j readonly

Exception in thread "main" java.lang.IllegalStateException: Database locked.
    at org.neo4j.kernel.InternalAbstractGraphDatabase.create(InternalAbstractGraphDatabase.java:289)
    at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:227)
    at org.neo4j.kernel.EmbeddedReadOnlyGraphDatabase.<init>(EmbeddedReadOnlyGraphDatabase.java:81)
    at org.neo4j.kernel.EmbeddedReadOnlyGraphDatabase.<init>(EmbeddedReadOnlyGraphDatabase.java:72)
    at org.neo4j.kernel.EmbeddedReadOnlyGraphDatabase.<init>(EmbeddedReadOnlyGraphDatabase.java:54)
    at QueryNodeReadOnly.main(QueryNodeReadOnly.java:55)

这是使用1.8版本的neo4j。我编写了一个程序,以只读模式打开数据库,查询并让它在退出前暂停一段时间。

以下是相关文字

 graphDb = new EmbeddedReadOnlyGraphDatabase( dbname); // Line 55 - the exception.
  ......
  ......
  ......
  ......
  ......
    if(sleepVal > 0)
    Thread.sleep(sleepVal);

我估计我不应该得到这个错误。在只读模式下,只有2个进程打开数据库。实际上,即使我在另一个进程打开它以写入数据库时​​打开数据库,它也应该工作。

2 个答案:

答案 0 :(得分:3)

我们不允许两个数据库同时访问磁盘上的相同文件 - 即使是在只读模式下。

原因是虽然我们不允许您以只读模式修改数据库,但Lucene仍然会在处理读取请求时写入磁盘,并且让两个实例访问这些相同的索引文件会导致竞争条件和指数腐败。

为什么你希望2x实例同时访问相同的文件?你的用例是什么?

答案 1 :(得分:0)

您无法与嵌入式数据库建立多个连接。也许您应该考虑使用REST服务器。