- •Базы Данных
- •1.Понятие банка данных. Компоненты банков данных и их краткая характеристика
- •2.Языковые средства субд
- •3.Классификация баз данных
- •4.Этапы проектирования баз данных
- •Тсп для даталогического проектирования
- •Тсп для физического проектирования
- •5.Инфологическое (концептуальное) моделирование
- •7.Case -средства проектирования бд
- •9.Реляционные модели. Основные понятия
- •10.Реляционные модели. Нормальные формы отношений
- •5Nf. Декомпозиция без потерь
- •11.Реляционные модели. Нормализация отношений
- •12.Реляционные алгебры
- •13.Факторы, влияющие на проектирование баз данных
- •1. Специфика предметной области:
- •2. Особенности требуемой обработки информации:
- •3. Характеристика пользователей системы:
- •14.Алгоритм перехода от er-модели к реляционной модели данных
- •15.Ограничения целостности. Понятие и классификация
- •16.Возможности задания ограничений целостности в современных субд
- •17.Языки запросов. Понятие. Классификация
- •18.Классификация запросов. Особенности реализации запросов разных классов
- •19.Табличные языки запросов. Общая характеристика
- •20.Язык sql. Общая характеристика
- •21.Общая структура команды Select языка sql. Корректировка данных в sql
- •22.Sql. Создание объектов
- •23.Sql. Встроенный join
- •24.Sql. Понятие курсора. Использование курсоров
- •25.Sql. Группировка данных. Использование обобщающих функций
- •26.Sql. Создание и использование представлений
- •27.Генераторы экранных форм. Назначение. Классификация
- •28.Генераторы отчетов. Назначение. Классификация
- •29.Классификация распределенных банков данных
- •30.Проблемы обеспечения целостности в распределенных бд
- •31.Сравнение централизованных и распределенных систем
- •32.Распределенные бд. Технологии файл-сервер и клиент-сервер
- •33.Распределенные базы данных. Технология тиражирования
- •34.Проблемы, возникающие при параллельном доступе, и пути их решения
34.Проблемы, возникающие при параллельном доступе, и пути их решения
Транзакция – это логическая единица работы, но не просто одиночная операция системы баз данных, а скорее согласование нескольких таких операций. В общем, это преобразование одного согласованного состояния базы данных в другое.
Транзакция – это не только логическая единица работы, но также и единица восстановления при неудачном выполнении операций. При успешном выполнении система гарантирует, что обновления зафиксированы, даже если система рухнет в следующий момент времени.
Параллелизм означает возможность одновременной обработки СУБД нескольких транзакций с доступом к одним и тем же данным в один и тот же момент времени.
В этом случае при обработке правильно составленных транзакций может возникнуть ситуации, которые могут привести к неправильным результатам из-за взаимных помех.
Основные проблемы при параллельной обработке транзакции:
Проблема утраченных (потерянных) обновлений (Lost update).
Если пользователи параллельно обновляют одни и те же данные, то запомненным будет то обновление, которое было проведено последним. Остальные обновления будут потеряны.
Зависимость от незафиксированных обновлений.
Пользователь А может увидеть данные, которые уже были обновлены пользователем В, но эти обновления еще не были окончательно зафиксированы. Далее пользователь В может в силу различных причин (например, из-за выявленных ошибок ввода) провести откат базы данных в исходное состояние.
Таким образом, если обновление не завершено, существует некоторая вероятность того, что оно не будет завершено никогда. В таком случае Пользователь А будет предпринимать действия над данными, которых не существуют (над ошибочными данными). Иногда для такого рода проблем используется термин преждевременное чтение (Dirty read).
Проблема несовместимого анализа.
Транзакции A и B выполняются для кортежей N1, N2, N3. Транзакция A вычисляет итоговый баланс, транзакция B производит перевод суммы, равной 10, со счета N3 на счет N1. Из-за взаимных помех транзакций получен неверный результат. В этом случае A встретилась со несовместимым состоянием и на его основании был выполнен несовместимый анализ.
Иногда разделяют ситуации, когда проводится изменение существующих записей и когда осуществляется вставка новой записи. Первая проблема называется неповторяющееся чтение, а вторая - фантомная вставка. Эта ситуация не приводит к искажению информации в базе данных и поэтому в некоторых ситуациях считается допустимой (например, в случае, если специалист проектирует форму отчета и в этом процессе получает черновые отчеты).
Блокировка.
Описанные выше проблемы могут быть решены с помощью методики управления параллельным выполнением процесса под названием блокировка.
Блокировка заключается в запрещении некоторых операций над данными (чаще - корректировки информации), если ее обрабатывает (корректирует) другой пользователь. В такой схеме всякий раз, когда транзакция пытается получить доступ к какой-либо единице данных, на эту единицу накладывается блокировка.
Основная идея блокировки: Случай, когда для выполнения некоторой транзакции необходимо чтобы некоторый объект (обычно это кортеж БД) не изменялся непредсказуемо и без ведомо этой транзакции, такой объект блокируется.
Алгоритм блокировки:
Предположим, что в системе поддерживается два типа блокировок:
Блокировка без взаимного доступа (монопольная или X - блокировка).
Блокировка с взаимным доступом (S - блокировка).
Если транзакция A блокирует кортеж P X – блокировкой, то запрос другой транзакции B с блокировкой кортежа будет отменен.
Если транзакция A блокирует кортеж P S – блокировкой, то:
Запрос транзакции B на X – блокировку будет отвергнут.
Запрос транзакции B на S – блокировку будет принят.
Блокировки накладываются в соответствии с правилами совместимости блокировок, исключающими конфликты чтение-запись, запись-чтение и запись-запись. Сериализуемость [Сериализация — процесс перевода какой-либо структуры данных в последовательность битов] транзакций заведомо гарантируется, если блокировки, относящиеся к одновременно выполняемым транзакциям, удовлетворяют следующему правилу: «Ни одна блокировка от имени какой-либо транзакции не должна устанавливаться, пока не будет снята ранее установленная блокировка». Это правило известно под названием двухфазового блокирования, поскольку транзакция проходит при этом сначала фазу роста, когда она устанавливает блокировки, а затем фазу сжатия, когда блокировки снимаются.
В SQL-92 определены так называемые уровни изоляции (isolation level).
1. Уровень SERIALIZABLE (последовательное выполнение) -обеспечивает максимальную степень целостности и соответствует требованиям предыдущих стандартов. Обычно именно этот уровень устанавливается по умолчанию. При его выборе каждая транзакция выполняется изолированно.
2. Уровень REPEATABLE READ (повторяющееся чтение) - допускает вставку новой записи в таблицу, обрабатываемую транзакцией. При этом в принципе может возникать эффект так называемой фантомной вставки.
3. Уровень READ COMMITTED (чтение с фиксацией) - допускает выполнение запроса при условии, что результаты параллельных транзакций были зафиксированы.
4. Уровень READ UNCOMMITTED (чтение без фиксации) - допускает выполнение запроса независимо от того, были зафиксированы результаты параллельных транзакций или нет.