2011-01-18 3 views
2

Почему откаты так важны?Зачем нужны откаты?

Следует ли исключать из-за несогласованности данных (например, данных в SQL DB)?

Если да, то как получается, что данные «хранилище» (SQL DB или что-то еще) сделали возможным в первую очередь стать в коррумпированном состоянии?

Существуют ли механизмы хранения данных, которые не нуждаются в «откатах»?

+0

Обратите внимание, что это определенно не домашнее задание ... – Gugussee

ответ

3

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

Простой пример. Предположим, вам нужно вставить оба данных заголовка заказа в таблицу заказов и строки заказа в таблицу строк. Вы вставляете заголовок заказа, читаете идентификатор, начинаете вставлять строки заказа, но эта вторая вставка не работает по какой-либо причине. Только надежный способ восстановления из этой ситуации - откат первой вставки - либо явно (когда ваше соединение с db является живым), либо неявно (когда ссылка ушла вниз).

4

Откат важны в случае возникновения каких-либо ошибок во время работы базы данных. Они могут действительно сэкономить день в случае сбоев сервера базы данных или критическое исключение брошено в приложение, которое изменяет содержимое БД. Когда выполняется значительная операция БД (т. Е. Обновления, вставки и т. Д.), И процесс прерывается посередине, было бы очень сложно отслеживать, какие операции были успешными, а использование БД впоследствии было бы очень сложным.

Сам «магазин» обычно не имеет встроенного механизма управления консистенцией - именно поэтому мы используем откаты и транзакции. Это можно воспринимать как своего рода механизм «резервного копирования».

+0

+1, спасибо ... Но как получается, что при выполнении значительных операций с БД сама БД не более надежна? Разве не странно, что значительная операция может потерпеть неудачу, а затем оставить БД в противоречивом состоянии? (Я имею в виду, что я знаю, как работают SQL DB, но разве это не очень плохая особенность SQL-баз данных?) – Gugussee

+1

@Gugussee: это не всегда ошибка БД - конечно, иногда бывает так, что крысы будут есть сетевые кабели и отключите БД в середине мировой экономии обработки данных, но нередко бывает, что БД управляется внешними приложениями, которые выполняют последовательные операции БД. Эти приложения могут быть неисправными, что приводит к некоторым ошибкам во время выполнения и, таким образом, не может выполнить логический набор операций. DB просто не может быть «мудрым», чтобы знать, что такое приложение, и вернуться к состоянию до изменений. – acalypso

+1

Как я уже сказал в своем ответе - большинство проблем с согласованностью связаны с несколькими операциями таблицы, где на бизнес-уровне требуется согласованность. Сама ББ не (и не может) заботиться о логической последовательности логических данных - она ​​может отслеживать только техническую целостность отношений. – Arvo

Смежные вопросы