Neo4j CreateRelationShipTo挂起,以前保存的节点也丢失

Neo4j CreateRelationShipTo挂起,以前保存的节点也丢失,neo4j,Neo4j,我面临着一个独特的问题。我们正在使用bojo方法来设置节点的属性。设置属性后,我们将创建与已创建节点的关系。这是第一次创建节点和关系,当我保存另一个节点时,它挂在CreateRelationShipTo行上,而之前保存的节点在Neo4j中也丢失了?有谁能告诉我们为什么会这样?对不起,没有提供正确的信息。Java代码如下所示: Transaction trx = DataSource.getGraphDBAPI().beginTx(); try{ Node apiDetailsNode

我面临着一个独特的问题。我们正在使用bojo方法来设置节点的属性。设置属性后,我们将创建与已创建节点的关系。这是第一次创建节点和关系,当我保存另一个节点时,它挂在CreateRelationShipTo行上,而之前保存的节点在Neo4j中也丢失了?有谁能告诉我们为什么会这样?对不起,没有提供正确的信息。Java代码如下所示:

Transaction trx = DataSource.getGraphDBAPI().beginTx();  
try{
    Node apiDetailsNode = DataSource.getGraphDB().createNode();  
    apiDetailsNode.setId("1");  
    apiDetailsNode.setName("Test API");  
    apiDetailsNode.setURL("www.test.com");  
    parentNode.createRelationshipTo(apiDetailsNode,        
    KnoxxiRelationshipType.API);  
    apiDetailsNode.setStatus("1");
    trx.success();
}catch (Exception e) {
    trx.failure();
    log.error("Strange API Failed To Create");
} finally {trx.finish();} 
neo4j配置如下所示:

node_auto_indexing=true
cache_type=gcr
nodestore_propertystore_mapped_memory_size=150M
nodestore_mapped_memory_size=100M
relationshipstore_mapped_memory_size=500M
strings_mapped_memory_size=150M
nodestore_mapped_memory_size=150M
relationship_auto_indexing=true
2015-03-20 09:25:08.030+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 385ms [total block time: 5.365s]
2015-03-20 09:25:25.766+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 395ms [total block time: 5.76s]
2015-03-20 09:25:44.909+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 415ms [total block time: 6.175s]
2015-03-20 09:28:46.736+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 377ms [total block time: 6.552s]
2015-03-20 09:28:50.147+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 395ms [total block time: 6.947s]
2015-03-20 09:31:17.876+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 525ms [total block time: 7.472s]
2015-03-20 09:32:50.150+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 424ms [total block time: 7.896s]
2015-03-20 09:35:03.267+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 498ms [total block time: 8.394s]
2015-03-20 09:35:14.967+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 417ms [total block time: 8.811s]
2015-03-20 09:35:20.184+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 402ms [total block time: 9.213s]
2015-03-20 09:37:03.175+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 415ms [total block time: 9.628s]
现在我们的数据存储中有200万个节点和800万个关系

我们使用的是1.9.8 Neo4j版本

message.log文件的最后20行如下所示:

node_auto_indexing=true
cache_type=gcr
nodestore_propertystore_mapped_memory_size=150M
nodestore_mapped_memory_size=100M
relationshipstore_mapped_memory_size=500M
strings_mapped_memory_size=150M
nodestore_mapped_memory_size=150M
relationship_auto_indexing=true
2015-03-20 09:25:08.030+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 385ms [total block time: 5.365s]
2015-03-20 09:25:25.766+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 395ms [total block time: 5.76s]
2015-03-20 09:25:44.909+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 415ms [total block time: 6.175s]
2015-03-20 09:28:46.736+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 377ms [total block time: 6.552s]
2015-03-20 09:28:50.147+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 395ms [total block time: 6.947s]
2015-03-20 09:31:17.876+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 525ms [total block time: 7.472s]
2015-03-20 09:32:50.150+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 424ms [total block time: 7.896s]
2015-03-20 09:35:03.267+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 498ms [total block time: 8.394s]
2015-03-20 09:35:14.967+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 417ms [total block time: 8.811s]
2015-03-20 09:35:20.184+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 402ms [total block time: 9.213s]
2015-03-20 09:37:03.175+0000 INFO  [o.n.k.EmbeddedGraphDatabase]: GC Monitor: Application threads blocked for an additional 415ms [total block time: 9.628s]

我已经找到了问题的根本原因并修复了它。挂起的原因是由于打开了事务连接(可以通过JMX控制台找到)

由于执行密码查询后未关闭执行结果,因此发生了打开的连接。示例代码如下所示

public static Node executeCypherQuerySingleResult(String strCypherQuery, String strResultColumnName) {
    ExecutionResult result = null;
    Iterator<Node> n_column = null;
    ExecutionEngine engine = null;

    try {

        engine = NeoDbConnection.getExecutionEngine(); // This will return the Execution Engine Instance from Neo DB Connection Singleton Class 
        result = engine.execute(strCypherQuery);
        n_column = result.columnAs(strResultColumnName);
        while (n_column.hasNext()) {
            Node node = n_column.next();
            return node;
        }
    } catch (Exception e) {
        log.warn("Exception on Executing Cypher Query : " + strCypherQuery + ".. Error is : " + e.getLocalizedMessage());
    } finally {
        // 
        if (null != result) {
            result.close(); // After I add this the issue was solved
        }
        result = null;
        n_column = null;
        engine = null;
    }
    return null;
}
公共静态节点executeCypherQuerySingleResult(字符串strCypherQuery,字符串strResultColumnName){
ExecutionResult=null;
迭代器n_column=null;
ExecutionEngine=null;
试一试{
engine=NeoDbConnection.getExecutionEngine();//这将从Neo DB Connection Singleton类返回执行引擎实例
结果=engine.execute(strCypherQuery);
n_column=result.columns(strResultColumnName);
while(n_column.hasNext()){
Node Node=n_column.next();
返回节点;
}
}捕获(例外e){
warn(“执行Cypher查询时出现异常:“+strCypherQuery+”。错误为:“+e.getLocalizedMessage());
}最后{
// 
if(null!=结果){
result.close();//添加此项后,问题得到解决
}
结果=空;
n_列=空;
引擎=空;
}
返回null;
}

感谢所有指导解决此问题的人。

此问题完全没有上下文,您不能说是哪个API、哪个版本,也不能列出任何代码。@MichaelHunger我已添加了所需的详细信息。@MichaelHunger:我已尝试了以下步骤。1.将mm大小增加近一倍。2.增加Glassfish服务器的Java堆大小。即使在这两个步骤之后,问题仍然存在。@MichaelHunger:我也发现了一些东西。当我执行上面的Java代码时,它创建并设置属性并返回节点Id。我已经打印了节点Id并通过web浏览器访问了Neo4j数据库。但是指定的查询从不返回任何结果。起始根=节点(3021432)返回根;