Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как связаны транзакции и ACID
Краткий ответ
Транзакция — набор операций БД, выполняемых либо все вместе, либо ничего.
ACID — гарантии БД о выполнении транзакций:
- Atomicity (все или ничего)
- Consistency (согласованное состояние)
- Isolation (не мешают друг другу)
- Durability (на диске)
Atomicity (Атомарность)
Либо ВСЕ операции, либо НИ ОДНА:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
COMMIT; -- Если сбой — оба откатываются
Consistency (Согласованность)
БД переходит из одного согласованного состояния в другое:
CREATE TABLE accounts (
id INT PRIMARY KEY,
balance DECIMAL(10,2) CHECK (balance >= 0)
);
-- Constraint защищает целостность
Isolation (Изоляция)
Параллельные транзакции не мешают друг другу:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- Уровни: READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ, SERIALIZABLE
Durability (Долговечность)
Когда COMMIT завершился — данные на диске:
SET synchronous_commit = ON; -- Ждёт fsync (по умолчанию)
-- COMMIT не вернёт управление пока WAL не написан на диск
Практический пример
-- Платёжная система (правильно)
BEGIN TRANSACTION;
SELECT * FROM accounts WHERE id IN (1, 2) FOR UPDATE;
UPDATE accounts SET balance = balance - 100 WHERE id = 1;
UPDATE accounts SET balance = balance + 100 WHERE id = 2;
INSERT INTO transactions VALUES (1, 2, 100, SUCCESS);
COMMIT; -- Либо всё успешно, либо весь ROLLBACK
В распределённых системах (CAP Theorem)
Не можешь иметь все три:
- Consistency (согласованность)
- Availability (доступность)
- Partition tolerance (устойчивость)
PostgreSQL выбирает CP (consistency + partition tolerance).
Итог
ACID — фундамент надёжности БД. Без него деньги теряются, данные грязные, отчёты неправильные.
Похожие вопросы
- Что такое качество данных?
- Что такое Spark RDD, DataFrames и Datasets? В чём различия и когда использовать каждый?
- В чем разница micro-butching и streaming?
- Всегда ли спил на диск это плохо?
- В каком случае при наличии индекса будет фулскан
- Какие проблемы могут возникнуть при доставке данных?
- Оправдан ли подход использования ETL для загрузки большого количества объектов
- Как определить высоконагруженность системы?
- Что такое шардирование?
- В чем разница запуска PostgreSQL на IaaS и PaaS?
- Какие ключевые метрики отслеживать в интернет-магазине?
- Какие операторы Airflow использовал?
- Что такое Common Table Expressions (CTE) и когда их использовать?
- Как провести A/B-тест изменения дизайна кнопки "Купить"?
- Почему Docker, работающий на Linux, требует меньше места, чем Docker, работающий на Windows?
- Как следил за ветринами на проекте?
- Что знаешь про профилировнние?
- Что такое data mesh и data fabric? В чём различия между этими подходами?
- Какой инструмент можно использовать в Azure, чтобы поставить CRON?
- Из чего состоит Delta Format и какие преимущества он даёт?