Java Neo4j UniqueNodeFactory.getOrCreate(键,值)永远不会返回

Java Neo4j UniqueNodeFactory.getOrCreate(键,值)永远不会返回,java,neo4j,Java,Neo4j,在使用嵌入式Neo4j(1.8.3)的java应用程序中,我将org.Neo4j.graphdb.index.UniqueFactory.UniqueNodeFactory子类化,其中包含以下方法: @Override public Node getOrCreateIndexedNode(final String key, final Object value) { LOG.debug("Get or creating {} Node using [{}=

在使用嵌入式Neo4j(1.8.3)的java应用程序中,我将
org.Neo4j.graphdb.index.UniqueFactory.UniqueNodeFactory
子类化,其中包含以下方法:

    @Override
    public Node getOrCreateIndexedNode(final String key, final Object value) {
            LOG.debug("Get or creating {} Node using [{}={}]", new Object[] { this.type, key, value });
            final Node node = super.getOrCreate(key, value);
            LOG.debug("Got or created {} {} using [{}={}]", new Object[] { this.type, node, key, value });
            return node;
    }
有时,对
getOrCreate(key,value)
的调用永远不会返回。在申请被退回之前,它已经丢失了5个小时

可能的原因是什么? 可能的解决办法是什么


(Neo4j实例大约有2500万个节点)

您可能会遇到一个锁,在该锁中您没有释放上一次运行的资源。也就是说,一个仍然持有索引锁的事务:阻止线程继续

确保所有其他事务正在进行并正确完成

线程转储可能有助于查看哪个线程保持相同的锁

如果您运行的是Neo4j Enterprise,则可以通过JMX检查当前打开的事务

有关Neo4j中锁的更多信息:

  • 为读取操作获取读取锁
  • 写锁用于更新,如设置、删除属性或标签或添加或删除关系
  • 对于属性,锁位于节点或关系上
  • 为了添加/删除关系,还将在两个节点上放置写锁

1.8.x
升级到
1.9.x
版本的
neo4j
修复了这个问题,没有任何其他更改。

你的意思是像长时间运行的查询一样?我在哪里可以了解有关锁的更多详细信息?使用一些链接更新了答案。如果我是,请使用1.8.3。这跟这事有关系吗升级到1.9.x能解决这个问题吗?阅读你提到的最后那些文档,
UniqueFactory.UniqueNodeFactory
不推荐使用吗?