ACID
ACID - це набір властивостей транзакцій бази даних, призначених для гарантування дійсності даних, незважаючи на помилки, збої в електропостачанні та інші непередбачувані ситуації. У контексті баз даних послідовність операцій з базою даних, яка задовольняє властивості ACID, називається транзакцією.
Атомарність
Транзакції часто складаються з декількох операцій. Атомарність гарантує, що кожна транзакція розглядається як одна «одиниця», яка або повністю завершується успішно, або повністю провалюється: якщо будь-який з операторів, що складають транзакцію, не завершується, вся транзакція провалюється, а база даних залишається незмінною. Гарантія атомарності запобігає частковому оновленню бази даних, що може спричинити більші проблеми, ніж повна відмова від усієї серії оновлень даних.
Наприклад, в бухгалтерській таблиці є кілька рядків:
person_id |
name |
balance |
---|---|---|
… |
… |
… |
529 |
Dora Headstrong |
$1,000 |
402 |
Toby Mugwort |
$100 |
… |
… |
… |
Якщо Дора хоче переказати $100 Тобі, це можна розбити на 3 операції:
Перевірити, чи доступні $100
Відняти $100 з балансу Дори
Додати $100 на баланс Тобі
Якщо 3-й оператор не спрацює, дані можуть залишитися у вигляді:
529 |
Dora Headstrong |
$900 |
402 |
Toby Mugwort |
$100 |
Атомарність гарантує повернення бази даних до старого стану, якщо якийсь оператор зазнає невдачі.
Узгодженість
Ви можете думати про «узгодженість» як про «правильність». Вона гарантує, що транзакція може лише переводити базу даних з одного узгодженого стану в інший: будь-які дані, записані в базу даних, повинні бути дійсними згідно з усіма визначеними правилами, включаючи обмеження, каскади, тригери та будь-яку їх комбінацію. Це запобігає пошкодженню бази даних неправильною транзакцією. Наприклад, цілісність посилань гарантує зв’язок між первинним і зовнішнім ключами.
Ізоляція
Транзакції часто виконуються паралельно (наприклад, декілька транзакцій одночасно читають і записують дані в таблицю). Ізоляція гарантує, що одночасне виконання транзакцій залишає базу даних у стані, який був би отриманий, якби транзакції виконувалися послідовно. Ізоляція є основною метою контролю паралелізму; залежно від рівня ізоляції, що використовується, наслідки незавершеної транзакції можуть бути невидимими для інших транзакцій.
Наприклад, дві особи мають доступ до одного рахунку, на якому є $1,000, і обидві особи намагаються зняти гроші з цього рахунку. Дора намагається зняти $1,000, а Тобі - $100.
Сума грошей, яку потрібно зняти з рахунку, становить $1,100, що призводить до проблеми від’ємної суми. Отже, одна з цих транзакцій не вдається.
Ізоляція забезпечує безпеку конкурентного виконання.
Довговічність
Довговічність означає, що як тільки транзакція була здійснена, дані повинні бути записані в енергонезалежну пам’ять. Таким чином, навіть якщо трапиться збій або щось не так з базою даних, дані повинні бути на місці і не повинні бути пошкоджені.