Какова связь между ACID и транзакцией базы данных?
Предоставляет ли ACID транзакцию базы данных или это одно и то же?
Может кто-нибудь просветить эту тему.
Какова связь между ACID и транзакцией базы данных?
Предоставляет ли ACID транзакцию базы данных или это одно и то же?
Может кто-нибудь просветить эту тему.
ACID - это набор свойств, которые вы хотели бы применить при изменении базы данных.
Сделка представляет собой набор связанных изменений, который используется для достижения некоторых свойств ACID. Транзакции - это инструменты для достижения свойств ACID.
Атоматичность означает, что вы можете гарантировать, что все транзакции произойдут, или ни одна из них не сделает; вы можете выполнять сложные операции как единое целое, все или ничего, а также сбой, сбой питания, ошибка или что-то еще не позволит вам находиться в состоянии, в котором произошли только некоторые из связанных изменений.
Согласованность означает, что вы гарантируете, что ваши данные будут согласованы; ни одно из ограничений, которое у вас есть на связанных данных, никогда не будет нарушено.
Изоляция означает, что одна транзакция не может читать данные из другой транзакции, которая еще не завершена. Если одновременно выполняются две транзакции, каждый видит мир, как если бы они выполнялись последовательно, и если нужно читать данные, написанные другим, ему придется подождать, пока другой не будет завершен.
Долговечность означает, что после завершения транзакции гарантируется, что все изменения были записаны на долговечный носитель (например, жесткий диск), а также тот факт, что транзакция завершена, также записана.
Таким образом, транзакции являются механизмом гарантирования этих свойств; они представляют собой способ группировки связанных действий вместе, так что в целом группа операций может быть атомарной, давать согласованные результаты, быть изолированными от других операций и записываться долговременно.
ACID являются желательными свойствами любого механизма обработки транзакций.
СУБД (если она хороша) - это особый вид механизма обработки транзакций, который предоставляет, как правило, в очень большой степени, но не совсем полностью эти свойства.
Но существуют и другие механизмы, которые также могут выставлять эти свойства. Типом программного обеспечения, которое раньше называлось "мониторами TP", является примером (в настоящее время это эквивалент в основном веб-серверов).
Такие мониторы TP могут обращаться к ресурсам, отличным от СУБД (например, к принтеру), и все же гарантировать ACID для своих пользователей. В качестве примера того, что может означать ACID, когда принтер участвует в транзакции:
Я немного изменил пример принтера, чтобы сделать его более понятным
1 документ, содержащий 2 страницы, был отправлен на принтер
Транзакция - документ отправлен на принтер
Надеюсь, что это поможет кому-то понять концепцию ACID
Свойства ACID - очень старая и важная концепция теории баз данных. Я знаю, что вы можете найти много сообщений на эту тему, но все же я хотел бы начать делиться ответом по этому вопросу, потому что это очень важная тема СУРБД.
Система баз данных играет с множеством различных типов транзакций, где все транзакции имеют определенные характеристики. Эта характеристика известна как свойства ACID. ACID Properties принимает все транзакции базы данных для выполнения всех задач.
Атомность: либо совершить все или ничего.
Согласованность: создание согласованной записи с точки зрения проверки всех правил и ограничений транзакции.
Изоляция: убедитесь, что две транзакции не знают друг друга.
Долговечность: надежные данные хранятся вечно. Ссылка взята из этой статьи:
Чтобы процитировать Wikipedia:
ACID (атомарность, согласованность, изоляция, долговечность) представляет собой набор свойств, гарантирующих надежную обработку транзакций базы данных.
СУБД, поддерживающая транзакции, будет стремиться поддерживать все эти свойства - любая коммерческая СУБД (а также несколько СУБД с открытым исходным кодом) обеспечивают полную поддержку ACID, - хотя это часто возможно (например, с различными уровнями изоляции в MSSQL), чтобы уменьшить ACIDness - таким образом теряя гарантию полностью транзакционного поведения.
Какова связь между ACID и транзакцией базы данных?
В реляционной базе данных каждый оператор SQL должен выполняться в рамках транзакции.
Без явного определения границ транзакции база данных будет использовать неявную транзакцию, которая обернута вокруг каждого отдельного оператора.
Неявная транзакция начинается до выполнения инструкции и заканчивается (фиксация или откат) после выполнения инструкции. Режим неявных транзакций обычно называется автокоммитом.
Как объясняется в этой статье, транзакция представляет собой набор операций чтения/записи, выполняющихся успешно только в том случае, если все содержащиеся в них операции выполняются успешно.
По своей сути транзакция характеризуется четырьмя свойствами (обычно называемыми ACID):
ACID дает транзакцию базы данных или это то же самое?
Для системы реляционных баз данных это действительно так, поскольку стандарт SQL указывает, что транзакция должна обеспечивать гарантии ACID:
Атомарность берет на себя отдельные операции и превращает их в единицу работы "все или ничего", преуспевая тогда и только тогда, когда все содержащиеся в ней операции завершаются успешно.
Транзакция может инкапсулировать изменение состояния (если только оно не доступно только для чтения). Транзакция должна всегда оставлять систему в согласованном состоянии, независимо от того, сколько параллельных транзакций чередуется в любой момент времени.
Согласованность означает, что ограничения применяются для каждой совершенной транзакции. Это означает, что все ключи, типы данных, проверки и триггеры успешны, и нарушение ограничений не инициируется.
Транзакции требуют механизмов контроля параллелизма, и они гарантируют корректность даже при перемежении. Изоляция дает нам возможность скрывать незавершенные изменения состояния от внешнего мира, поскольку неудачные транзакции никогда не должны портить состояние системы. Изоляция достигается за счет управления параллелизмом с использованием пессимистических или оптимистических механизмов блокировки.
Успешная транзакция должна навсегда изменить состояние системы, и до ее завершения изменения состояния записываются в постоянный журнал транзакций. Если на нашу систему неожиданно повлиял сбой или отключение питания, то все незаконченные совершенные транзакции могут быть воспроизведены.
Чтобы узнать больше о долговечности и журнале повторов, ознакомьтесь с этой статьей.
[Серый] представил свойства ACD для транзакции в 1981 году. В 1983 году [Haerder] добавил свойство Isolation. На мой взгляд, свойства ACD будут иметь более полезный набор свойств для обсуждения. Одна интерпретация Atomicity (что транзакция должна быть атомарной, если смотреть с любого клиента в любое время) на самом деле подразумевает свойство изоляции. Свойство "изоляции" полезно, когда транзакция не изолирована; когда свойство изоляции ослаблено. В ANSI SQL говорят: если уровень изоляции слабее, то SERIALIZABLE. Но когда уровень изоляции SERIALIZABLE, свойство изоляции действительно не представляет интереса.
Я написал об этом больше в блоге: "ACID не имеет смысла".
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 относится к четырем ключевым свойствам транзакции: атомарность, согласованность, изоляция и долговечность.
Атомарность Все изменения в данных выполняются так, как если бы они были одной операцией. То есть все изменения выполняются или ни один из них не выполняется. Например, в приложении, которое переводит средства из одной учетной записи в другую, свойство атомарности гарантирует, что если дебет будет успешно выполнен с одного счета, соответствующий кредит будет передан другой учетной записи. консистенция Данные находятся в согласованном состоянии, когда начинается транзакция и когда она заканчивается. Например, в приложении, которое переводит средства из одной учетной записи в другую, свойство согласованности гарантирует, что общая стоимость средств на обоих счетах одинакова в начале и в конце каждой транзакции. изоляция Промежуточное состояние транзакции невидимо для других транзакций. В результате транзакции, которые запускаются параллельно, кажутся сериализованными. Например, в приложении, которое переводит средства с одной учетной записи на другую, свойство изоляции гарантирует, что другая транзакция увидит переведенные средства на одном счете или другом, но не в том и в другом, ни в другом. долговечность После успешного завершения транзакции изменения данных сохраняются и не отменены даже в случае сбоя системы. Например, в приложении, которое переводит средства из одной учетной записи в другую, свойство долговечности гарантирует, что изменения, внесенные в каждую учетную запись, не будут отменены.
Транзакция может быть определена как совокупность задач, которые считаются минимальной единицей обработки. Каждый минимальный процессор не может быть разделен дальше.
Вся транзакция должна содержать четыре свойства, которые обычно известны как свойства ACID. i) ACID - это группа свойств любой транзакции.