|
|
|
Зачем использовать откат транзакций?
|
|||
|---|---|---|---|
|
#18+
Читаю книжку. встретил в ней объяснения причин использования отката транзакций и что-то не могу понять о чем идёт речь. вот цитата из книги: авторwhy are you using the rollback() at all? The answer is given in the following three points: The above example illustrates a two-operation transaction that is quite simple. In this case, explicit rollback() will not change anything. However, in case of a multi-stage transaction where you can define various milestones (in the form of savepoints, which we will discuss shortly), rollback plays a vital role. Unfinished or incomplete subtransaction states may cause inconsistencies. • If your connection object is a pooled connection object, then it makes sense to call rollback(). In case of a pooled connection object, the connection object will be reused later, and at that time unfinished operations may cause inconsistencies. • In general, using the rollback() method in failed cases is always recommended. полностью ясен только последний пункт. Обычно, если во время транзакции что-то пошло не так - лучше всего откатиться. в первом пункте непонятно как перевести multi-stage transaction. Если тут речь про то, что иногда можно откатываться не к самому началу, а к какому-то состоянию, то понятно... во втором пункте непонятно что значит connection object is a pooled connection object. суммарный объект коннекшена какой-то. Помогите) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 01:23 |
|
||
|
Зачем использовать откат транзакций?
|
|||
|---|---|---|---|
|
#18+
questionerЧитаю книжку. встретил в ней объяснения причин использования отката транзакций и что-то не могу понять о чем идёт речь. вот цитата из книги: в первом пункте непонятно как перевести multi-stage transaction. Если тут речь про то, что иногда можно откатываться не к самому началу, а к какому-то состоянию, то понятно... Да, именно так. questionerавтор• If your connection object is a pooled connection object, then it makes sense to call rollback(). In case of a pooled connection object, the connection object will be reused later, and at that time unfinished operations may cause inconsistencies. во втором пункте непонятно что значит connection object is a pooled connection object. суммарный объект коннекшена какой-то. Помогите) Суть в том, что просто connection.close() само вызывает откат. Но если коннекшн из пула, то .close() реально только ставит ему статус "свободно", и, если не поставить ни .rollback(), ни .commit(), в другом месте его могут отдать (вместе с зависшими операциями) другому потоку. И он неожиданно закоммитит всё. В общем- суть, как я понял, в том, что нельзя расчитывать на то, что .close() вызовет .rollback() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 09:39 |
|
||
|
Зачем использовать откат транзакций?
|
|||
|---|---|---|---|
|
#18+
Alexey Tomin, а как понять "If your connection object is a pooled connection object," pooled connection у меня или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 11:55 |
|
||
|
Зачем использовать откат транзакций?
|
|||
|---|---|---|---|
|
#18+
Какая разница - есть пул подключений или нет? Любой DML-оператор начинает транзакцию, если она не была уже начата явно. Транзакция должна быть или зафиксирована (commit) или откачена (rollback). Если транзакция откатывается частично (rollback to точка), то остаток, опять-таки, должен быть или зафиксирован или откачен. Поэтому выполняйте или фиксацию или откат перед тем, как закрыть соединение: "уходя - гасите свет". P.S. Фиксация или откат - выбирает разработчик, но что-то одно он обязан выполнить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 12:24 |
|
||
|
Зачем использовать откат транзакций?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov, то, что вы написали, насколько я понял, относится к пунктам 1 и 3. Мой вопрос - что хотел сказать автор пунктом 2? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 14:11 |
|
||
|
Зачем использовать откат транзакций?
|
|||
|---|---|---|---|
|
#18+
Я написал всё , что относится к транзакциям. Которые гарантируют согласованность в абревиатуре ACID. Технически, реализация пула подключений может выполнять откат, когда приложение "закрывает" подключение для которого не была сделана фиксация, но, насколько я знаю, никаких гарантий такого поведения не существует. Поэтому надо просто взять заправило собственноручно делать или фиксацию или откат, не полагаясь на поведение той или иной реализации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2014, 16:27 |
|
||
|
|

start [/forum/topic.php?fid=59&tid=2126669]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
174ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 452ms |

| 0 / 0 |
