Получи случайную криптовалюту за регистрацию!

Понятия в БД, часть 1. ACID Какими свойствами обладает БД - п | Java: fill the gaps

Понятия в БД, часть 1. ACID

Какими свойствами обладает БД - популярный вопроc на собеседовании. Предполагается, что кандидат назовёт аббревиатуру ACID и cкажет 4 главных слова - Atomicity, Consistency, Isolation, Durability. На этих нехитрых знаниях можно дорасти до позиции сеньор, но дальше этого будет недостаточно.

Этот пост о том, зачем нужен ACID, какую задачу решает и как влияет на разработку.

ACID - это набор гарантий. Подразумевается, что если БД обозначена как ACID-compliant, можно ожидать следующее:

A - Atomicity
Можно объединить несколько операций в одну транзакцию. Если произойдёт ошибка, уже сделанные операции в группе отменятся. Всё или ничего.

Благодаря этому свойству можно не держать в коде несколько версий данных "на всякий случай" и восстанавливаться после ошибок гораздо проще.

C - Consistency
Целостность - широкий термин и его значения отличаются в ACID и CAP теореме. Что это значит в ACID: если для данных в БД заданы ограничения(constaints), то гарантируется их соблюдение всегда и везде. Если две транзакции захотят записать одинаковые значения в колонку с UNIQUE, то одна транзакция завершится с ошибкой.

Пользы от этого свойства мало. Обычно все проверки находятся в коде, поэтому у базы здесь немного работы.

I - Isolation
Каждая транзакция выполняется так, как будто других транзакций не существует.

На практике внутри БД происходит лютая многопоточка, с одними структурами одновременно работают десятки и сотни транзакций. Единственный способ надёжно изолировать их друг от друга - запускать транзакции последовательно.

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

D - Durability
Если данные записаны в БД, они не потеряются. Даже если выключится свет во всём районе.

Достигается двумя способами:
Запись на носитель, например, жёсткий диск или SSD
Отправка копий на другие сервера

100% надёжности на тысячи лет не будет, но сохранность данных - наименее проблемный пункт из всех остальных.

Подведём итог. ACID не даёт гарантий на уровне "записал и забыл". Целостность данных лежит на бизнес-логике, а в коде учитываются возможные ошибки неполной изоляции.

Поэтому ACID чаще встречается не в техническом описании, а в маркетинговых текстах рядом с цифровой трансформацией и дизайн-мышлением. Новые БД не берут на себя грех называться ACID-compliant, а используют более мягкую аббревиатуру BASE. Она не даёт чувства стабильности, но лучше отражает реальность.