ACID — это аббревиатура от Атомарность, Последовательность, Изолированность и Долговечность. Это свойства для баз данных, которые могут предоставляться различными способами. Большинство баз данных предоставляют эти функции, но это не означает, что все базы данных поддерживают их одинаково.

Атомарность

Атомарность предусматривает, что все изменения, сделанные транзакцией, должны быть прерваны в случае ошибки.

Предположим, что ваше приложение начало обрабатывать одну транзакцию к базе данных, но вдруг из-за проблем с сетью транзакция не может быть завершена. Чего бы вы ожидали в такой ситуации от своего приложения? Это было в середине транзакции, и часть работы была завершена, а часть не могла быть завершена. Если ваша база данных находится в такой ситуации и база данных отменяет то, что она делала, точно так же, как и предыдущая версия до того, как произошла транзакция, это означает, что эта база данных обеспечивает атомарность.

Последовательность

Базы данных имеют некоторые правила корректности данных, и непротиворечивость помогает базе данных поддерживать правильное состояние в соответствии с этими правилами. Состояние данных в базе данных до транзакции должно сохраняться и после транзакции в соответствии с правилами.

Изоляция

Изоляция помогает выполнять параллельные транзакции так же, как вы выполняете их последовательно. Другими словами, одна транзакция не влияет на результат другой транзакции, и если вы будете запускать одни и те же транзакции в разное время, вы получите одинаковый результат. Эта ситуация может создать проблему, особенно если вы пытаетесь написать одну и ту же запись одновременно с разными транзакциями.

User1          get current balance    add 5 
Database       balance = 20                     expected result = 35
joint account
User2          get current balance    add 10 

В приведенном выше примере у нас есть совместный банковский счет, и Пользователь 1 и Пользователь 2 пытаются одновременно положить деньги на один и тот же счет. В конце этой операции мы ожидаем, что баланс банковского счета будет равен 35, но если база данных не поддерживает свойство isolation, она может получить значение 25 или 30, что приводит к неправильным данным.

Итак, как это произошло? Пользователь 1 получил текущий баланс и добавил деньги, в результате чего получилось 25. Впоследствии, прежде чем 25 будет записано в базу данных, Пользователь 2 получил текущий баланс как 20 и перезаписал 25, получив результат 30. В заключение, это привело к сбою изоляции и неправильному результату. на банковском счете.

Как я сказал в начале, каждая база данных не обязана реализовывать изоляцию или любое другое свойство ACID одинаковым образом. Базы данных могут выбрать один из уровней изоляции для реализации свойства isolation. Итак, существуют разные уровни изоляции, такие как snapshot isolation, serialazable, read uncommitted и так далее.

Долговечность

Мы хотим использовать базу данных для сохранения наших данных после успешной транзакции. Это наша основная цель использования баз данных. Кроме того, наше ожидание после сохранения данных, что мы не хотим потерять эти данные и не хотим ничего для этого делать. Durability обеспечивает именно эту функцию для баз данных. Для обеспечения надежности базы данных реплицируют данные на резервные узлы или резервные копии.

Ссылки

  1. Проектирование приложений, интенсивно использующих данные, Мартин Клеппманн