Session.run()
фактически создаст транзакцию, выполнит оператор и совершит транзакцию. Transaction.run()
оставит транзакцию открытой, пока вы ее не зафиксируете, но оператор все равно будет отправлен, интерпретирован и выполнен, и результаты будут возвращены. Однако любые изменения на самом деле не будут сохраняться в хранилище данных и не будут видны для запросов за пределами транзакции. Вы должны отметить транзакцию как успешную и зафиксировать ее, или она будет откат.
Вы должны стараться не использовать транзакции; открытые транзакции предотвращают изменения индексов и ограничений и увеличивают использование памяти. Единственная причина использования транзакций - потенциал отката; если вы хотите посмотреть, каковы результаты запроса, и, возможно, отменить его в зависимости от этих результатов, а затем использовать транзакцию. В противном случае используйте сеанс.
Отличный способ ответа. Благодарю. –
Еще одна вещь, о которой стоит упомянуть - по моему опыту, транзакции значительно более эффективны при работе с большими наборами данных. –
Это очень сильно зависит от характера работы, которую вы делаете. Буквально каждое взаимодействие выполняется внутри транзакции, единственное различие заключается в том, что использование 'Session.run()' автоматически откроет и закроет его во время выполнения, поэтому вам придется взять накладные расходы на совершение транзакции для каждого оператора. Это повлияет только на производительность, если вы распространяете свои запросы по нескольким операторам, и почти всегда есть способ их комбинировать, и именно там вы увидите наибольшую прибыль в производительности. –