Обратите внимание, что даже несмотря на то, что это — идеальные
характеристики транзакции, они не всегда полностью достижимы. Одна проблема
заключается в обеспечении изоляции. Реляционная СУБД должна блокировать данные,
чтобы другие пользователи не имели к ним доступа, пока транзакция выполняется. Чем больше используется блокировок, и чем они крупнее, тем выше шансы того,
что пользователь не сможет выполнить другую работу, пока транзакция находится
в процессе выполнения. Другими словами, иногда приходится идти на компромисс
между степенью параллелизма работы пользователей и изоляцией.
Транзакции и приложения ASP.NET
Вы можете использовать три базовых типа транзакций в приложениях ASP.NET.
Вот их список (от наименее до наиболее затратных):
- Транзакции хранимых процедур. Эти транзакции происходят целиком в базе
данных. Транзакции хранимых процедур обеспечивают наилучшую
производительность, поскольку требуют всего одного обращения к базе данных.
Недостаток их состоит в том, что вам приходится писать всю логику
транзакции, используя операторы SQL (что может оказаться не так легко, как
написание простого кода С#).
- Инициированные клиентом (ADO.NET) транзакции. Эти транзакции
контролируются программно кодом вашей Web-страницы ASP.NET. "За кулисами" они используют те же команды, что и транзакции хранимых процедур, но
ваш код использует некоторые объекты ADO.NET, которые скрывают детали.
Недостатком является необходимость в нескольких обращениях к базе
данных, чтобы запустить и подтвердить транзакцию,
- Транзакции СОМ+. Эти транзакции обрабатываются исполняющей
системой CОМ+ на базе декларативных атрибутов, добавленных вами в код.
Транзакции СОМ+ используют протокол двухфазной фиксации и всегда
подразумевают дополнительные накладные расходы. Они требуют, чтобы вы
создали отдельный класс служебного компонента. Вообще объекты СОМ+ —
хороший выбор только в том случае, если ваша транзакция охватывает
несколько транзакционных диспетчеров ресурсов, поскольку COM+ включает
встроенную поддержку распределенных транзакций. Например, отдельная
транзакция СОМ+ может охватывать взаимодействие с базой SQL Server и
базой Oracle. В этой главе мы не раскрываем тему транзакций СОМ+, хотя
вкратце вы с ними познакомитесь, когда мы будем говорить о Web-службах в
главе 32.
На заметку! AD0.NET 2.0 представляет новую концепцию распространяемых транзакций. Однако
распространяемая транзакция — это не какой-то новый тип транзакции, а просто способ
создания инициируемой клиентом транзакции, которая при необходимости может автоматически
расширяться до транзакции СОМ+. Вы не должны использовать распространяемые транзакции,
если только действительно в них не нуждаетесь, потому что трудно предсказать их влияние
на производительность и масштабируемость окончательных решений. Подробнее о распространяемых транзакциях можно прочитать в книге Microsoft ADO.NET 2.0 для профессионалов
(Издательский дом "Вильямс", 2006).
предыдущая следующая страница оглавление
325