Управлением параллелизмом

ACID-свойства транзакций

Требования к свойствам транзакций описываются в терминах «атомарность, согласованность, изолированность, долговечность», или АСИД, что означает «atomicity, consistency, isolation, durability», или ACID.

Атомарность означает, что транзакция должна быть выполнена как целое или не выполнена вовсе («все или ничего»).

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

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

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

Последовательное исполнение транзакций означает исполнение транзакций одна за другой.

Параллельное исполнение транзакций означает, что одновременное исполнение транзакций, т.е., что работу с данными ведут одновременно несколько пользователей.

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

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

Имеются два способа осуществления управления параллелизмом.

Пессимистическое управление параллелизмом

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

Оптимистическое управление параллелизмом

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