Теорема CAP (также известная как теорема Бревера) утверждает, что распределенная система баз данных может гарантировать только два из трех свойств одновременно:

  • C – Консистентность (Consistency)
  • A – Доступность (Availability)
  • P – Устойчивость к разделению (Partition Tolerance)

📌 Невозможно иметь все три свойства одновременно!

💡 В распределенной базе данных вам необходимо пожертвовать либо консистентностью, либо доступностью при возникновении разделения сети.


1. Треугольник теоремы CAP

📌 Теорема CAP заставляет делать компромиссы при проектировании распределенных баз данных.


2. Свойства теоремы CAP

1️⃣ Консистентность (C)
✅ Все узлы всегда возвращают одинаковые актуальные данные.
✅ Если один узел получает запись, все узлы должны отразить это изменение до выполнения операции чтения.

🔹 Пример:

Пользователь обновляет свою фотографию профиля.
Все узлы должны немедленно вернуть новую фотографию при запросе.

🚨 Проблема: Это может замедлить систему из-за необходимости синхронизации.

2️⃣ Доступность (A)
✅ Каждый запрос получает ответ, даже если данные устарели.
✅ Система всегда работает, но данные могут не быть на 100% синхронизированы.

🔹 Пример:

Корзина покупок доступна, даже если один из узлов базы данных не работает.
Некоторые последние транзакции могут быть пропущены, но сервис доступен.

🚨 Проблема: Клиенты могут получать устаревшие данные.

3️⃣ Устойчивость к разделению (P)
✅ Система продолжает работать несмотря на сбои в сети.
✅ Даже если некоторые узлы базы данных не могут обмениваться данными, система остается работоспособной.

🔹 Пример:

Глобальное приложение (например, Netflix, Amazon) работает на нескольких дата-центрах.
Если один регион теряет связь, приложение продолжает обслуживать пользователей из других регионов.

🚨 Проблема: Необходимо выбирать между консистентностью и доступностью.


3. Как теорема CAP применяется к базам данных

Тип базы данныхВыбор CAPПримеры
CP (Консистентность + Устойчивость к разделению)Обеспечивает консистентность данных, даже если узлы выходят из строя, но может жертвовать доступностью.Bigtable, HBase, MongoDB (режим сильной консистентности), Google Spanner
AP (Доступность + Устойчивость к разделению)Всегда отвечает, даже с устаревшими данными, но жертвует консистентностью.Cassandra, DynamoDB, CouchDB, Riak
CA (Консистентность + Доступность)Работает только в базах данных с одним узлом (не распределенные).Традиционные SQL базы данных (PostgreSQL, MySQL, Oracle в автономном режиме)

4. Теорема CAP в реальных системах

СценарийЧто важнее?Выбор CAP
Банковская системаТранзакции должны всегда быть правильнымиCP (Сильная консистентность)
Лента социальных сетейНичего страшного, если пользователи увидят слегка устаревшие постыAP (Высокая доступность)
Инвентаризация в электронной коммерцииКонсистентность важна, но доступность имеет приоритетAP (Высокая доступность, Ожидаемая консистентность)

5. Компромиссы теоремы CAP

💡 В распределенной системе вам нужно выбрать:

  • CP (Консистентность + Устойчивость к разделению) → Сильная целостность данных, но может замедлить доступность.
  • AP (Доступность + Устойчивость к разделению) → Быстрый отклик, но может вернуть устаревшие данные.
  • CA невозможен в распределенных системах, потому что сети могут выйти из строя в любой момент.

6. Заключительные выводы

✅ Теорема CAP применима только к распределенным базам данных.
✅ Большинство современных NoSQL баз данных жертвуют строгой консистентностью в пользу доступности и устойчивости к разделению.
✅ SQL базы данных, совместимые с ACID, обычно предпочитают CP.
✅ Базы данных, основанные на модели BASE (Ожидаемая консистентность), предпочитают AP.