ACID против BASE: Два подхода к целостности данных в SQL и NoSQL
Реляционные базы данных были созданы с надежностью и согласованностью данных в качестве фундаментального принципа. Инженеры, разрабатывавшие их, сосредоточились на транзакционной модели, которая гарантирует соблюдение четырех принципов ACID. Однако появление новой модели нереляционных баз данных перевернуло ACID с ног на голову. Модель NoSQL отвергает жестко структурированную реляционную модель в пользу гибкого подхода типа «ключ-значение». Такой неструктурированный подход к данным требует альтернативы принципов ACID: принципы BASE.
Основные принципы ACID основана на четырех фундаментальных принципах:
- Атомарность (Atomicity) транзакций гарантирует, что каждая транзакция представляет собой единый неделимый блок, который выполняется по принципу «все или ничего». Если любой оператор в транзакции завершается с ошибкой, вся транзакция откатывается.
- Согласованность (Consistency) обеспечивает, что каждая транзакция переводит базу данных из одного согласованного состояния в другое, не нарушая бизнес-правил. Если любой элемент атомарной транзакции может нарушить целостность базы данных, вся транзакция будет прервана.
- Изоляция (Isolation) означает, что механизм базы данных обеспечивает изоляцию множественных параллельных транзакций. Каждая транзакция выполняется так, как если бы она была единственной. Ни одна транзакция не должна видеть промежуточные результаты другой, незавершенной транзакции.
- Надежность (Durability) - этот принцип гарантирует, что после того, как транзакция зафиксирована в базе данных, она остается в ней навсегда, даже в случае сбоя системы. Это обеспечивается за счет механизмов резервного копирования и журналов транзакций, которые можно использовать для восстановления.
Ключевые принципы BASE NoSQL, напротив, работают в сценариях, где модель ACID является избыточной или даже препятствует эффективной работе. Вместо этого NoSQL опирается на более мягкую модель, известную как BASE. Эта модель соответствует гибкости, предлагаемой NoSQL для управления неструктурированными данными.
BASE состоит из трех принципов:
- Базовая доступность (Basic Availability). Подход NoSQL делает акцент на доступности данных даже при наличии множественных сбоев. Это достигается за счет высоко распределенной архитектуры. Вместо использования единого большого хранилища данных NoSQL-системы распределяют данные множество систем хранения с высокой степенью репликации. В маловероятном случае сбоя, который нарушает доступ к сегменту данных, это не обязательно приведет к полному отказу всей базы данных.
- Гибкое состояние (Soft State). Базы данных BASE практически полностью отказываются от требований согласованности модели ACID. Одна из основных концепций BASE заключается в том, что проблема согласованности данных ложится на плечи разработчика, а не должна решаться на уровне базы данных.
- Конечная согласованность (Eventual Consistency). Единственное требование NoSQL к согласованности заключается в том, что в какой-то момент в будущем данные придут к согласованному состоянию. Однако нет никаких гарантий относительно того, когда именно это произойдет. Это полный отход от требования немедленной согласованности в ACID, которое запрещает выполнение транзакции до тех пор, пока не завершится предыдущая и база данных не перейдет в согласованное состояние.
В принципах BASE базовая доступность может означать, что вы даже не контролируете источники данных. Например, вы можете частично использовать публичные наборы данных.
Области применения BASE подходит не для каждой ситуации, но она, безусловно, является гибкой альтернативой ACID для систем, которые не требуют строгого следования реляционной модели.
Оптимальные сценарии использования для ACID - это структурированность, данные с предсказуемыми входными и выходными данными. Таким образом, базы данных для отдела кадров, розничной торговли и тд, требуют проверки внутренней согласованности, которую предлагает ACID.
С другой стороны, решения на основе BASE лучше подходят для работы с нечеткими данными, например, для анализа. К примеру, проект, использующий BASE, может сканировать ленту социальных сетей в поиске слов, указывающих на эмоции по определенному хэштегу. Эти потоки данных не имеют четкой структуры и не локализованы, но они предоставляют информацию, запрашиваемую в запросах, даже если объем и характер этих данных не имеют четких границ.
Спор между ACID и BASE - это не битва за превосходство, а поиск оптимального инструмента для конкретной задачи. ACID предлагает надежность, предсказуемость и строгий порядок, как швейцарские часы. BASE дает масштабируемость, скорость и гибкость, позволяя работать с данными в хаотичной реальности современного мира.
Не существует лучшей модели - есть та, что лучше подходит вашей цели. Выбирая между ними, задайте себе главный вопрос: что для вас критичнее - согласованность или скорость?