Як працюють транзакції ACID та бази даних?


161

Який взаємозв'язок між ACID та транзакцією бази даних?

Чи дає ACID транзакції бази даних чи це те саме?

Може хтось просвітить цю тему.

Відповіді:


320

ACID - це набір властивостей, які ви хочете застосувати під час зміни бази даних.

  • Атомність
  • Послідовність
  • Ізоляція
  • Довговічність

Транзакція - це сукупність пов'язаних змін, яка використовується для досягнення деяких властивостей ACID. Транзакції - це інструменти для досягнення властивостей кислоти.

Атомізм означає, що ви можете гарантувати, що вся транзакція відбудеться, або нічого з цього не відбувається; ви можете робити складні операції як один єдиний блок, все або нічого, а аварія, відключення електроенергії, помилка чи щось інше не дозволять вам опинитися в стані, в якому відбулися лише деякі пов'язані з цим зміни.

Послідовність означає, що ви гарантуєте, що ваші дані будуть відповідні; жодне з обмежень, пов’язаних із суміжними даними, не буде порушено.

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

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

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


6
Ви говорите: "Узгодженість означає, що ви гарантуєте, що ваші дані будуть відповідні; жодне з обмежень, пов’язаних із вами пов’язаними даними, ніколи не буде порушено". Якщо під обмеженнями ви маєте на увазі ті, що визначені в базі даних (наприклад, перевірка обмежень), що стосується управління транзакціями, щоб запобігти їх порушенню? Вони не завжди в силі? Мені здається, що С в ACID повинен мати інше значення.
Марк Рочкінд

20
@MarcRochkind Транзакція дозволяє застосовувати перевірки послідовності, навіть якщо окремі операції в рамках транзакції порушуватимуть обмеження узгодженості. Наприклад, якщо ви оновлюєте систему ведення бухгалтерського обліку з подвійним записом, можливо, вам буде потрібно дебетувати з декількох рахунків і кредитувати кілька рахунків одночасно. Без транзакцій ви перевіряли б обмеження після кожного твердження і не змогли, оскільки окремі заяви не зберігають послідовність. Хоча окремі висловлювання, хоча окремі заяви не зберігають узгодженість, укладаються в цілому.
Брайан Кемпбелл

1
" і якщо потрібно прочитати дані, записані іншим, доведеться почекати, поки інший закінчиться " - це не зовсім вірно. Перша транзакція може (і буде) читати ці дані і побачить стан таким, яким він був до початку другої транзакції.
a_horse_with_no_name

1
@BrianCampbell 1) Послідовність - це "перевірка обмежень" як УНІКАЛЬНИЙ, ІНОЗЕМНИЙ КЛЮЧ, а також дійсний стан (відповідно до бізнес-логіки / вимоги програми) в кінці транзакції? 2) Чи не лише атомність та ізоляція не забезпечують послідовність? Чи слід чітко згадувати про послідовність як необхідну властивість?
користувач104309

1
@a_horse_with_no_name Ви говорите про OCC (оптимістичний контроль сумісності) v / s PCC (песимістичний). Обидва можуть бути реалізовані в сумісній із ACID системою баз даних, залежить від того, чи збираєтесь ви послідовність чи високу доступність.
Сіддхартха

37

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

СУБД є (якщо це є корисним) певним видом механізму обробки транзакцій, який виявляє, як правило, дуже велику міру, але не зовсім ці властивості.

Але існують і інші двигуни, які також можуть виявити ці властивості. Програмне забезпечення, яке раніше називалося "моніторами TP", є конкретним випадком (сьогодні еквівалент переважно веб-серверів).

Такі монітори TP можуть отримувати доступ до інших ресурсів, ніж СУБД (наприклад, принтер), і все ще гарантують ACID своїм користувачам. Як приклад того, що може означати ACID під час участі принтера в транзакції:

  • Атомність: весь документ друкується або взагалі нічого немає
  • Послідовність: після закінчення транзакції подача паперу розміщується вгорі сторінки
  • Ізоляція: під час друку не змішуються два документи
  • Довговічність: принтер може гарантувати, що він не "друкував" порожніми картриджами.

3
чудові стислі принтери.
озера

2
Хороший приклад. Я не розумію частину "послідовності". На мій погляд, кращий приклад - «Принтер не приймає папір розміром більше 10 дюймів».
skeller88

EDIT - "папір ширше 10 дюймів".
skeller88

1
Я визнаю, що один трохи розтягується. Але важко знайти кращі приклади, оскільки "узгодженість" стосується даних, а принтер - це не саме пристрій передачі даних.
Ервін Смоут

1
Добре, тоді принтер має засоби, які не дозволяють йому починати друкувати, якщо кількість сторінок документа перевищує кількість аркушів аркуша, які зараз знаходяться в постачанні паперу. Ви бачите, що це проблема з багатьма людьми, які коментують тут. Ви згадуєте "принтер", і вони бачать лише той тупий серійний потоковий пристрій, який вони мають на своєму домашньому столі, а не висококласний професійний пристрій, який би заповнив всю їхню вітальню (і часто має такі функції, про які я згадував).
Ервін Смоут

