Ответ
Durability (Долговечность) — это свойство транзакций в ACID, которое гарантирует, что после успешного завершения транзакции (COMMIT) все внесенные ею изменения становятся постоянными и сохраняются в базе данных даже в случае последующих сбоев (отключение питания, авария сервера, крах системы).
Как обеспечивается:
- Журналирование с опережающей записью (Write-Ahead Logging, WAL): Все изменения сначала записываются в устойчивый журнал транзакций (redo-log) на диск, и только затем применяются к основным файлам данных. При сбое система может восстановить состояние, "проиграв" журнал.
- Синхронная запись: СУБД может ожидать подтверждения от диска о физической записи журнала перед отправкой подтверждения пользователю.
Пример на SQL:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE user_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE user_id = 2;
COMMIT; -- В этот момент изменения гарантированно становятся долговечными
Практические следствия и компромиссы:
- Надежность vs. Производительность: Строгое обеспечение долговечности через синхронную запись на диск может замедлить работу. Некоторые СУБД позволяют ослабить эту гарантию для повышения производительности (например,
SET synchronous_commit = OFFв PostgreSQL). - В распределенных системах: Требует дополнительных механизмов, таких как репликация данных на несколько узлов или использование распределенного консенсуса (например, протокол Raft).
Итог: Durability — это обещание СУБД, что подтвержденные данные не будут потеряны.