1

我们使用 Neo4j 企业版进行因果聚类。有3个核心节点和3个副本节点。

是否有必要显式关闭 Session 以使数据在 neo4j 数据库中可见。我在每个会话中创建近 20K 事务(每个事务都创建一个节点),每个事务都显式调用 success();

我观察到除非会话终止,否则数据在 Neo4J 图形(浏览器)和 Neo4j shell 中不可见。

难道我做错了什么?我希望,由于每个事务都明确地跟随 success() 方法,所以一旦从事务返回 success(),我应该能够看到数据。

Neo4J (bolt Driver) 是否在提交 Graph 中的所有事务数据之前等待会话完成?所有这些交易都是独立交易,与先前或即将发生的交易无关?

请赐教。

4

2 回答 2

0

看起来好像事务没有在块中自动关闭try catch

您可以在不关闭会话的情况下手动关闭事务:[ https://neo4j.com/docs/java-reference/current/javadocs/org/neo4j/graphdb/Transaction.html#close-- ]:

 Transaction tx = graphDb.beginTx();
 try
 {
     // operations on the graph
     // ...

     tx.success();
 }
 finally
 {
     tx.close();
 }
于 2017-01-27T14:20:28.617 回答
0

Transaction.close()执行实际的提交或回滚操作,具体取决于之前是否success()failure()同一事务上调用过(如果两者都没有调用,则默认为失败)。

如果您调用时事务仍然处于活动状态Session.close(),它将为您关闭事务(每个会话一次最多可以有一个活动)。但是您不必关闭会话来执行实际的提交或回滚——您可以自己直接关闭当前事务。之后,如果需要,您可以使用相同的会话来创建新事务。(此外,您可以同时拥有多个会话。)

于 2017-01-27T20:04:08.443 回答