Neo4j UniqueNodeFactory.getOrCreate(key,value)永远不会返回

时间:2014-01-20 11:04:41

标签: 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 [{}={}]", 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万个节点)

2 个答案:

答案 0 :(得分:1)

您可能遇到了一个没有释放上一次运行资源的锁。即仍然持有索引锁定的事务:阻止您的线程继续。

确保所有其他交易正在进行并正确完成。

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

如果您正在运行Neo4j Enterprise,您可以通过JMX检查当前打开的交易。

有关Neo4j锁定的更多信息:

答案 1 :(得分:1)

1.8.x升级到1.9.xneo4j修正了此问题,而没有任何其他更改。