В мире больших данных
218 subscribers
34 photos
5 files
54 links
Полезные заметки о системном анализе в мире больших данных. Если вам интересны Big Data, DWH, SQL и как навести порядок в данных — заглядывайте. Будет интересно и по делу.

Автор: @JuliaMur
Download Telegram
ACID: atomicity, consistency, isolation and durability

Звучит как заклинание, но на самом деле это важнейший набор требований к работе с данными, гарантирующий надёжность транзакций.
Рассмотрим ACID обзорно, а в последствии раскроем каждое из понятий, так как все дата аналитики или инженеры будут ежедневно сталкиваться с этим в работе.

А — Атомарность. Гарантирует, что в рамках транзакции будут выполнены либо все запросы, либо ни одного.
С — Согласованность. Отвечает за то, что в рамках транзакции фиксируются только допустимые результаты.
И — Изолированность. Отвечает за то, что при одновременном выполнении нескольких транзакций, они не должны оказывать влияния друг на друга.
У — Устойчивость. Гарантирует, что если транзакция будет выполнена, то её результаты уже не отменит никакой сбой системы (выключенный сервер, сетевой сбой и так далее).

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

#sql #acid
🔥1
Atomicity — Атомарность

Выше мы разговаривали о требованиях ACID (хэштег #acid). Рассмотрим каждое требование подробнее.

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

Само понятие транзакции включает себя это требование. Транзакция — неделимый набор операций.

Простейший пример транзакции:
BEGIN;
UPDATE accounts SET balance = balance - 5000.00
    WHERE name = 'Olga';
UPDATE accounts SET balance = balance + 5000.00
    WHERE name = 'Bob';
COMMIT;
ROLLBACK;

Ольга перевела 5000 у.е. Ивану, в результате со счёта Ольги списались 5000, а Ивану зачислились 5000. Если, к примеру, во время зачисления средств на счёт Ивана произошёл сбой (н-р, счёт Ивана не был найден), то и списание средств со счёта Ольги не произошло. Аналогично сработает, если на счету у Ольги не окажется нужной суммы для перевода, то и Ивану тогда ничего не зачислится.

Чтобы обеспечить атомарность, СУБД используют механизмы логирования и отката. Логирование позволяет записывать все изменения, внесенные в базу данных, в журнал транзакций. В случае сбоя или ошибок СУБД использует журнал для отмены изменений, внесенных этой транзакцией.

#sql #acid
Consistency — Согласованность

Каждая успешная транзакция фиксирует только допустимые результаты. 

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

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

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

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

Другой пример, в БД интернет-магазина нельзя добавить заказ с пустым client_id, так как это противоречит бизнес-логике.

#sql #acid
Isolation — Изолированность

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

Большинство БД поддерживает 4 уровня изоляции:
1. Read Uncommitted
2. Read Committed
3. Repeatable Read
4. Serializable

Чем ниже уровень, тем слабее изоляция, но тем меньше тратится ресурсов.

Подробнее о возникающих проблемах при работе параллельных транзакция и об уровнях изоляции поговорим позже.

#sql #acid
Durability — Устойчивость

Кажется я задолжала вам рассказ о последнем свойстве ACID — устойчивости (durability).

Устойчивость — это гарантия того, что после завершения транзакции данные останутся в базе. Даже если система внезапно выключится или случится какой-то сбой, изменения не пропадут.

Как это работает на практике? Когда транзакция завершается успешно, СУБД физически записывает все изменения. Только после этого транзакция считается завершенной.

Для обеспечения устойчивости базы данных используют разные техники. Одна из них — логирование. Система записывает все изменения в специальный журнал до того, как внести их в основную базу. Если произойдет сбой, СУБД сможет восстановить данные из этого журнала.
Также часто применяют репликацию, т.е. данные копируются на несколько серверов. Если один выйдет из строя, другие продолжат работу.

Устойчивость особенно важна для финансовых систем. Представьте, вы перевели деньги, а потом случился сбой и ваши деньги просто исчезли. Ужасно, правда?

А еще устойчивость=надёжность важна для бизнес-аналитики. Компании полагаются на исторические данные для принятия решений. Если бы данные могли пропасть из-за сбоя, это сильно усложнило бы анализ.

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

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

#dwh #acid
1👍1