当前位置: 首页 > 知识库问答 >
问题:

Neo4j上的存储锁定问题

卫深
2023-03-14

正在获取以下异常

Java语言lang.RuntimeException:启动组织时出错。neo4j。内核位于组织的EmbeddedGraphDatabase。neo4j。内核InternalAbstractGraphDatabase。在org上运行(InternalAbstractGraphDatabase.java:335)。neo4j。内核EmbeddedGraphDatabase。(EmbeddedGraphDatabase.java:59)。neo4j。图B。工厂GraphDatabaseFactory。org上的newDatabase(GraphDatabaseFactory.java:108)。neo4j。图B。工厂GraphDatabaseFactory 1美元。org上的newDatabase(GraphDatabaseFactory.java:95)。neo4j。图B。工厂GraphDatabaseBuilder。org上的newGraphDatabase(GraphDatabaseBuilder.java:176)。neo4j。图B。工厂GraphDatabaseFactory。com上的newEmbeddedDatabase(GraphDatabaseFactory.java:67)。tpgsi。mongodb。数据轮询与oplog。ORBCreateLink。main(ORBCreateLink.java:62)由:org引起。neo4j。内核生命周期。生命周期异常:组件组织。neo4j。内核StoreLockerLifecycleAdapter@5b6ca687'已成功初始化,但无法启动。请参阅随附的原因例外。在org。neo4j。内核生命周期。LifeSupport$LifecycleInstance。在org启动(LifeSupport.java:513)。neo4j。内核生命周期。生命支持。在org启动(LifeSupport.java:115)。neo4j。内核InternalAbstractGraphDatabase。运行(InternalAbstractGraphDatabase.java:331)。。。6更多原因:组织。neo4j。内核StoreLockException:无法获取l文件:/home/aps/neo4j-community-2.2.3/CompleteTest/store\u lock。请确保没有其他进程正在使用此数据库,并且该目录在org上是可写的(即使是只读访问也需要)。neo4j。内核StoreLocker。org上的checkLock(StoreLocker.java:78)。neo4j。内核StoreLockerLifecycleApter。从org开始(StoreLockerLifecycleAdapter.java:44)。neo4j。内核生命周期。LifeSupport$LifecycleInstance。开始(LifeSupport.java:507)。。。另外8个原因是:java。nio。频道。sun上的OverlappingFileLockException。nio。ch.SharedFileLockTable。sun上的清单(FileLockTable.java:255)。nio。ch.SharedFileLockTable。在sun上添加(FileLockTable.java:152)。nio。ch.FileChannelImpl。tryLock(FileChannelImpl.java:1087)在java。nio。频道。文件通道。tryLock(FileChannel.java:1154)位于org。neo4j。io。fs。StoreFileChannel。tryLock(StoreFileChannel.java:135)位于org。neo4j。io。fs。文件锁。org上的wrapFileChannelLock(FileLock.java:38)。neo4j。io。fs。文件锁。getOsSpecificFileLock(FileLock.java:99)位于org。neo4j。io。fs。默认文件系统抽象。tryLock(DefaultFileSystemAbstraction.java:85)位于org。neo4j。内核StoreLocker。checkLock(StoreLocker.java:74)

我有一个过程将创建图形,完成后,我还有一个过程在if之上创建更多的关系。但我在第一个进程完成后运行第二个进程时遇到了上述异常。我检查了Neo4j的数据目录没有被任何进程使用,但仍然存在锁问题。

我曾经运行过一段代码来创建图形。

   static GraphDatabaseFactory dbFactory = null; 
   static GraphDatabaseService graphdb  = null;  

  static{
dbFactory =new GraphDatabaseFactory();
  graphdb  = dbFactory.newEmbeddedDatabase(com.tpgsi.mongodb.dataPollingWithOplog.CommonConstants.NEO4J_DATA_DIRECTORY);
  }

  try{
Transaction tx = graphdb.beginTx();
  try
 {
    // creating Node and relationships

    tx.success();
  } catch (Exception e) {
            tx.failure();
            e.printStackTrace();
   } finally {
       tx.close();
    }
      }
     catch(Exception e)
     {
        e.printStackTrace();
     }

