Меня не устраивают свойства ACID транзакции.
Насколько я понимаю:
транзакция ДОЛЖНА соответствовать требованиям ACID. Именно ACID гарантирует, что серия операторов действительно является транзакцией. Пока все в порядке.
Теперь существуют различные уровни изоляции (я опускаю READ-UNCOMMITED, так как это вообще нетранзакционный режим): READ-COMMITED, READ-REPEATABLE и SERIALIZABLE
Каждый из этих уровней предлагает разные уровни изоляции. степени изоляции, в моем понимании также согласованности.
Итак, я не могу понять следующее:
Если различные уровни изоляции предлагают разные уровни предварительных свойств ACID, как они могут быть допустимыми/приемлемыми уровнями изоляции ?
Или определение SQL того, что такое транзакция, настолько расслабленное/неформальное/нестрогое, что возникли эти различия? Я не смог найти ни одного стандартного документа SQL, чтобы прочитать и посмотреть, каково фактическое определение.
Если свойства ACID четко определены, почему мы принимаем/принимаем разные уровни транзакций?
Ответы (3)
КИСЛОТА отличная, КИСЛОТА желательна, КИСЛОТА потрясающая.
Но ACID стандартный. Стандартное существование не делает автоматически всех игроков-исполнителей приверженцами.
РСУБД является ACID-совместимой, если она каким-либо образом обеспечивает поведение ACID. Не каждая СУБД совместима с ACID (MySQL НЕ была до недавнего времени).
ACID — это идеальный мир. Уровни изоляции — это реальный мир.
почему мы принимаем/принимаем разные уровни транзакций?
Теоретически каждая транзакция должна выполняться изолированно (для достижения свойств I ACID), но на практике это не имеет особого смысла. Все дело в производительности. Таким образом, база данных приложения с высокой степенью параллелизма не могла работать должным образом.
Идея состоит в том, чтобы достичь баланса между изоляцией и производительностью. При снижении уровня изоляции (например, COMMITTED READ, который обычно является уровнем изоляции по умолчанию) могут возникнуть некоторые проблемы: потерянные обновления, неповторяющееся чтение, фантомное чтение. Обычно этот риск приемлем и его также можно контролировать, повышая уровень изоляции только на определенных транзакциях.
Я также нахожу свойства ACID сбивающими с толку. На мой взгляд, свойства не определены. Свойство изоляции, кажется, было добавлено, чтобы описать расслабление от свойства атомарности. Для "реальной" транзакции (уровень изоляции SERIALIZABLE) интерес представляют только свойства ACD. Эти три свойства были первоначально предложены Греем.
Подробнее об этом читайте в моем блоге «ACID не имеет смысла».
http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html