Стили джаза ― что такое acid jazz | эйсид-джаз, nu jazz, dark jazz за одну минуту?
Что такое ACID?
Одна из штук, которую часто спрашивают на собеседовании: Акроним ACID описывает требования к транзакционной системе, обеспечивающие наиболее надежную и предсказуемую её работу. Atomicity — Атомарность Атомарность гарантирует, что никакая транзакция не будет зафиксирована в системе частично. Будут либо выполнены все её подоперации, либо не выполнено ни одной. Consistency — Согласованность Транзакция, достигающая своего нормального завершения (EOT — end of transaction, завершение транзакции) и, тем самым, фиксирующая свои результаты, сохраняет согласованность базы данных...
Что такое ACID и каковы его принципы? 🤔 При работе с базами данных часто встречается аббревиатура ACID. Она обозначает набор свойств, которые обеспечивают надежность и целостность данных, особенно важных в таких критичных процессах, как банковские операции. Представьте: вы переводите деньги другу, но внезапно связь прервалась или произошел программный сбой. Куда делись ваши средства? Именно для предотвращения подобных ситуаций и существует ACID. Атомарность (Atomicity) ⚛️ Атомарность гарантирует, что транзакция будет выполнена либо полностью, либо не выполнена вообще. Промежуточные состояния исключены. Рассмотрим пример перевода денег между счетами 💸: 1. С вашего счета списываются средства. 2. На счет получателя зачисляется сумма. Если эти действия выполняются отдельными запросами, могут возникнуть проблемы: - Если первый запрос выполнен успешно, а второй — нет, деньги "зависнут". Они уже списаны с вашего счета, но так и не достигли адресата. Это недопустимо! 🙅♂️ Транзакция решает эту проблему, объединяя несколько запросов в единое целое. Если один из них завершится ошибкой, вся транзакция откатывается. База данных возвращается к исходному состоянию, словно ничего и не происходило. Согласованность (Consistency) 🔄 Согласованность означает, что после успешного завершения транзакции база данных остается в корректном состоянии. Например, если пользователь заполняет анкету с данными о себе (ФИО, телефон, адрес), система должна гарантировать, что все связанные записи будут добавлены одновременно 📝 Представьте, что адрес сохранился, а информация о клиенте — нет. Такая ситуация сделает базу несогласованной, создав "висящие" данные, которые ни к чему не относятся. Чтобы избежать этого, разработчики используют внешние ключи и ограничения. Например, можно наложить правило, чтобы баланс счета всегда оставался положительным. Если транзакция попытается нарушить это условие, она будет отменена ⚠️ Изолированность (Isolation) 🚧 Когда система обслуживает множество пользователей, транзакции могут выполняться параллельно. Однако это создает риски взаимного влияния. Рассмотрим несколько возможных эффектов: 1. Потерянная запись: Два оператора одновременно изменяют одну и ту же запись. В результате изменения одного из них могут быть перезаписаны. 2. Грязное чтение: Один оператор читает данные, которые еще не были зафиксированы другим оператором. Если вторая транзакция откатится, первому достанутся некорректные данные. 3. Повторимое чтение: При построении отчета оператор считывает данные дважды. Между этими действиями другой оператор изменяет значения, что приводит к несогласованности. 4. Фантомы: Аналогично предыдущему эффекту, но здесь меняется количество записей (например, добавляются новые строки) 👻 Для решения этих проблем применяются методы изоляции, такие как блокировки или версионирование. Блокировки позволяют временно ограничить доступ к данным, а версионирование создает "копии" записей, чтобы другие транзакции могли работать с актуальными данными без конфликтов. Надежность (Durability) 💪 Надежность гарантирует, что однажды подтвержденные изменения остаются в базе данных даже при сбоях 💾⚡️ Отключение питания или аппаратные неполадки не повлияют на уже выполненные транзакции. Это достигается за счет механизма журналирования, когда каждое изменение фиксируется в специальном логе до того, как оно применяется к данным. ACID — это фундаментальный принцип, обеспечивающий надежность и целостность данных в современных системах управления базами данных. Понимание его компонентов помогает разработчикам создавать устойчивые к ошибкам приложения, а пользователям — доверять технологиям, которые они используют. Немыкин.Продакшн - Java/Kotlin developer #acid