0

我的应用程序正在填充 Neo4j 图形数据库/tmp/import.db。除了我的单元测试,我喜欢使用 Neo4j 浏览器(AKA Neo4j 社区)在同一个数据库中进行一些挖掘。当浏览器运行时,我的应用程序在运行时崩溃,因为它的数据库被锁定:

Exception in thread "main" java.lang.RuntimeException: Error starting org.neo4j.kernel.EmbeddedGraphDatabase, /tmp/import.db
    at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:330)
    at org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:63)
    at org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:92)
    at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:198)
    at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:69)
    at no.marcello.cmdb.Import.<init>(Import.java:34)
    at no.marcello.cmdb.Main.main(Main.java:10)
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.StoreLockerLifecycleAdapter@5d20e46' was successfully initialized, but failed to start. Please see attached cause exception.
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:509)
    at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115)
    at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:307)
    ... 6 more
Caused by: org.neo4j.kernel.StoreLockException: Unable to obtain lock on store lock file: /tmp/import.db/store_lock. Please ensure no other process is using this database, and that the directory is writable (required even for read-only access)
    at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:82)
    at org.neo4j.kernel.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:44)
    at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:503)
    ... 8 more
Caused by: java.io.IOException: Unable to lock sun.nio.ch.FileChannelImpl@70b0b186
    at org.neo4j.kernel.impl.nioneo.store.FileLock.wrapFileChannelLock(FileLock.java:38)
    at org.neo4j.kernel.impl.nioneo.store.FileLock.getOsSpecificFileLock(FileLock.java:93)
    at org.neo4j.kernel.DefaultFileSystemAbstraction.tryLock(DefaultFileSystemAbstraction.java:89)
    at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:74)
    ... 10 more

现在我必须在每次运行我的应用程序neo4j stop之间neo4j start查看更改。我的手已经厌倦了。

使用 Neo4j 浏览器时可以禁用数据库锁定吗?我想这样做是为了测试目的,因为它有助于了解我的数据库模型在我填充它时是如何演变的。

4

1 回答 1

2

数据库系统——无论如何都是小型的——通常可以以两种模式中的任何一种运行:嵌入式或服务器。在嵌入式模式下,其思想是一个程序且一次只有一个程序可以读取和写入数据库。这对于许多应用程序非常有用,并且允许数据库省去允许在多个程序之间进行访问所需的代码,这会占用时间、代码和处理能力。

在服务器模式下,数据库管理系统本身作为一个单独的程序运行,并且它被构建为允许多个程序访问它。

根据上面错误消息中的类,您有一个嵌入式数据库,因此您的问题的答案是“不,您不能在这种模式下这样做”。我希望您可以切换到使用 neo4j 的服务器模式,但是连接到它会涉及一些代码更改,然后您会遇到一些小问题,例如在程序运行时确保数据库系统正在运行等。

所以你可以用这个数据库数据来做,但是你必须改变你运行数据库管理系统的模式。

于 2014-05-07T11:10:20.443 回答