Как работают транзакции ACID и базы данных?

161

Какова связь между ACID и транзакцией базы данных?

ACID дает транзакцию базы данных или это то же самое?

Может ли кто-нибудь просветить эту тему.

never_had_a_name
источник

Ответы:

320

ACID - это набор свойств, которые вы хотели бы применить при изменении базы данных.

  • валентность
  • консистенция
  • Изоляция
  • долговечность

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

Атомарность означает, что вы можете гарантировать, что вся транзакция произойдет, или ничего не произойдет; Вы можете выполнять сложные операции как единое целое, все или ничего, а сбой, сбой питания, ошибка или что-либо еще не позволит вам находиться в состоянии, в котором произошли только некоторые связанные изменения.

Согласованность означает, что вы гарантируете, что ваши данные будут согласованы; ни одно из ограничений, связанных с данными, не будет нарушено.

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

Долговечность означает, что после завершения транзакции гарантируется, что все изменения были записаны на надежный носитель (например, на жесткий диск), и тот же факт, что транзакция была завершена, также записывается.

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

Брайан Кэмпбелл
источник
6
Вы говорите: «Согласованность означает, что вы гарантируете, что ваши данные будут непротиворечивыми; ни одно из ваших ограничений на связанные данные никогда не будет нарушено». Если под ограничениями вы имеете в виду те, которые определены в базе данных (например, проверочные ограничения), какое отношение управление транзакциями имеет к предотвращению их нарушения? Разве они не всегда в силе? Мне кажется, что C в ACID должен иметь другое значение.
Марк Рочкинд,
20
@MarcRochkind Транзакция позволяет применять проверки согласованности, даже если отдельные операции внутри транзакции нарушают ограничения согласованности. Например, если вы обновляете систему бухгалтерского учета с двумя записями, вам может потребоваться списать средства с нескольких учетных записей и одновременно зачислить на несколько учетных записей. Без транзакций вы будете проверять ограничения после каждого оператора и потерпите неудачу, потому что отдельные операторы не сохраняют согласованность. С транзакциями, хотя отдельные операторы не сохраняют согласованность, транзакция в целом делает.
Брайан Кэмпбелл
1
« и если кому-то нужно прочитать данные, которые записаны другим, ему придется подождать, пока другой не закончится » - не совсем так. Первая транзакция может (и будет) читать эти данные и будет видеть состояние, которое было до начала второй транзакции.
a_horse_with_no_name
1
@BrianCampbell 1) Согласованность - это и «проверочные ограничения», такие как UNIQUE, FOREIGN KEY, а также действительное состояние (в соответствии с бизнес-логикой / требованиями приложения) в конце транзакции? 2) Разве атомарность и / или изоляция не обеспечивают согласованность? Должны ли мы упомянуть непротиворечивость как обязательное свойство?
user104309
1
@a_horse_with_no_name вы говорите о OCC (оптимистическое управление параллелизмом) v / s PCC (пессимистично). Оба могут быть реализованы в ACID-совместимой системе баз данных, в зависимости от того, хотите ли вы согласованности или высокой доступности.
Сиддхартха
37

ACID - это желательные свойства любого механизма обработки транзакций.

СУБД - это (если это хорошо) особый вид механизма обработки транзакций, который раскрывает, как правило, в очень большой степени, но не совсем, эти свойства.

Но существуют другие двигатели, которые также могут выставлять эти свойства. Тип программного обеспечения, который раньше назывался TP-мониторами, является наглядным примером (в настоящее время его эквивалентом являются в основном веб-серверы).

Такие мониторы TP могут получать доступ к ресурсам, отличным от СУБД (например, к принтеру), и при этом гарантировать ACID своим пользователям. В качестве примера того, что может означать ACID, когда принтер участвует в транзакции:

  • Атомность: печатается весь документ или вообще ничего
  • Согласованность: в конце транзакции подача бумаги располагается в верхней части страницы.
  • Изоляция: никакие два документа не смешиваются при печати
  • Долговечность: принтер может гарантировать, что он не «печатал» с пустыми картриджами.
Эрвин Смут
источник
3
отличные лаконичные примеры принтеров.
Озеро
2
Хороший пример. Я не понимаю, что такое «последовательность». На мой взгляд, лучшим примером является «Принтер не принимает бумагу размером более 10 дюймов».
skeller88
РЕДАКТИРОВАТЬ - «бумага шире, чем 10 дюймов».
skeller88
1
Я признаю, что это немного натянуто. Но трудно найти лучшие примеры, потому что «согласованность» касается данных, а принтер - это не совсем устройство данных.
Эрвин Смут
1
Что ж, тогда у принтера есть средство, которое не позволяет ему начать печать, если количество страниц документа превышает число листов, которое в настоящее время известно для подачи бумаги. Вы видите, что это проблема со многими людьми, которые комментируют здесь. Вы упоминаете «принтер», и они видят только то тупое устройство последовательной потоковой передачи, которое у них есть на домашнем столе, а не высококачественное профессиональное устройство, которое заполняло бы всю их гостиную (и которое часто имеет такие функции, о которых я упоминал).
Эрвин Смут
21

Я немного изменил пример принтера, чтобы сделать его более понятным

