有什么理由在Neo4j只读事务上调用`tx.success()`吗?

sub*_*ris 2 neo4j neo4j-java-api

我正在使用Java API来提高曾经是一个昂贵的Cypher查询的性能.我刚才正在重构并注意到我正在打电话tx.success(),即使我没有改变任何数据.当没有任何改变或无关紧要时,是否有任何性能下降标记交易成功,因为它知道没有什么可以实际提交?

Chr*_*sen 5

我确实也潜入了Java Api,并在需要的情况下立即运行.

如果您使用嵌套事务并且外部代码调用您的读取操作没有执行tx.success,那么当外部事务将尝试提交(tx.success())时,您的内部事务(您的读取)将tx标记为没有成功完成)数据库将引发异常.

  • 我刚才在查看源代码时注意到的一点是,当您调用 `tx.success()` 时,它会触发一个事件,该事件将通知订阅已关闭事务的任何内容。如果您有任何在 tx 完成时执行操作的插件,它们将被触发,因此这可能是做或不做的原因,具体取决于您的数据库和插入的内容。 (2认同)