Транзакція - це

Транзакція (англ. Transaction) - в інформатиці. група послідовних операцій, яка являє собою логічну одиницю роботи з даними. Транзакція може бути виконана або цілком і успішно, дотримуючись цілісність даних і незалежно від паралельно йдуть інших транзакцій, або не виконана взагалі і тоді вона не повинна призвести ніякого ефекту. Транзакції обробляються транзакційними системами. в процесі роботи яких створюється історія транзакцій.

Розрізняють послідовні (звичайні), паралельні та розподілені транзакції. Розподілені транзакції мають на увазі використання більше ніж однієї транзакції системи і вимагають набагато більш складної логіки (наприклад, two-phase commit - двофазний протокол фіксації транзакції). Також, в деяких системах реалізовані автономні транзакції. або під-транзакції, які є автономною частиною батьківської транзакції.

приклад транзакції

Приклад: Необхідно перевести з банківського рахунку номер 5 на рахунок номер 7 суму в 10 грошових одиниць. Цього можна досягти, наприклад, наведеної послідовністю дій:

  • почати транзакцію
прочитати баланс на рахунку номер 5 зменшити баланс на 10 грошових одиниць зберегти новий баланс рахунку номер 5 прочитати баланс на рахунку номер 7 збільшити баланс на 10 грошових одиниць зберегти новий баланс рахунку номер 7
  • закінчити транзакцію

Ці дії являють собою логічну одиницю роботи «переказ суми між рахунками», і таким чином, є транзакцією. Якщо перервати дану транзакцію, наприклад, в середині, і не анулювати всі зміни, легко залишити власника рахунку номер 5 без 10 одиниць, тоді як власник рахунку номер 7 їх не отримає.

властивості транзакцій

Одним з найбільш поширених наборів вимог до транзакцій і транзакційних систем є набір ACID (Atomicity, Consistency, Isolation, Durability). Разом з тим, існують спеціалізовані системи з ослабленими транзакційними властивостями [1].

Рівні ізоляції транзакцій

В ідеалі транзакції різних користувачів повинні бути встановлені таким чином, щоб створювалася ілюзія, що користувач поточної транзакції - єдиний. Однак в реальності, з міркувань продуктивності і для виконання деяких спеціальних завдань, СУБД надають різні рівні ізоляції транзакцій. Рівні описані в порядку збільшення ізоляції транзакцій і надійності роботи з даними

  • 0 - непідтверджені читання (Read Uncommited, Dirty Read, брудне читання) - читання незафіксованих змін своєї транзакції і конкуруючих транзакцій, можливі нечисті, неповторювальні читання і фантоми
  • 1 - підтверджених читання (Read Commited) - читання всіх змін своєї транзакції і зафіксованих змін конкуруючих транзакцій, нечисті читання неможливі, можливі неповторювані читання і фантоми
  • 2 - Повторюване читання (Repeatable Read, Snapshot) - читання всіх змін своєї транзакції, будь-які зміни, внесені конкуруючими транзакціями після початку своєї, недоступні, нечисті і неповторювані читання неможливі, можливі фантоми
  • 3 - Упорядкований - (Serializable, Серіалізуемое) - впорядковані (Серіалізуемое) транзакції. Ідентичний ситуації, при якій транзакції виконуються строго послідовно, одна після іншої. Тобто транзакції, результат дії яких не залежить від порядку виконання кроків транзакції (заборонено читання всіх даних, змінених з початку транзакції, в тому числі і своєї транзакцією). Фантоми неможливі.

Чим вище рівень ізоляції, тим більше потрібно ресурсів, щоб їх підтримувати.

В СУБД рівень ізоляції транзакцій можна вибрати як для всіх транзакцій відразу, так і для однієї конкретної транзакції. За замовчуванням в більшості баз даних використовується рівень 1 (Read Commited). Рівень 0 використовується в основному для відстеження змін тривалих транзакцій або для читання рідко змінюваних даних. Рівні 2 і 3 використовуються при підвищених вимогах до ізольованості транзакцій.

