
- •Классификация субд [5]
- •Функции субд
- •Централизованная архитектура
- •Технология с сетью и файловым сервером (архитектура «файл-сервер»)
- •Технология «клиент-сервер»
- •Трехзвенная (трехуровневая) архитектура
- •Реляционная модель данных
- •Методология idef1x
- •Определение отношения, домена, кортежа, реляционной базы данных, ключей
- •Связи между отношениями (таблицами)
- •Базовые теоретико-множественные операции реляционной алгебры
- •Специальные операции реляционной алгебры
- •Аномалии обновления
- •Первая Нормальная Форма
- •Определение функциональной зависимости
- •Функциональные зависимости отношений и математическое понятие функциональной зависимости
- •Вторая Нормальная Форма
- •Определение
- •3Нф (Третья Нормальная Форма)
- •Алгоритм нормализации (приведение к 3нф)
- •Реляционная модель данных: сравнение нормализованных и ненормализованных моделей.
- •16, Сравнение нормализованных и ненормализованных моделей
- •Null-значения
- •Потенциальные ключи
- •Целостность сущностей
- •Внешние ключи
- •Целостность внешних ключей
- •Замечания к правилам целостности сущностей и внешних ключей
- •Операции, которые могут нарушить ссылочную целостность
- •Для родительского отношения
- •Для дочернего отношения
- •20, Целостность реляционных данных: стратегии поддержания ссылочной целостности.
- •Стратегии поддержания ссылочной целостности
- •Операторы ddl (Data Definition Language) - операторы определения объектов базы данных
- •Create table – создать таблицу
- •Оператор check
- •Определение первичных и альтернативных ключей с помощью оператора alter
- •Операторы drop
- •Выборка данных
- •Сортировка результатов
- •Встроенные функции sql
- •Средства модификации данных языка sql
- •Вставка данных – insert
- •Изменение данных – update
- •Удаление данных – delete
- •Выборка данных
- •Представления
- •Применение представлений
- •Обновление представлений
- •Триггеры
- •Хранимые процедуры
- •Большая безопасность и меньший сетевой трафик.
- •Sql можно оптимизировать
- •Совместное использование кода:
- •Структура памяти эвм
- •Представление экземпляра логической записи
- •Организация обмена между оперативной и внешней памятью
- •Структуры хранения данных во внешней памяти эвм
- •Назначение и проверка полномочий, проверка подлинности
- •Средства защиты базы данных
- •Архитектура системы безопасности ms sql Server
- •34.Роли сервера
- •35, Права доступа
- •36, Необходимость в атомарных транзакциях
- •П , Параллельная обработка транзакций
- •Проблема потерянного обновления
- •Блокировка ресурсов
- •Блокировочная терминология
- •Сериализуемые транзакции
- •Взаимная блокировка
- •Оптимистическая и пессимистическая блокировки
- •Объявление характеристик блокировки
- •Свойства транзакций
- •Атомарность
- •Долговечность или устойчивость
- •Согласованность
- •Изолированность транзакции. Уровни изоляции
- •Типы курсоров
Оптимистическая и пессимистическая блокировки
Блокировки могут налагаться двумя основными стилями. При оптимистической блокировке (optimistic locking) делается предположение, что конфликта не произойдет. Данные считываются, транзакция обрабатывается, производятся обновления, а после этого проверяется, не возник ли конфликт. Если нет, транзакция завершается. Если да, транзакция повторяется до тех пор, пока не сможет успешно завершиться. При пессимистической блокировке (pessimistic locking) предполагается, что конфликт обязательно произойдет. Сначала налагаются блокировки, затем обрабатывается транзакция, а после этого блокировки снимаются.
Листинги 1, 2 и 3 демонстрируют оба стиля наложения блокировок для транзакции, которая уменьшает количество карандашей в таблице ТОВАР на пять штук. В листинге 1 изображена оптимистическая блокировка. Сначала данные считываются, и текущее количество карандашей сохраняется в переменной СтароеКоличество. Затем обрабатывается транзакция, и в предположении, что все прошло успешно, налагается блокировка на таблицу ТОВАР. Эта блокировка может затрагивать только строку карандашей, а может быть, глубина детализации будет и меньшей. В любом случае, выполняется SQL-оператор, обновляющий строку карандашей, с условием WHERE Количество = СтароеКоличество. Если никакая другая транзакция не изменила атрибут Количество в строке карандашей, тогда результат оператора UPDATE будет успешным. Если какая-то другая транзакция изменила значения атрибута Количество в строке карандашей, выполнение оператора UPDATE будет неудачным, и транзакцию придется повторить.
Листинг 1. Оптимистическая блокировка
SELECT ТОВАР.Название, ТОВАР.Количество
FROM ТОВАР
WHERE ТОВАР.Название ='Карандаш'
СтароеКоличество = ТОВАР.Количество
Set НовоеКоличество = ТОВАР.Количество - 5
{обработка транзакции - если НовоеКоличество < 0, то генерируется исключение, и т. д. Если все в порядке:}
LOCK ТОВАР
UPDATE ТОВАР
SET ТОВАР.Количество = НовоеКоличество
WHERE ТОВАР.Название = 'Карандаш'
AND ТОВАР.Количество = СтароеКоличество
UNLOCK ТОВАР
{проверяем, было ли обновление успешным; если нет, повторяем транзакцию}
В листинге 2 изображена логика той же самой транзакции, но с использованием пессимистической блокировки. Здесь еще до начала работы на таблицу ТОВАР налагается блокировка (с некоторой глубиной детализации). Затем считываются значения, обрабатывается транзакция, выполняется оператор UPDATE, и таблица ТОВАР разблокируется.
Преимущество оптимистической блокировки состоит в том, что она налагается только после обработки транзакции. Таким образом, блокировка удерживается в течение более короткого времени, чем при пессимистической стратегии. Если транзакция является сложной или клиент – медлительным (например, имеются задержки при передаче, клиент занят другой работой, пользователь уходит попить кофе или выключает компьютер, не выйдя из браузера), то блокировка будет удерживаться в течение значительно меньшего промежутка времени. Это преимущество будет еще более важно, если глубина детализации блокировки мала – скажем, вся таблица ПРОДУКТ.
Листинг 2. Пессимистическая блокировка
LOCK ТОВАР
SELECT ТОВАР.Название, ТОВАР.Количество
FROM ТОВАР
WHERE ТОВАР.Название ='Карандаш'
Set НовоеКоличество = ТОВАР.Количество - 5
{обработка транзакции - если НовоеКоличество < 0, генерируется исключение, и т. д. Если все в порядке:}
UPDATE ТОВАР
SET ТОВАР.Количество = НовоеКоличество
WHERE ТОВАР.Название = 'Карандаш'
UNLOCK ТОВАР
{проверка на успешность обновления не требуется}
Недостаток оптимистической блокировки заключается в том, что если со строкой карандашей происходит много активных действий, транзакцию, возможно, придется повторить многократно. Таким образом, транзакции, которые связаны с большой активностью по отношению к конкретной строке (например, покупка популярного товара), плохо приспособлены для оптимистической блокировки.
Вообще говоря, Интернет – место дикое и непредсказуемое, и пользователи часто предпринимают неожиданные действия вроде прерывания транзакций на середине. Поэтому, если только пользователи Интернета не были предварительно отобраны (например, путем записи в план интерактивных покупок), оптимистическая блокировка являет собой более удачный выбор. В интрасетях, однако, принять решение сложнее. Возможно, оптимистическая блокировка и здесь окажется предпочтительнее, если нет какой-либо характеристики приложения, которая вызывала бы значительную активность по отношению к отдельным строкам, или если требования приложения почему-либо делают повторную обработку транзакций особенно нежелательной.
42, БЛОКИРОВКА РЕСУРСОВ: ОБЪЯВЛЕНИЕ ХАРАКТЕРИСТИК БЛОКИРОВКИ.