Отключить блокировку базы данных графа Neo4j?

Мое приложение заполняет базу данных графиков Neo4j по адресу /tmp/import.db. В дополнение к моим модульным тестам мне нравится использовать браузер Neo4j (AKA Neo4j Community), чтобы покопаться в той же базе данных. Когда браузер запущен, мое приложение вылетает при запуске, потому что база данных заблокирована:

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? Я хотел бы сделать это в целях тестирования, так как это очень помогает увидеть, как развивается моя модель базы данных, пока я ее заполняю.


person Community    schedule 07.05.2014    source источник


Ответы (1)


Системы баз данных - в любом случае небольшие - часто могут работать в одном из двух режимов: встроенном или серверном. Идея встроенного режима заключается в том, что одна программа и только одна программа могут одновременно читать и записывать в базу данных. Это очень полезно для многих приложений и позволяет базе данных обходиться без кода, необходимого для обеспечения доступа между несколькими программами, что отнимает время, код и вычислительную мощность.

В серверном режиме сама система управления базами данных работает как отдельная программа, и она построена так, чтобы иметь доступ к нескольким программам.

Исходя из класса в сообщении об ошибке выше, у вас есть встроенная база данных, поэтому ответ на ваш вопрос - «нет, вы не можете сделать это в этом режиме». Я ожидаю, что вы можете переключиться на использование режима сервера neo4j, но подключение к нему потребует некоторых изменений кода, и тогда у вас возникнут незначительные проблемы с тем, чтобы убедиться, что ваша система базы данных работает, когда ваша программа работает, и т. Д.

Таким образом, вы можете сделать это с этими данными базы данных, но вам нужно изменить режим, в котором вы запускаете систему управления базой данных.

person arcy    schedule 07.05.2014
comment
На самом деле это не так. Встроенная база данных Neo4j поддерживает одновременный доступ. Ограничение здесь заключается в том, что neo4j позволяет запускать только один экземпляр базы данных в одном каталоге. Когда вы запускаете экземпляр, он создает файл store.lock и пытается создать другой экземпляр в том же каталоге, находит этот файл и выдает исключение org.neo4j.kernel.StoreLockException: невозможно получить блокировку файла блокировки хранилища: / tmp /import.db/store_lock. Убедитесь, что никакие другие процессы не используют эту базу данных, и что каталог доступен для записи (требуется даже для доступа только для чтения) - person phil_20686; 20.04.2015