Я использую Java API для повышения производительности того, что было когда-то дорогостоящим запросом Cypher. Я сейчас рефакторинг и заметил, что я звоню tx.success()
, хотя я не изменяю никаких данных. Есть ли недостаток производительности для успешной маркировки транзакции, когда ничего не изменилось или это не имеет значения, поскольку он знает, что на самом деле ничего не делать?Любые причины для вызова `tx.success()` в транзакции только для чтения Neo4j?
2
A
ответ
5
Я тоже погрузился в Java Api и сразу же отправился в случай, когда это было необходимо.
Если вы используете вложенные транзакции и имеют внешний код, который вызывает ваш чтения операцию, которая не делает tx.success, то когда внешняя транзакция попытается совершить (tx.success()), вашу внутреннюю транзакцию (ваше чтение) отметит, что tx не завершил успешно), и база данных вызовет исключение.
Ах! Это хороший момент. Хотелось бы, чтобы я мог отметить несколько ответов как правильно, потому что я чувствую, что мы собираемся получить больше ответов на это. – subvertallchris
Что-то, что я заметил только сейчас, когда смотрю на источник, является то, что когда вы вызываете 'tx.success()', он запускает событие, которое будет уведомлять что-либо о подписке на закрытые транзакции. Если у вас есть плагины, которые выполняют действия по завершению tx, они будут запущены, так что это может быть причиной делать или не делать это, в зависимости от вашей базы данных и того, что подключено к ней. – subvertallchris
Хороший улов на этом –