我已经创建了graph db对象作为全局变量,并在任何地方使用它。只有事务,我正在关闭。我没有为graph db对象使用registerShutDownHook()和关闭函数。我没有使用这些函数的原因是,我在Storm环境中使用多个执行器运行它,如果我们将关闭它,那么对于每个线程,我必须再次创建它,这也不好。我认为没有关闭graph db可能是原因。如果我用一个执行器运行相同的代码,它可以正常工作,但多个执行器会出现锁定问题。有人能告诉我我必须做些什么才能利用它吗?

共有3个答案

李明贤
2023-03-14

我在storm环境中与多个工作者和执行者一起执行代码。当多个工人正在创建多个graphdb安装时,我遇到了存储锁异常。我将worker的数量更改为1,为了创建graphdb对象,我编写了singleton类,以确保一次只创建一个graphdb对象,并且它是一个gloabal变量。

满元凯
2023-03-14

我也面临同样的问题。但我的错误是,我在服务器运行时执行了程序。如果我停止服务器,则程序成功执行。

束作人
2023-03-14

图形数据库实例是线程安全的,因此您可以跨所有螺栓使用它,只需将其作为全局变量进行访问即可。

一次只有一个GDB可以访问存储目录。

否则,创建一个服务,您的Storm螺栓通过另一个协议访问/使用,例如超文本传输协议或二进制文件。

 类似资料:
  • 问题内容: 我有一张桌子,我需要在99%的时间内自动分配ID(其他1%似乎使用身份列来排除)。因此,我有一个存储过程来获取以下行中的下一个ID: `` 检查必须检查用户是否手动使用了ID并找到下一个未使用的ID。 当我依次调用它并返回1、2、3时,它可以正常工作。我需要做的是在多个进程同时调用此方法的情况下提供一些锁定。理想情况下,我只需要它专用于围绕此代码锁定last_auto_id表,以便第二

  • 我对Spring JPA存储库的锁定方式有一些困惑,需要对其进行一些澄清。 所以,我有一个Spring Boot服务,其中我使用hibernate与数据库交互。在其中一个服务中,我有这样一个实体:- 现在,我在上面有一个标记为@repository的存储库,并扩展了JPARepository,如下所示: 所以,令人困惑的是,我的一位同事告诉我不要对这个表使用@Repository和@Entity,

  • > 我在SpringJira上发现了关于使用@Version属性进行乐观锁定的问题。 在实现这一点之前,我如何使用典型的存储库模式来处理这个问题?

  • 下面是我的场景: > 单个应用程序生成一个有向图-它相对平衡,大约有10个级别、20k个节点和30k个关系, 这个图必须立即存储在neo4j中,这样这个应用程序就可以进行一些密码查询并继续前进--尽可能快地执行这个步骤很重要, 同时,这个图必须以某种方式存储(密码查询?CSV?一些自定义的东西?)因此,另一个应用程序将在某个时候获取数千个这些图,将它们全部添加到neo4j中,并对它们执行密码查询-

  • 在Neo4j-3.0.3中,是否有用于创建存储过程的Scala代码示例? 我一直在尝试创建一个简单的基于Scala的存储过程。下面是当我将scala-jar文件复制到neo4j-plugins目录并启动neo4j服务器时收到的错误消息:

  • 这类似于在无法使用两个带有Spring Boot/Spring数据Neo4j的Neo4j实例中讨论的内容,但我没有两个数据库。我从git repo下载了spring data neo4j示例java应用程序,希望执行动态查询,而不是通过存储库接口执行静态查询。 我面临一个空事务管理器的问题。 这是我的界面: 以下是我的自定义回购建议: 以下是我的配置: 因为我只有一个TransactionMana