TGViewer
Системный Аналитик Системный Аналитик @sys_sa · 19.1K subscribers
Post #435 15.3K
🛡 Изолированность транзакций в БД: MVCC, блокировки

Изолированность транзакций в БД гарантирует, что параллельные транзакции не влияют друг на друга. Предотвращает видимость промежуточных результатов транзакции для других до её завершения, сохраняя целостность данных
Это одно из свойств ACID

Как обеспечить изолированность

🟣 MVCC (multiversion concurrency control) — создание отдельной версии данных для каждой транзакции
🟠 Блокировка — ограничение доступа к данным


MVCC

Принцип работы


Во время транзакции создается копия данных, в которой происходят изменения
➖Если транзакция завершилась успешно, копия становится основным источником, старая версия — удаляется
➖Если во время транзакции произошла ошибка, старая версия остается основной, а копия удаляется

Пример

Два пользователя одновременно меняют карточку товара
⚪️ Они открывают карточку товара, создается две копии записи о товаре
⚪️ Одновременно меняют поля товара. Обе копии могут стать основной записью
⚪️ Перед сохранением БД пытается слить две записи в одну
▫️ Если конфликтов нет (менялись разные поля), транзакции завершаются успешно
▫️ Если появились конфликты, обе транзакции откатываются


Блокировки

Примеры видов блокировок


*️⃣ Централизованная
*️⃣ Распределенная
*️⃣ Независимая


😀 Централизованная
Приложение-координатор дает доступ к БД или отклоняет запрос, если БД занята.

Алгоритмы выбора координатора

⏩ Забияка
🟡 рассылается сообщение о выборе координатора
🟡 отвечают все неупавшие приложения
🟡 инициатор выбирает приложение с наибольшим ID

⏩ Выбор в кольце
🟡процессы образуют кольцо, передавая сообщение о выборе координатора, пропуская неотвечающие узлы
🟡по завершению инициатору приходит список "живых" приложений
🟡инициатор выбирает приложение с наибольшим ID

📍Проблемы: координатор становится бутылочным горлышком системы, может ограничивать производительность


😀 Распределенная
Каждый процесс отправляет запросы на доступ к ресурсу всем другим (и себе)

Действия получателя:
🟠ОК: если другое приложение не имеет доступа и не запрашивает его
🟠В очередь: если получатель уже использует ресурс
🟠Сравнение времени: если получатель планирует использовать ресурс, он
сравнивает время запроса со времени своего запроса
— ОК: если у входящего сообщения время меньше
— В очередь: если время больше
После отправки запросов приложение останавливается, ждет подтверждения от остальных.
Далее отправляет OK всем в своей очереди и чистит ее

📍Проблемы: при сбое одного из процессов могут возникнуть задержки, блокирующие
доступ к ресурсу

😀  Независимая
Минимизация блокировок за счет работы с копиями данных.

*️⃣Каждая транзакция работает изолированно со своей копией данных
*️⃣Перед фиксацией изменений, проводится проверка на наличие конфликтов.
  — если не обнаружено, изменения транзакции применяются к основной БД
  — если обнаружено (например, другой транзакцией изменены те же данные), текущая транзакция откатывается и, возможно, повторяется

📍Проблемы: частые откаты при высокой конкуренции, сложность управления копиями данных


Пример блокировки в БД


Две транзакции (T1 и T2) работают с таблицей accounts (информация о балансах пользователей)

🟡T1: Начинает транзакцию, читает баланс аккаунта
🟡T1: Запрашивает блокировку на аккаунт для обновления баланса
🟡T2: Начинает транзакцию и пытается прочитать баланс аккаунта
⏩ Блокировка: т.к.T1 удерживает блокировку, T2 ждет, пока T1 завершит свою транзакцию
🟡T1: обновляет баланс и фиксирует транзакцию, освобождая блокировку
🟡T2: читает обновленный баланс


Что выбрать для обеспечения изолированности?

🟣 MVCC
    ▫️если важен параллельный доступ
    ▫️скорость обработки транзакции
    ▫️когда важно, чтобы чтения не блокировали записи
🟠Блокировки
    🟡если нельзя допустить любую рассогласованность данных
    🟡важна строгая последовательность данных
    🟡недостаточно памяти для хранения копий


#бд
  • 🔥 18
  • ❤ 9
  • 👍 9
  • ⚡ 4
More from @sys_sa
  1. Sep 28, 2026🔼AMQP, MQTT и STOMP: протоколы обмена сообщениями AMQP, MQTT и STOMP — независимые проток…
  2. Sep 26, 2026Как облегчить работу ИТ-аналитика уже сейчас — без долгосрочных перестроек процессов? Обсу…
  3. Aug 28, 2026❓ ICAM (Incident Cause Analysis Method) ICAM (Incident Cause Analysis Method) — метод разб…
  4. Aug 19, 2026🖥 NewSQL NewSQL — класс реляционных СУБД, который совмещает привычный SQL и строгие ACID…
  5. Jul 14, 2026🔼 Server Driven UI (SDUI) Server Driven UI (SDUI) — архитектурный подход, при котором сер…
  6. Jul 7, 2026📊 Сравнение Баз данных и Хранилищ данных ▫️База данных – оперативное хранилище, где содер…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →