Вкладена транзакція

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

Вкладена транзакція — це транзакція бази даних, яка запускається інструкцією в межах уже розпочатої транзакції.

Вкладені транзакції реалізуються по-різному в різних базах даних. Однак вони всі мають спільне те, що зміни не стають видимими для жодних непов’язаних транзакцій, доки не буде фіксовано крайню транзакцію. Це означає, що фіксація у внутрішній транзакції не обов’язково зберігає оновлення системи.

У деяких базах даних зміни, внесені вкладеною транзакцією, не відображаються транзакцією «хост», поки вкладена транзакція не буде зафіксована. Дехто вважає, що це випливає з властивості ізоляції транзакцій.

Здатність правильно обробляти вкладені транзакції є необхідною умовою для справжніх архітектур програм на основі компонентів. В інкапсульованій архітектурі на основі компонентів вкладені транзакції можуть відбуватися без відома програміста. Функція компонента може містити або не містити транзакцію бази даних (це інкапсульований секрет компонента. Див. Приховування інформації). Якщо виклик такої функції компонента здійснюється всередині блоку BEGIN - COMMIT, відбуваються вкладені транзакції. Оскільки популярні бази даних, такі як MySQL[1], не допускають вкладення блоків BEGIN - COMMIT, для цього потрібен фреймворк або монітор транзакцій. Коли ми говоримо про вкладені транзакції, слід пояснити, що ця функція залежить від СУБД і доступна не для всіх баз даних.

Теорія вкладених транзакцій подібна до теорії плоских транзакцій.[2]

Банківська галузь зазвичай обробляє фінансові операції за допомогою відкритих вкладених транзакцій, що є більш вільним варіантом моделі вкладених транзакцій і забезпечує вищу продуктивність, приймаючи супутні компроміси невідповідності.[3]

Подальше читання[ред. | ред. код]

  • Герхард Вейкум, Готфрід Фоссен, Транзакційні інформаційні системи: теорія, алгоритми та практика контролю і відновлення паралельності, Морган Кауфманн, 2002,ISBN 1-55860-508-8

Посилання[ред. | ред. код]

  1. Statements That Cause an Implicit Commit. MySQL 4.1 Reference Manual. Oracle. Архів оригіналу за 7 червня 2011. Процитовано 5 грудня 2010.
  2. Resende, R.F.; El Abbadi, A. (25 травня 1994). On the serializability theorem for nested transactions. Information Processing Letters. 50 (4): 177—183. CiteSeerX 10.1.1.43.6470. doi:10.1016/0020-0190(94)00033-6.
  3. Weikum, Gerhard; Hans-J. Schek (1992). Concepts and Applications of Multilevel Transactions and Open Nested Transactions. Morgan Kaufmann. с. 515–553. ISBN 978-1-55860-214-4. {{cite book}}: Проігноровано |journal= (довідка)