2014-01-20 22 views
0

使用嵌入式的Neo4j(1.8.3)我有子類org.neo4j.graphdb.index.UniqueFactory.UniqueNodeFactory,並在它這個方法的Java應用程序:Neo4j的UniqueNodeFactory.getOrCreate(鍵,值)不會返回

@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萬個節點)

回答

1

升級從1.8.x1.9.x版本的neo4j固定這一點,而無需任何其他的變化。

1

你可能碰上,你還沒有公佈以前運行的資源的鎖。即仍然持有索引鎖的事務:阻止您的線程繼續。

確保所有其他交易正在進行並正確完成。

線程轉儲可能有助於查看哪個其他線程保持相同的鎖。

如果您正在運行Neo4j Enterprise,您可以通過JMX檢查當前打開的事務。有關鎖在Neo4j的

的更多信息:

+0

你的意思是像一個長期運行的查詢?我在哪裏可以瞭解有關鎖的更多細節? – Stewart

+1

用一些鏈接更新了答案。 –

+0

如果我是,使用1.8.3。這可以與它有關嗎? https://github.com/neo4j/neo4j/issues/405 - 會不會升級到1.9.x修復它? – Stewart