2
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.2 版本的 neo4j。我编写了一个程序,它以只读模式打开数据库,查询并使其在退出前休眠一段时间。

这是相关的文字

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

我认为我不应该收到此错误。只有 2 个进程打开 db ,都处于只读模式。事实上,即使我在另一个进程打开它来写入它时打开数据库,它也应该工作。

4

2 回答 2

3

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

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

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

于 2013-04-17T12:35:38.563 回答
0

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

于 2013-04-17T11:33:16.500 回答