2016-09-16 3 views
1

В чем разница между Session.run() и transaction.run() в драйвере Neo4j Bolt?Session.run() VS transaction.run() в Neo4j Bolt

Мои знания:

Session.run() will execute a single statement  
transaction.run() executes multiple statements. 

Это информация, которую я знаю, которые являются правильными. Каковы все другие различия?

ответ

7

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

Вы должны стараться не использовать транзакции; открытые транзакции предотвращают изменения индексов и ограничений и увеличивают использование памяти. Единственная причина использования транзакций - потенциал отката; если вы хотите посмотреть, каковы результаты запроса, и, возможно, отменить его в зависимости от этих результатов, а затем использовать транзакцию. В противном случае используйте сеанс.

+0

Отличный способ ответа. Благодарю. –

+0

Еще одна вещь, о которой стоит упомянуть - по моему опыту, транзакции значительно более эффективны при работе с большими наборами данных. –

+0

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