21

Я трохи змінив приклад принтера, щоб зробити його більш зрозумілим

1 документ, який містив 2 сторінки вмісту, був відправлений на принтер

Транзакція - документ, надісланий принтеру

  • атомність - принтер друкує 2 сторінки документа або жодну
  • послідовність - принтер друкує половину сторінки, і сторінка застрягає. Принтер перезавантажується сам і друкує 2 сторінки з усім вмістом
  • ізоляція - хоча надрукована кількість надрукованих друкованих видань - принтер друкує потрібний вміст документа
  • довговічність - під час друку з'явився вимикач живлення - принтер знову друкує документи без будь-яких помилок

Сподіваюсь, це допомагає комусь зависати від концепції кислоти


Я не впевнений, що означає "хоча надрукована кількість друку" - це просто "кілька", а не "занадто багато"?
icc97

17

Який взаємозв'язок між ACID та транзакцією бази даних?

У реляційній базі даних кожен оператор SQL повинен виконуватись в межах транзакції.

Без чіткого визначення меж транзакцій база даних збирається використовувати неявну транзакцію, яка обертається навколо кожного окремого висловлювання.

Неявна транзакція починається до того, як оператор буде виконаний, і закінчується (фіксує або відкочує) після виконання оператора. Неявний режим транзакцій зазвичай відомий як автокомісія.

Як пояснено в цій статті , транзакція - це сукупність операцій читання / запису, які успішні лише в тому випадку, якщо всі операції, що містяться в ній, є успішними.

Атомність

За своєю суттю транзакція характеризується чотирма властивостями (зазвичай їх називають ACID):

  • Атомність
  • Послідовність
  • Ізоляція
  • Довговічність

Чи дає ACID транзакції бази даних чи це те саме?

Для системи реляційних баз даних це справедливо, оскільки стандарт SQL визначає, що транзакція повинна надавати гарантії ACID:

Атомність

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

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

Послідовність

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

Ізоляція

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

Довговічність

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

введіть тут опис зображення

Щоб отримати докладніші відомості про довговічність та журнал Redo, ознайомтеся з цією статтею .


Щодо "послідовності" - я в багатьох місцях бачу "специфічну логічну правильність програми" як пояснення. Припустимо, якщо це так, DB не може знати логіку програми. Отже, "узгодженість" не може бути властивою БД. Отже, щоб додаток реалізував свою коректність (або "послідовність"), чи недостатньо Atomicity та Isolation?
користувач104309

1
Узгодженість ACID означає обмеження цілісності бази даних: PK, FK, UNIQUE обмеження. ACID важливий, але вашій програмі може знадобитися більше, ніж запобігання втраченим оновленням при тривалих розмовах, що вимагає оптимістичного блокування на рівні програми.
Влад Михальча

Дозвольте мені поглянути. Але перед цим мені потрібно основне уточнення. Коментар Мозга Кемпбелла у прийнятій відповіді "З транзакціями, хоча окремі заяви не зберігають послідовності, це робить транзакція в цілому". Як це можливо? І як множина дебетів та кредитів пов'язана з послідовністю?
користувач104309

Ознайомтеся з розділом "Угоди" в моїй високопродуктивній книзі "Наполегливість Java", щоб отримати детальну відповідь на всі ці питання.
Влад Михальча

12

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

Система баз даних грає з безліччю різних видів транзакцій, де всі транзакції мають певні характеристики. Ця характеристика відома властивості кислоти. Властивості ACID приймають грантодавця за всі транзакції бази даних для виконання всіх завдань.

Атомність: або вчинити все, або нічого.

Послідовність: Зробіть послідовний запис з точки зору підтвердження всіх правил та обмежень транзакції.

Ізоляція: переконайтеся, що дві транзакції не знають одна про одну.

Довговічність: віддані дані зберігаються назавжди. Довідка взята з цієї статті:


5

Щоб цитувати Вікіпедію :

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

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


3

[Грей] представив властивості ACD для транзакції в 1981 році. У 1983 році [Haerder] додав властивість Isolation. На мою думку, властивості ACD мали б більш корисний набір властивостей для обговорення. Одне тлумачення Atomicity (що транзакція має бути атомною, як це видно у будь-якого клієнта в будь-який час) насправді передбачає властивість ізоляції. Властивість "ізоляції" корисна, коли транзакція не є ізольованою; коли властивість ізоляції розслаблена. У ANSI SQL говорять: якщо рівень ізоляції слабший, то СЕРІАЛІЗАЦІЙНИЙ. Але коли рівень ізоляції СЕРІАЛЬНИЙ, властивість ізоляції насправді не представляє інтересу.

Про це я писав більше в публікації в блозі: "Кислота не має сенсу".

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

[Сірий] Концепція транзакцій, Джим Грей, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Haerder] Принципи відновлення даних, орієнтованих на транзакції, Haerder and Reuter, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf


1

Трансакція може бути визначена як сукупність завдань, які розглядаються як мінімальний блок обробки. Кожен мінімальний блок обробки не можна розділити далі.

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

  • Атомність:
  • Послідовність
  • Ізоляція
  • Довговічність
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.