Изменения

Перейти к: навигация, поиск
м
rollbackEdits.php mass rollback
В контексте баз данных очень часто возникает параллельное исполнение возникаеттранзакций, когда два или если в системе параллельно с одними и теми же данными работает более клиента пытаются обратиться к базе данныходного полльзователя. При Тем не менее, при такой работе мы все еще должны уметь обеспечивать все четыре свойства ACID (атомарность, согласованность, изоляцию и устойчивость). Следовательно, при проектировании СУБД необходимо учесть проблемы, которые могут возникнуть при параллельной обработке транзакций. Транзакция {{---}} это логическая единица работы, в ходе которой может выполняться некоторый набор действий с объектами базы данных.
Очевидно, самое простое==Изоляция транзакций==Свойство изолированности говорит нам о том, что можно сделать {{---}} сделать исполнение всех наших запросов полностью упорядочиваемыми. К сожалению:* в системе могут параллельно исполняться две и более транзакции; * при этом транзакция должна уметь выполняться так, у такого подхода есть большой минус {{---}} это слишком долго. Вследствие этого появились уровни изоляциикак будто она в сисетме одна;* кроме того, которые позволяют архитектору базы указатьесли мы выполнили по отдельности набор транзакций параллельно, то при каких транзакциях нам действительно нужнопопытке посмотреть на все эти транзакции в совокупности мы должны увидеть, например, полное упорядочивание, а при каких нам будет выгоднее пожертовать некоторыми гарантиями для ускорения выполнениячто их совместный результат также корректен.
==Проблемы (аномалии) при параллельной обработке транзакций==
===Косая запись===
Аномалия "косой записи" {{---}} аномалия, которая возникает при ситуации когда мы из двух разных транзакций пытаемся изменить одни и те же данные (например, ячейки А и В) так, что общий первая транзакция затронет ячейку A, а вторая {{---}} ячейку В и мы получим неконсистентный результат.
Пример возникновения аномалии:
Название этого уровня изоляции на русский язык можно перевести как слепок, что, на самом деле, приводит к тому, что если две транзакции совершаются прааллельно, то каждой из них выдают свой "слепок" базы данных в какой-то определенный момент.
После выполнения всех операций со слепком базы данных (удаление/запись/изменение/чтение) все изменения "вливаются" в основную версию базы. Транзакция будет завершена успешно, если в основной версии базы данных к моменту окончания транзакции не было изменений ни в одной из ячеек базы, измененных в ходе транзакции, не было изменений за время ее выполнения. Таким образом, если две транзакции выполняли операции над разными частями базы данных, то конфликтов у нас не возникнет и соответствующее слияние произойдет безболезненно. Если же изменялись одни и те же данные, мы можем получить аномалию "косой записи" (см. выше).
Стоит отметить, что формально такого уровня изоляции нет в стандарте языка SQL.
 
===Уровень изоляции Repeatable read===
При данном уровне изоляции выполняется гарантия, что при повторном чтении одного и того же поля записи в базе мы будем получать одни и те же значения в ходе транзакции. Исключение составляют те изменения, которые мы сами внесли в базу.
commit;
===Уровень изоляции Read uncommitted===
При таком уровне изоляции транзакций у нас вовсе отсутствуют какие-либо блокировки, следовательно мы ничего не можем гарантировать пользователю. При таком уровне изоляции пользователь увидит любые текущие данные в базе данных, в том числе, он сможет увидеть "граязные грязные данные" {{---}} то етсь есть данные, которые еще не были зафиксированы ни одной из транзакций и впоследствии могут быть вовсе откачены.
Вследствие того, что идея изменять данные в базе основываясь на еще незакомиченных данных звучит совсем безумно, стандартом SQL прописано, что транзакции, работающие на уровне изоляции read uncommitted, могут только читать данные, но не изменять их.
1632
правки

Навигация