1 документ, содержащий 2 страницы, был отправлен на принтер

Транзакция - документ отправлен на принтер

  • атомарность - принтер печатает 2 страницы документа или ничего
  • согласованность - принтер печатает половину страницы, и страница застревает. Принтер перезагружается и печатает 2 страницы со всем содержимым
  • Изоляция - в то время как выполнялось слишком много распечаток - принтер печатает правильное содержимое документа
  • долговечность - при печати произошло отключение питания - принтер снова печатает документы без ошибок

Надеюсь, что это поможет кому-то понять концепцию ACID

Маниш Сингх
источник
Я не уверен, что означает «хотя было слишком много распечаток в процессе» - это просто «несколько», а не «слишком много»?
icc97
17

Какова связь между ACID и транзакцией базы данных?

В реляционной базе данных каждый оператор SQL должен выполняться в рамках транзакции.

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

Неявная транзакция начинается до выполнения инструкции и заканчивается (фиксация или откат) после выполнения инструкции. Режим неявных транзакций обычно называется автокоммитом.

Как объясняется в этой статье , транзакция представляет собой набор операций чтения / записи, выполняющихся успешно, только если все содержащиеся в них операции выполняются успешно.

валентность

По своей сути транзакция характеризуется четырьмя свойствами (обычно называемыми ACID):

  • валентность
  • консистенция
  • Изоляция
  • долговечность

ACID дает транзакцию базы данных или это то же самое?

Для системы реляционных баз данных это верно, потому что стандарт SQL указывает, что транзакция должна обеспечивать гарантии ACID:

валентность

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

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

консистенция

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

Изоляция

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

долговечность

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

введите описание изображения здесь

Чтобы узнать больше о долговечности и журнале повторов, ознакомьтесь с этой статьей .

Влад Михалча
источник
Для «согласованности» - я вижу «специфическую логическую корректность приложения» как объяснение во многих местах. Предположим, что в этом случае DB не может знать логику приложения. Таким образом, «согласованность» не может быть неотъемлемым свойством БД. Так что для того, чтобы приложение реализовало свою корректность (или «согласованность»), недостаточно атомарности и изоляции?
user104309
1
Согласованность в ACID означает ограничения целостности базы данных: ограничения PK, FK, UNIQUE. ACID важен, но вашему приложению может потребоваться нечто большее, например, предотвращение потерянных обновлений в длинных разговорах, что требует оптимистической блокировки на уровне приложения.
Влад Михалча
Дай взглянуть. Но перед этим мне нужно базовое разъяснение. Комментарий Мозга Кэмпбелла в принятом ответе: «С транзакциями, хотя отдельные утверждения не сохраняют последовательность, транзакция в целом делает». Как это возможно ? И как несколько дебетов и кредитов связаны с согласованностью?
user104309
Посмотрите главу «Транзакции» в моей книге «Постоянство в Java», чтобы получить подробный ответ на все эти вопросы.
Влад Михалча
12

Свойства ACID - очень старая и важная концепция теории баз данных. Я знаю, что вы можете найти много постов на эту тему, но все же я хотел бы начать делиться ответом по этому вопросу, потому что это очень важная тема СУРБД.

Система баз данных играет с множеством различных типов транзакций, где все транзакции имеют определенные характеристики. Эта характеристика известна как свойства ACID. ACID Properties принимает все транзакции базы данных для выполнения всех задач.

Атомность: либо совершить все или ничего.

Согласованность: создание согласованной записи с точки зрения проверки всех правил и ограничений транзакции.

Изоляция: убедитесь, что две транзакции не знают друг друга.

Долговечность: надежные данные хранятся вечно. Ссылка взята из этой статьи:

Anvesh
источник
5

Цитировать Википедию :

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

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

Будет ли
источник
3

[Gray] представил свойства ACD для транзакции в 1981 году. В 1983 году [Haerder] добавил свойство Isolation. По моему мнению, свойства ACD будут иметь более полезный набор свойств для обсуждения. Одна интерпретация атомарности (что транзакция должна быть атомарной, как видно из любого клиента в любое время) фактически подразумевает свойство изоляции. Свойство «изоляция» полезно, когда транзакция не изолирована; когда свойство изоляции ослаблено. В ANSI SQL говорят: если уровень изоляции слабее, то SERIALIZABLE. Но когда уровень изоляции SERIALIZABLE, свойство изоляции на самом деле не представляет интереса.

Я написал больше об этом в сообщении в блоге: «КИСЛОТА не имеет смысла».

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

[Грей] Концепция транзакции, Джим Грей, 1981. http://research.microsoft.com/en-us/um/people/gray/papers/theTransactionConcept.pdf

[Хаердер] Принципы транзакционно-ориентированного восстановления баз данных, Хаердер и Рейтер, 1983. http://www.stanford.edu/class/cs340v/papers/recovery.pdf

Франс Лундберг
источник
1

Транзакция может быть определена как набор задач, которые рассматриваются как минимальная единица обработки. Каждый минимальный блок обработки не может быть разделен дальше.

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

  • Атомность:
  • консистенция
  • Изоляция
  • долговечность
rashedcs
источник