Атомарність (системи бази даних)
У системах баз даних, атомарність ([ˌætəˈmɪsəti], від дав.-гр. ἄτομος, трансліт. átomos, латиніз. undividable) є однією з властивостей транзакції ACID (атомарність, узгодженість, ізоляція, довговічність). Атомарна транзакція — це неподільна і незвідна серія операцій з базою даних, при якій або відбувається все, або нічого не відбувається.[1] Гарантія атомарності запобігає оновленню бази даних лише частково, що може спричинити більші проблеми, ніж повне відхилення всієї серії. Як наслідок, інший клієнт бази даних не може спостерігати за транзакцією. В один момент часу це ще не відбулося, а в наступний це вже відбулося повністю (або нічого не сталося, якщо транзакція була скасована в процесі).
Прикладом атомарної транзакції є грошовий переказ з банківського рахунку A на рахунок B. Він складається з двох операцій: зняття грошей з рахунку A та збереження на рахунок B. Виконання цих операцій у атомарній транзакції гарантує, що база даних залишається в узгодженому стані, тобто гроші не втрачаються і не створюються, якщо жодна з цих двох операцій не виконалась.[2]
Цей же термін також використовується у визначенні першої нормальної форми в системах баз даних, де він натомість відноситься до концепції, що значення для полів не можуть складатися з кількох менших значень, які потрібно розкласти, наприклад, рядок, у якого є кілька імен, чисел, дат або можуть міститись інші типи.
Атомарність не веде себе повністю ортогонально щодо інших властивостей ACID транзакцій. Наприклад, ізоляція покладається на атомарність для відкоту змін у разі збоїв ізоляції, таких як блокування; узгодженість також покладається на відкат у разі порушення послідовності незаконною транзакцією. Врешті-решт, сама атомарність покладається на довговічність, щоб забезпечити атомарність транзакцій навіть у разі зовнішніх збоїв.
Внаслідок цього неможливість виявлення помилок та відкат вкладеної транзакції може призвести до збоїв ізоляції та узгодженості.
Як правило, системи реалізують атомарність, забезпечуючи певний механізм, щоб вказати, які транзакції розпочалися, а які закінчилися; або зберігаючи копію даних до будь-яких змін (читання-копіювання-оновлення). Кілька файлових систем розробили методи, щоб уникнути необхідності зберігати множинні копії даних, використовуючи ведення журналу (див. ведення журналу файлової системи). Бази даних зазвичай реалізують це за допомогою певної форми ведення журналу для відстеження змін. Система синхронізує журнали (часто метадані) за необхідності після успішного внесення змін. Після цього відновлення після провалу ігнорує неповні записи. Хоча реалізації відрізняються залежно від таких факторів, як проблеми з паралельністю, принцип атомарності, тобто повний успіх або повний провал, залишається.
Зрештою, будь-яка реалізація на рівні програми покладається на функціональність операційної системи . На рівні файлової системи POSIX-сумісні системи забезпечують системні виклики, такі як open(2)
і flock(2),
які дозволяють програмам атомарно відкривати або блокувати файл. На рівні процесу потоки POSIX забезпечують адекватні примітиви синхронізації.
Апаратний рівень вимагає атомарних операцій, таких як Test-and-set, Fetch-and-add, Compare-and-swap, або Load-Link/Store-Conditional, разом із бар'єрами пам'яті. Портативні операційні системи не можуть просто блокувати переривання для реалізації синхронізації, оскільки апаратне забезпечення, яке не виконує одночасне виконання, таке як гіперпотокове або багатопроцесорне, зараз надзвичайно рідкісне.
- Атомна операція
- Обробка транзакцій
- Довготривала транзакція
- Читати-копіювати-оновлювати
- ↑ atomic operation. http://www.webopedia.com/: Webopedia. Архів оригіналу за 27 листопада 2020. Процитовано 23 березня 2011.
An operation during which a processor can simultaneously read a location and write it in the same bus operation. This prevents any other processor or I/O device from writing or reading memory until the operation is complete.
- ↑ Amsterdam, Jonathan. Atomic File Transactions, Part 1. O'Reilly. Архів оригіналу за 3 березня 2016. Процитовано 28 лютого 2016.