Транзакционная теория - PullRequest
1 голос
/ 03 апреля 2009

(у меня есть простой CRUD API в реализации шаблона DAO.) Все операции (сохранение, загрузка, обновление, удаление) имеют идентификатор транзакции, который необходимо указать. Так, например. можно сделать:

...

id = begintransaction();
dao.save(o, id);
sao.update(o2, id);
rollback(id);

Все примеры, исключая вызовы нагрузки, кажутся интуитивно понятными. Но как только вы начинаете загружать объекты из базы данных, все становится «по-другому». Операции загрузки по определению привязаны к транзакции? Или мои операции загрузки должны учитываться как один объем работы?

Ответы [ 2 ]

4 голосов
/ 03 апреля 2009

Зависит от уровня изоляции транзакции (http://en.wikipedia.org/wiki/Isolation_(database_systems)), который вы используете, но в целом они должны быть частью транзакции. Что делать, если кто-то еще находится в процессе обновления данных, которые вы пытаетесь сделать? читать? Если операция чтения не является транзакционной, вы получите старые данные и, возможно, вас интересуют последние данные.

2 голосов
/ 03 апреля 2009

Если для базы данных установлен достойный уровень изоляции, незафиксированные записи могут быть прочитаны только из транзакции, которая их создала. Например, в Oracle, если процедура вставляет или обновляет строку, а затем (без фиксации) вызывает другую процедуру, которая использует «pragma autilitary_transaction» для запуска в отдельной транзакции, эта другая процедура не видит новую строку. (Кстати, отличный способ выстрелить себе в ногу).

По этой причине вы всегда должны рассматривать свои операции загрузки как связанные с транзакцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...