创建两个相同Neo4j数据库的实例
问题描述:
我有两个线程,第一个使用搜集器收集数据并创建Neo4j图形数据库,第二个每十分钟执行一些查询,比如到目前为止添加了多少个节点为了分析图表。我的问题是,当第一个线程运行时,我无法运行第二个线程,因为我无法创建数据库的新实例。它返回以下错误:创建两个相同Neo4j数据库的实例
Exception in thread "Thread-6" java.lang.RuntimeException: org.neo4j.kernel.lifecycle.LifecycleException: Component '[email protected]' was successfully initialized, but failed to start. Please see attached cause exception.
at com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:165)
at com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:135)
at main.AnalyzeGraph.run(AnalyzeGraph.java:28)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException: org.neo4j.kernel.lifecycle.LifecycleException: Component '[email protected]' was successfully initialized, but failed to start. Please see attached cause exception.
at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:281)
at org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:106)
at org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:81)
at org.neo4j.kernel.EmbeddedGraphDatabase.<init>(EmbeddedGraphDatabase.java:63)
at com.tinkerpop.blueprints.impls.neo4j.Neo4jGraph.<init>(Neo4jGraph.java:155)
... 3 more
Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component '[email protected]' was successfully initialized, but failed to start. Please see attached cause exception.
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:497)
at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:104)
at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:259)
... 7 more
Caused by: org.neo4j.kernel.StoreLockException: Unable to obtain lock on store lock file: /home/sotbeis/Desktop/neo4jDB/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:79)
at org.neo4j.kernel.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:40)
at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:491)
... 9 more
Caused by: java.nio.channels.OverlappingFileLockException
at sun.nio.ch.SharedFileLockTable.checkList(FileLockTable.java:255)
at sun.nio.ch.SharedFileLockTable.add(FileLockTable.java:152)
at sun.nio.ch.FileChannelImpl.tryLock(FileChannelImpl.java:1056)
at java.nio.channels.FileChannel.tryLock(FileChannel.java:1154)
at org.neo4j.kernel.impl.nioneo.store.FileLock.getOsSpecificFileLock(FileLock.java:83)
at org.neo4j.kernel.DefaultFileSystemAbstraction.tryLock(DefaultFileSystemAbstraction.java:83)
at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:70)
... 11 more
有没有办法解决这个问题?请注意,我无法将第一个neo4j图形数据库实例传递给第二个线程。
我使用blueprints-neo4j-graph 2.4.0。
编辑:我使用的嵌入式版本
答
假设你正在使用的嵌入式版本,我不认为这是可能具有相同的图形数据库的多个实例。
入住这里,但我真的不认为这可以帮助你,如果你不能在图形数据库实例传递到线程:,https://groups.google.com/forum/#!topic/nosql-databases/z9nZ80ow5QY
...但是如果可以的话,那么溶液变成相当直接,例如单等
而且从文档此位暗示的事实,你只能多线程之间共享一个实例:http://docs.neo4j.org/chunked/stable/tutorials-java-embedded-hello-world.html
所以,根据我的经验,我继续读什么,你不能有多个Neo4j在您的应用程序中运行的实例;无论如何,这在很大程度上是有道理的,因为锁定问题,而不是。
答
如果你不能在你的线程之间共享图形实例,这可能意味着你有一个Neo4J服务器更适应的用例。
如果我使用服务版本,是否可以按照描述进行操作? – salvador
在这种情况下,您通过REST端点进行连接(除非您通过插件/扩展完成所有事情,这不太可能),所以不会出现相同的问题。换句话说,您不太可能使用相同的代码来连接服务器实例(例如,通过Jersey客户端或其他绑定(如Neo4j JDBC,Neo4j REST绑定或类似于Spring Data for Neo4j)。 – BtySgtMajor