我们正在使用Neo4j企业版进行因果聚类。有3个核心节点和3个副本节点。
是否有必要明确关闭Session以使数据在neo4j数据库中可见。我在每个会话中创建接近20K的事务(每个事务创建一个节点),每个事务显式调用success();
我观察到,除非会话终止,否则数据在Neo4J图形(浏览器)和Neo4j shell中都不可见。
我做错了吗?我希望由于每个事务都显式地跟着success()方法,所以我应该能够在事务中返回success()后立即查看数据。
在提交Graph中的所有交易数据之前,Neo4J(bolt Driver)是否等待会话完成?所有这些交易都是与之前或即将进行的交易无关的独立交易吗?
请开心。
答案 0 :(得分: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();
}
答案 1 :(得分:0)
Transaction.close()
执行实际的提交或回滚操作,具体取决于先前是否在同一事务中调用了success()
或failure()
(如果两者都未被调用,则失败是默认值)。 / p>
如果在您致电Session.close()
时交易仍处于活动状态,它将为您关闭交易(每个会话最多可以有一次活动)。但是您不必关闭会话来执行实际提交或回滚 - 您可以直接自己关闭当前事务。之后,如果需要,您可以使用相同的会话来创建新事务。 (此外,您可以同时拥有多个会话。)