МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
____________________________
Кафедра ____________________________
РЕФЕРАТ
на тему: «Сравнение ACID и BASE моделей в NoSQL базах данных»
Выполнил(а): ____________________________
Группа: ____________________________
Проверил(а): ____________________________
2026
Содержание
- 3
- 5
- 8
- 10
1. Эволюция требований к базам данных
Реляционные базы данных господствовали в корпоративном мире без малого сорок лет. Отправной точкой можно считать систему System R, созданную в IBM в 1974 году, а завершением этого периода, современные инсталляции Oracle. Подход оставался неизменным: строгая схема, язык SQL и транзакции с гарантиями ACID. Такая модель идеально ложилась на потребности банков, авиакомпаний и бухгалтерий, где потеря данных или рассинхронизация записей были немыслимы.
К середине 2000-х годов характер нагрузки изменился. Интернет-гиганты вроде Google и Amazon столкнулись с трафиком, который не могли обработать вертикально масштабируемые монолитные СУБД. Один сервер, даже самый мощный, упирался в потолок: миллионы одновременных пользователей, терабайты логов и пользовательских действий требовали иной архитектуры. Добавление ещё одного процессора или диска уже не помогало, нужно было распределять нагрузку между тысячами машин.
Дело было не только в объёмах. Реляционная модель требовала жёсткой схемы данных, а новые веб-приложения работали с полуструктурированными данными: JSON-документами, профилями социальных сетей, метриками датчиков. Изменение схемы в традиционной СУБД означало длительную миграцию и простои, что для динамичного сервиса было неприемлемо. В 2009 году инженер Amazon Дин Якометти ввёл термин NoSQL, обозначив им семейство баз, которые отказываются от SQL и реляционной модели в пользу гибкости.
Ключевой компромисс касался согласованности. Классические транзакции ACID гарантируют, что система всегда находится в непротиворечивом состоянии. В распределённой среде обеспечить это означает заблокировать данные на время выполнения операции, а координация между узлами занимает время. Для глобального сервиса, где каждый запрос обрабатывается на ближайшем к пользователю сервере,
синхронная запись на все реплики превращает миллисекундный запрос в секундную задержку. Amazon обнаружил это на собственном опыте: в 2007 году их инженеры опубликовали описание Dynamo, системы, где запись принимается на одном узле и лишь позже реплицируется на остальные.
Возникла потребность в альтернативной парадигме. BASE, термин, предложенный Дэном Причеттом из eBay в 2008 году, описывает систему, которая жертвует строгой согласованностью ради доступности и скорости. Вместо того чтобы блокировать операцию до полного подтверждения, такие базы возвращают ответ немедленно, позволяя данным распространиться по кластеру асинхронно. Это звучит как ослабление гарантий, но для многих задач подобное поведение более чем адекватно. Лента новостей или корзина покупок не требуют атомарности: если пользователь видит свежий пост с задержкой в пару секунд, это не критично, а вот если сервис недоступен во время пиковой нагрузки, бизнес теряет деньги немедленно.
Выбор между этими подходами не является вопросом технологической моды. Это инженерный компромисс, продиктованный теоремой CAP, сформулированной Эриком Брюером в 2000 году: в распределённой системе невозможно одновременно гарантировать согласованность, доступность и устойчивость к разделению сети. Когда связь между узлами рвётся, приходится выбирать: либо отвечать устаревшими данными, либо блокировать запрос до восстановления связи. Традиционные СУБД выбирают первое, NoSQL часто второе. Именно это разделение определило вектор развития индустрии на ближайшее десятилетие, и понимание его причин необходимо для анализа обеих моделей.
2. ACID: гарантии и ограничения
Аббревиатура ACID описывает четыре свойства транзакции в классической реляционной базе данных. Формализовали их в конце 1970-х, когда стало очевидно: сбои оборудования и одновременная работа многих пользователей неизбежно приводят к ошибкам, если этим не управлять на уровне ядра СУБД. Каждое свойство решает свою конкретную проблему, однако в распределённых системах обеспечить их все вместе очень трудно.
Атомарность означает, что транзакция выполняется либо целиком, либо не выполняется вовсе. Если при переводе денег между счетами списание прошло, а зачисление нет, система обязана откатить первое действие. В PostgreSQL и Oracle это делается через механизм undo-записей и журнал упреждающей записи (Write-Ahead Logging). При сбое процесса незавершённая транзакция просто отменяется, изменения стираются. Сложности начинаются, когда данные реплицируются на несколько узлов. Атомарность в глобальном масштабе требует, чтобы все узлы согласованно зафиксировали либо все части транзакции, либо ни одной. Это достигается двухфазным протоколом фиксации (2PC), который на время координации блокирует ресурсы и заметно увеличивает задержки.
Согласованность в ACID понимается не так, как в быту. Она не про то, что данные всегда отражают последнее обновление. Речь о том, что транзакция переводит базу из одного допустимого состояния в другое, соблюдая все заявленные ограничения: внешние ключи, уникальные индексы, проверочные ограничения (CHECK). Бизнес-логику пишет разработчик, а СУБД следит за формальными правилами целостности. Например, банковская система вполне может допускать отрицательный баланс, если это разрешено ограничением, и это будет согласованным состоянием. В распределённой среде всё усложняется тем, что узлы могут иметь разные версии ограничений, а их синхронное применение требует глобальной блокировки.
Изоляция определяет, как параллельные транзакции влияют друг на друга. Стандарт SQL выделяет четыре уровня: read uncommitted, read committed, repeatable read и serializable. На низком уровне транзакция видит незафиксированные данные другой транзакции, отсюда «грязные» чтения. На высшем уровне, serializable, транзакции ведут себя так, будто выполняются строго друг за другом. MySQL по умолчанию работает на уровне repeatable read, PostgreSQL, на read committed. У каждого уровня свои механизмы: блокировки и версионирование строк (MVCC). Но в распределённой базе с репликацией добиться serializable почти невозможно без глобальных блокировок, которые парализуют систему при росте числа узлов. Поэтому большинство NoSQL-систем не поддерживают изоляцию в классическом смысле, ограничиваясь атомарными операциями над одним документом.
Долговечность гарантирует, что результаты успешно завершённой транзакции переживут сбой питания или падение процесса. Основной механизм здесь, журналирование: изменения сначала пишутся в устойчивый журнал на диске, и только потом в основную структуру данных. В PostgreSQL используется WAL, в MySQL, бинарный лог. Резервные копии и реплики дополняют картину, но журнал не заменяют. В распределённых системах долговечность усложняется тем, что подтверждение записи клиенту может означать запись только на один узел, а не на все реплики. Если этот узел выйдет из строя до синхронизации, данные потеряются. Системы вроде Cassandra позволяют настраивать фактор репликации и уровень согласованности записи (QUORUM, ONE, ALL), что напрямую влияет на долговечность, но одновременно и на производительность.
Главное ограничение ACID в распределённых системах, цена координации. Для атомарности и изоляции на нескольких узлах нужны распределённые блокировки и протоколы голосования. Каждый такой шаг добавляет сетевые задержки и создаёт точки отказа. По данным исследований, двухфазный протокол фиксации в системе с тремя узлами увеличивает
время транзакции на 30-50% по сравнению с локальным выполнением. При масштабировании до десятков узлов задержки становятся неприемлемыми для большинства веб-приложений. Поэтому инженеры из Amazon и Google в середине 2000-х пришли к выводу, что для глобальных сервисов нужно ослабить требования согласованности, что привело к появлению модели BASE. Но сам ACID остаётся стандартом для систем, где целостность данных важнее скорости доступа.
3. BASE: гибкость и доступность
Модель BASE предлагает стратегию, прямо противоположную жёсткой дисциплине ACID. Её название расшифровывается как Basically Available, Soft state, Eventually consistent, что переводится как «базовая доступность, мягкое состояние, согласованность в конечном счёте». Термин ввёл Эрик Брюэр в 2000 году, развивая идеи своей CAP-теоремы. Вместо гарантии целостности в любой момент времени, BASE исходит из того, что система должна отвечать всегда, даже если в ответе окажутся устаревшие данные.
Сформулированная Брюэром CAP-теорема утверждает, что в распределённой системе невозможно одновременно обеспечить согласованность, доступность и устойчивость к разделению сети. Разделение сети означает, что узлы теряют возможность общаться друг с другом. Когда такое разделение происходит, администратору приходится выбирать: либо отвечать на запросы, рискуя выдать неактуальные данные, либо блокировать запросы ради строгой согласованности. Первый путь ведёт к BASE, второй остаётся в рамках ACID. Практика показывает, что для глобальных сервисов, работающих через интернет, избежать разделений невозможно, поэтому инженеры чаще выбирают доступность.
Мягкое состояние, второе слово в аббревиатуре, означает, что данные не обязаны быть зафиксированы жёстко. Система может находиться в переходном состоянии, когда разные узлы хранят разные версии одного и того же объекта. Это не ошибка, а нормальная рабочая ситуация. Например, пользователь обновляет свой профиль, и запрос попадает на один сервер в Европе, в то время как другой пользователь читает данные с реплики в Азии. В течение некоторого времени эти две копии будут различаться. Никакого нарушения целостности в этом нет, поскольку система просто позволяет себе временную несогласованность ради скорости обработки.
Eventual consistency, или согласованность в конечном счёте, является завершающим элементом модели. Она гарантирует, что если обновления прекратятся, то все реплики рано или поздно придут к одному состоянию. Этот процесс называется сходимостью. Он не гарантирует, что все узлы обновятся одновременно, но обещает, что через конечный промежуток времени расхождения исчезнут. Такой подход радикально упрощает архитектуру: узлам не нужно координировать каждый шаг, достаточно периодически обмениваться изменениями и разрешать конфликты. Задержка сходимости может составлять миллисекунды или минуты, в зависимости от нагрузки и расстояния между дата-центрами.
Практическим воплощением этой философии стали системы, созданные в конце 2000-х годов. Apache Cassandra, разработанная в Facebook для поиска по почтовым ящикам, использует модель BASE в чистом виде. Она обеспечивает линейную масштабируемость: добавление новых узлов увеличивает пропускную способность без простоев. Amazon DynamoDB, построенная на основе доклада команды Amazon о распределённых хранилищах, использует eventual consistency для чтения по умолчанию, позволяя клиенту выбирать более строгие гарантии, если это критично. Riak, созданный на основе идей Дэниела Томпсона и Джастина Шихи, умеет автоматически разрешать конфликты с помощью векторных часов, что делает его надёжным выбором для систем с высокой частотой записи.
Все три системы жертвуют мгновенной согласованностью ради того, чтобы оставаться доступными даже при сбоях целых центров обработки данных. Показательно, что для финансовых транзакций такой подход неприемлем, но для лент новостей, корзин интернет-магазинов или датчиков IoT он становится единственно разумным. BASE не отменяет ACID, она просто занимает свою нишу там, где скорость и доступность важнее абсолютной точности.
4. Сравнительный анализ и выбор модели
После того как мы разобрались в свойствах обеих моделей, логично перейти к их сопоставлению. И здесь разница заметна уже на уровне базовых принципов. ACID гарантирует, что каждая транзакция завершится корректно, а данные всегда останутся консистентными. BASE исходит из другого допущения: в распределённой системе проще позволить данным временно разойтись, чем блокировать операции ради абсолютной точности.
Сильная согласованность в ACID обходится дорого. Чтобы обеспечить атомарность и изоляцию, узлам приходится постоянно обмениваться сообщениями и блокировать ресурсы. В распределённой среде это напрямую бьёт по доступности. Если один узел недоступен, система часто останавливает обработку запросов в ожидании его восстановления. Производительность тоже страдает: координация между узлами добавляет задержки. Здесь уместно вспомнить классический пример из работы Эрика Брюера 2000 года и последующей формализации CAP-теоремы. При сетевом разделении приходится выбирать между согласованностью и доступностью, и ACID выбирает первое.
BASE работает иначе. Система остаётся доступной даже при отказе части узлов, а данные распространяются между репликами асинхронно. Пользователь видит результат почти мгновенно, но нет гарантии, что этот результат отражает последнее изменение. Для многих приложений это вполне приемлемо. Скажем, счётчик лайков в социальной сети может показывать число, отстающее от реального на несколько секунд, и никто этого не заметит. Однако для бизнес-логики, где важно точное состояние счёта или остатка товара, eventual consistency превращается в проблему. Две операции могут одновременно считать одно и то же значение и привести к конфликту.
Поэтому выбор упирается в требования конкретного приложения, а не в абстрактное превосходство одной модели над другой. Критичность данных стоит на первом месте. Если потеря или искажение информации недопустимы, ACID остаётся единственным разумным вариантом. Если же важнее охватить миллионы пользователей и обеспечить низкую задержку, выигрывает BASE. Горизонтальное масштабирование тоже имеет значение. Реляционные СУБД масштабируются сложно и дорого, тогда как NoSQL-системы вроде Cassandra или DynamoDB изначально спроектированы для распределённой работы.
Отдельно стоят гибридные подходы, известные как NewSQL. Они пытаются соединить SQL-удобство и транзакционность ACID с распределённой архитектурой NoSQL. Системы вроде Google Spanner или CockroachDB используют сложные протоколы синхронизации времени, чтобы обеспечить сильную согласованность без потери масштабируемости. Правда, это технически сложно и требует мощного оборудования. Поэтому NewSQL пока не вытесняет ни ACID, ни BASE, а занимает свою нишу для задач, где нужны и гарантии, и распределённость.
Практические рекомендации вытекают из всего описанного выше. Для финансовых систем, где каждая операция влияет на баланс, обязателен ACID. Компромиссы в согласованности здесь означают прямые денежные потери и юридические риски. Социальные сети, системы рекомендаций, интернет вещей и аналитические платформы, где допустима небольшая задержка обновления, строятся на BASE. Промежуточные сценарии, например корзина интернет-магазина, часто используют гибридный подход: транзакции на уровне заказа выполняются по ACID, а каталог и рейтинги работают по BASE.
Итог прост: универсального решения не существует. Инженер должен честно оценить, что для системы важнее: мгновенная точность или постоянная доступность. И уже от этого отталкиваться при выборе модели.
Нужна такая же работа по своей теме? Соберём структуру, текст и источники в этом же оформлении.