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

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

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

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

11 ответов

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

валентность

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

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

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

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

валентность

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

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

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

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

изоляция

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Свойства ACID в базах данных:

  • Атомарность : транзакции — все или ничего
  • Непротиворечивость : сохраняются только действительные данные (база данных из одного состояния, которое соответствует другому состоянию, которое также является согласованным).
  • Изоляция : транзакции не влияют друг на друга (одновременно в системе может выполняться несколько транзакций. Параллельное выполнение нескольких транзакций должно иметь те же результаты, что и их последовательное выполнение).
  • Долговечность : записанные данные не будут потеряны (даже в случае немедленного сбоя базы данных или в случае потери питания)
    .

[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

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам