- •Проблемы многопользовательского режима
- •Безопасность данных
- •Управление доступом: избирательное и обязательное. Категории
- •Последовательное и параллельное исполнение транзакций
- •Сериальный план и сериализуемость транзакций
- •Блокировки. Блокировки xLock, sLock
- •Проблема потери обновления. Две транзакции по очереди записывают некоторые данные в одну и ту же строку и фиксируют изменения.
- •Удаленный доступ
- •Сервер базы данных.
Последовательное и параллельное исполнение транзакций
Современные СУБД являются многопользовательскими системами, т.е. допускают параллельную одновременную работу большого количества пользователей. При этом пользователи не должны мешать друг другу. Т.к. логической единицей работы для пользователя является транзакция, то работа СУБД должна быть организована так, чтобы у пользователя складывалось впечатление, что их транзакции выполняются независимо от транзакций других пользователей.
Простейший и очевидный способ обеспечить такую иллюзию у пользователя состоит в том, чтобы все поступающие транзакции выстраивать в единую очередь и выполнять строго по очереди. Такой способ не годится по очевидным причинам - теряется преимущество параллельной работы. Таким образом, транзакции необходимо выполнять одновременно, но так, чтобы результат был такой же, как если бы транзакции выполнялись по очереди. Трудность состоит в том, что если не предпринимать никаких специальных мер, то данные, измененные одним пользователем, могут быть изменены транзакцией другого пользователя раньше, чем закончится транзакция первого пользователя. В результате, в конце транзакции первый пользователь увидит не результаты своей работы, а неизвестно что.
Сериальный план и сериализуемость транзакций
С управлением транзакциями в многопользовательской СУБД связаны важные понятия сериализации транзакций и сериального плана выполнения смеси транзакций. Под сериализаций параллельно выполняющихся транзакций понимается такой порядок планирования их работы, при котором суммарный эффект смеси транзакций эквивалентен эффекту их некоторого последовательного выполнения. Сериальный план выполнения смеси транзакций - это такой план, который приводит к сериализации транзакций. Понятно, что если удается добиться действительно сериального выполнения смеси транзакций, то для каждого пользователя, по инициативе которого образована транзакция, присутствие других транзакций будет незаметно (если не считать некоторого замедления работы по сравнению с однопользовательским режимом).
Блокировки. Блокировки xLock, sLock
Основная идея блокировок заключается в том, что если для выполнения некоторой транзакции необходимо, чтобы некоторый объект не изменялся без ведома этой транзакции, то этот объект должен быть заблокирован, т.е. доступ к этому объекту со стороны других транзакций ограничивается на время выполнения транзакции, вызвавшей блокировку.
Различают два типа блокировок:
-
Монопольные блокировки (X-блокировки, X-locks - eXclusive locks) - блокировки без взаимного доступа (блокировка записи).
-
Разделяемые блокировки (S-блокировки, S-locks - Shared locks) - блокировки с взаимным доступом (блокировка чтения).
Если транзакция A блокирует объект при помощи X-блокировки, то всякий доступ к этому объекту со стороны других транзакций отвергается.
Если транзакция A блокирует объект при помощи S-блокировки, то
-
запросы со стороны других транзакций на X-блокировку этого объекта будут отвергнуты,
-
запросы со стороны других транзакций на S-блокировку этого объекта будут приняты.
Фиксация транзакции
Для обеспечения защиты данных, когда сбой произошел в момент записи транзакции в БД, используется запись транзакций в специальный файл - журнал. Этот процесс, называется журнализацией транзакций. Следующий процесс, в котором происходит запись транзакции в БД, называется фиксацией транзакции (transaction commit)
Изолированность транзакций. Проблемы «потери обновления», «грязного чтения», «неповторяемого чтение», «фантомы».
Изолированность (Isolation). Выполняющиеся одновременно транзакции изолированы от воздействия незавершившихся транзакций. Данная характеристика также именуется как сериализуемость (serializability). Например, транзакция, проходящая через двусвязный список, который в это время подвергается изменению предыдущей транзакцией, будет видеть только те изменения, которые уже осуществились до её инициализации. Изменения же, осуществляемые предыдущей транзакцией, после запуска этой транзакции, уже никак не могут повлиять на неё.