Реалізація

Повноцінна реалізація рівнів ізоляції та властивостей ACID являє собою нетривіальну задачу. Обробка даних, що надходять призводить до великої кількості маленьких змін, включаючи оновлення як самих таблиць, так і індексів. Ці зміни потенційно можуть зазнати невдачі: закінчилося місце на диску, операція займає надто багато часу (timeout) і т. Д. Система повинна в разі невдачі коректно повернути базу даних в стан до транзакції.

Перші комерційні СУБД (наприклад, IBM DB2), користувалися виключно блокуванням доступу до даних для забезпечення властивостей ACID. Але велика кількість блокувань призводить до суттєвого зменшення продуктивності. Є два популярних сімейства рішень цієї проблеми, які знижують кількість блокувань:

Подальший розвиток технологій управління базами даних призвело до появи безблокіровочних технологій. Ідея контролю за паралельним доступом за допомогою тимчасових міток (timestamp-based concurrency control) була розвинена і привела до появи багатоверсійності архітектури MVCC. Ці технології не потребують ні в журналізації змін, ні в тіньових сторінках. Архітектура, реалізована в Oracle 7.х і вище, записує старі версії сторінок в спеціальний сегмент відкоту, але вони все ще доступні для читання. Якщо транзакція при читанні потрапляє на сторінку, тимчасова мітка якої новіше початку читання, дані беруться з сегмента відкату (тобто використовується «стара» версія). Для підтримки такої роботи ведеться журнал транзакцій, але на відміну від «упреждающей журналізації», він не містить даних. Робота з ним складається з трьох логічних кроків:

  1. Записати намір провести деякі операції
  2. Виконати завдання, копіюючи оригінали змінюваних сторінок в сегмент відкоту
  3. Записати, що все зроблено без помилок

Журнал транзакцій в поєднанні з сегментом відкату (область, в якій зберігається копія всіх змінюваних в ході транзакції даних) гарантує цілісність даних. У разі збою запускається процедура відновлення, яка переглядає окремі його записи наступним чином:

  • Якщо пошкоджена запис, то збій стався під час здійснення відмітки в журналі. Значить, нічого важливого не загубилося, ігноруємо цю помилку.
  • Якщо все записи позначені як успішно виконані, то збій стався між транзакціями, тут також немає втрат.
  • Якщо в журналі є незавершена транзакція, то збій стався під час запису на диск. В цьому випадку ми відновлюємо стару версію даних з сегменту відкату.

Примітки

Дивитися що таке "Транзакція" в інших словниках:

Транзакція - банківська операція, яка полягає в переказі грошових коштів з одного рахунку на інший. Див. Також: Безготівкові розрахунки Транзакції Фінансовий словник Фінам. Транзакція транзакція в інформатиці сукупність операцій над даними, яка, з точки ... ... Фінансовий словник

транзакція - і, ж. Трансакція і, ж. transaction f. 1. мн. устар. Записки, праці (суспільства). Вони, бажаючи з нами вступити в найтісніший вчений кореспонденцію, обіцяли і надалі свої філософські транзакції і дебати ім'ям соціетета іздаваемия твори повсягодно до ... Історичний словник галліцізмов української мови

транзакція - ім. кол під синонімів: 4 • переклад (62) • пересилання (15) • угода (39) • ... Словник синонімів

транзакція - запит відповідь Короткий за часом цикл взаємодії об'єктів, до складу якого запит - виконання завдання - відповідь. Зазвичай здійснюється в режимі діалогу. Приклади поєднань: transaction processing обробка транзакцій. ... ... Довідник технічного перекладача

транзакція - 4.15 транзакція (transaction): Команда, повідомлення або вхідні запис, які явно або неявно вимагають обробки; інформація, що міститься в транзакції, може бути застосована тільки для єдиного суб'єкта. Джерело ... Словник-довідник термінів нормативно-технічної документації

транзакція - транз акція, і (програм.) ... український орфографічний словник

транзакція - будь-яка торговельна угода або операція ... Довідковий комерційний словник