Если свойства ACID четко определены, почему мы принимаем/принимаем разные уровни транзакций?

Меня не устраивают свойства ACID транзакции.
Насколько я понимаю:
транзакция ДОЛЖНА соответствовать требованиям ACID. Именно ACID гарантирует, что серия операторов действительно является транзакцией. Пока все в порядке.
Теперь существуют различные уровни изоляции (я опускаю READ-UNCOMMITED, так как это вообще нетранзакционный режим): READ-COMMITED, READ-REPEATABLE и SERIALIZABLE
Каждый из этих уровней предлагает разные уровни изоляции. степени изоляции, в моем понимании также согласованности.
Итак, я не могу понять следующее:
Если различные уровни изоляции предлагают разные уровни предварительных свойств ACID, как они могут быть допустимыми/приемлемыми уровнями изоляции ?
Или определение SQL того, что такое транзакция, настолько расслабленное/неформальное/нестрогое, что возникли эти различия? Я не смог найти ни одного стандартного документа SQL, чтобы прочитать и посмотреть, каково фактическое определение.


person Jim    schedule 14.10.2013    source источник


Ответы (3)


КИСЛОТА отличная, КИСЛОТА желательна, КИСЛОТА потрясающая.

Но ACID стандартный. Стандартное существование не делает автоматически всех игроков-исполнителей приверженцами.

РСУБД является ACID-совместимой, если она каким-либо образом обеспечивает поведение ACID. Не каждая СУБД совместима с ACID (MySQL НЕ была до недавнего времени).

ACID — это идеальный мир. Уровни изоляции — это реальный мир.

person Adriano Carneiro    schedule 14.10.2013
comment
Если это стандарт, то как допустимы различные степени реализации? Является ли это свободным стандартом? Где эти определения? - person Jim; 15.10.2013
comment
@Jim Забудь о контексте на минуту. Если, скажем, мое программное обеспечение поддерживает стандарт ABC, значит ли это, что оно работает ТОЛЬКО в соответствии со стандартными потоками и определениями ABC? - person Adriano Carneiro; 15.10.2013
comment
Но он должен придерживаться всего, что определено с помощью MUST, по крайней мере, правильно? То же, что и RFC, я полагаю. - person Jim; 15.10.2013

почему мы принимаем/принимаем разные уровни транзакций?

Теоретически каждая транзакция должна выполняться изолированно (для достижения свойств I ACID), но на практике это не имеет особого смысла. Все дело в производительности. Таким образом, база данных приложения с высокой степенью параллелизма не могла работать должным образом.

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

person Gabriel Aramburu    schedule 15.10.2013

Я также нахожу свойства ACID сбивающими с толку. На мой взгляд, свойства не определены. Свойство изоляции, кажется, было добавлено, чтобы описать расслабление от свойства атомарности. Для "реальной" транзакции (уровень изоляции SERIALIZABLE) интерес представляют только свойства ACD. Эти три свойства были первоначально предложены Греем.

Подробнее об этом читайте в моем блоге «ACID не имеет смысла».

http://blog.franslundberg.com/2013/12/acid-does-not-make-sense.html

person Frans Lundberg    schedule 13.12.2013
comment
Атомарность связана со всеми записями транзакции, которые становятся видимыми атомарно или вообще не видны. Изоляция связана с тем, что чтения транзакции не видят записей других транзакций, даже если эти другие транзакции зафиксированы. Сериализуемые транзакции должны демонстрировать поведение, совместимое с некоторым выполнением по одной за раз. Вполне возможно, что транзакции будут совершаться атомарно и при этом нарушать это. В узком случае строгой двухфазной блокировки (S2PL) вы, вероятно, правы в том, что изоляция в ACID является избыточной, но нет, если вы посмотрите на другие методы. - person kgrittn; 22.01.2014