Есть ли переломный момент, когда транзакция базы данных будет повреждена? - PullRequest
4 голосов
/ 08 октября 2009

Меня интересует, как транзакции базы данных "обычно" реализуются в системе баз данных, как, например, MySQL.

Если предположить, что фактическая запись данных в физическое хранилище базы данных не является атомарной операцией (если говорить в терминах часовых циклов), я не смогу повредить транзакцию, например, разорвав кабель питания в каком-то тщательно выбранном момент?

Ответы [ 3 ]

6 голосов
/ 08 октября 2009

Если система базы данных написана тщательно, не должно быть момента времени, когда отключение питания может повредить данные, а когда происходит отключение питания, никакие зафиксированные данные никогда не должны быть потеряны.

rdbms сначала записывает данные в журнал транзакций, а затем обновляет данные. После сбоя он воспроизводит журнал, копируя все ожидающие изменения из журнала в базу данных и откатывая все транзакции, которые не были завершены в журнале. Об успешной фиксации сообщается только после того, как жесткий диск сообщил о завершении операции записи в журнал.

2 голосов
/ 08 октября 2009

Базы данных соответствуют свойствам ACID . Неважно, когда что-то взрывается, есть способ, по крайней мере, вернуться к известному правильному состоянию.

1 голос
/ 08 октября 2009

Обычно при обновлении БД записывает в журналы. Затем он может сказать, что ему не удалось завершить свою работу как одну транзакцию, и использовать журналы для откатки изменений.

...