2015-11-16 30 views
0

這可能是用於訪問某些Neo4j數據的典型Java 7樣板。是否有可能強制neo4j事務超時?

是否有任何機制可以讓您設置事務自動失敗並基於超時進行回滾?

try (Transaction tx = graphdb.beginTx()) { 
    Node node = // Get some Nodes ... 
    Iterable<Relationship> rels = node.getRelationships(...); 
    for (Relationship rel : rels) { 
     // Oh no! This is a super-node with a billion Relationships! 
    } 
    tx.success(); 
    return data; 
} 

我猜只是int count = 0,並增加每個迭代,然後:

if(count > XYZ) throw TakingTooLongException(count) 

回答

1

您也可以在循環之前預先檢查node.getDegree(),這是密集節點的恆定時間操作,以及所有其他操作的小計數器(< 50 rels)。

否則還有一個執行警衛,但我不知道它能存活多久。

您可以直接從tx返回而不需要致電tx.success()並且應該回退。

+0

我要試試這個。代碼最近從'1.9.8'升級,所以新功能是新的... – Stewart

相關問題