--- aliases: - транзакция - транзакции tags: - зрелость/🌱 date: - - 2024-05-28 zero-link: - "[[00 Базы Данных]]" parents: linked: --- Транзакция - способ группировки приложением нескольких операций в одну логическую единицу, которая либо выполняется вся, либо не выполняется вовсе (прерывание и откат). Для реализации обычно используется [Журнал БД](Журнал%20БД.md). Обычно у транзакции есть идентификатор. Обычно работает с использованием [блокировок](Блокировки.md). **Почему не используют транзакции:** - Снижение скорости работы приложения - Риски [Deadlock](Deadlock.md) - Нет поддержки на уровне СУБД - Не знают механизм / не понимают принципы работы **Как происходит commit транзакции:** - Подготовка транзакции в движке БД - Запись транзакции в лог - Завершение транзакции в движке БД - Возврат результата клиенту **Свойства транзакций БД:** ![Свойства транзакции БД (ACID)](Свойства%20транзакции%20БД%20(ACID).md) **Проблемы при параллельном выполнении нескольких транзакций:** ![Проблемы при параллельном выполнении нескольких транзакций](Проблемы%20при%20параллельном%20выполнении%20нескольких%20транзакций.md) **Уровни изоляций транзакций БД:** ![Уровни изоляций транзакций БД](Уровни%20изоляций%20транзакций%20БД.md) Дополнительные советы: - Разделить потоки чтения и записи: [CQRS](CQRS.md) - ## Дополнительные материалы - [Транзакции. Восстановление. Классический алгоритм — Викиконспекты](https://neerc.ifmo.ru/wiki/index.php?title=%D0%A2%D1%80%D0%B0%D0%BD%D0%B7%D0%B0%D0%BA%D1%86%D0%B8%D0%B8._%D0%92%D0%BE%D1%81%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5._%D0%9A%D0%BB%D0%B0%D1%81%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC)