- •Предисловие
- •Основные функции систем управления базами данных (СУБД)
- •Основные понятия
- •Преимущества использования баз данных
- •Функции систем управления базами данных
- •Литература
- •Реляционная модель данных
- •Структуры данных. Фундаментальные свойства отношений
- •Целостность данных. Реляционные ключи
- •Манипулирование данными
- •Реляционная алгебра Кодда
- •Операции
- •Объединение
- •Пересечение
- •Разность
- •Декартово произведение
- •Сокращение (выборка, ограничение, селекция)
- •Проекция
- •Соединения
- •Деление
- •Приоритеты операций
- •Базис алгебры и ства операций
- •Базис
- •Свойства операций
- •Ограничения реляционной алгебры
- •Литература
- •Реляционное исчисление
- •Исчисление кортежей
- •Эквивалентность исчисления кортежей и реляционной алгебры
- •Исчисление доменов
- •Литература
- •Случаи неполной информации и ω-значения
- •Концепция трехзначной логики
- •Логические операторы
- •Кванторы
- •Арифметические операции и операции сравнения
- •ω-значения и домены
- •ω-значения и операторы реляционной алгебры
- •ω-значения и агрегирующие функции
- •Проблема интерпретации
- •ω-значения и ограничения целостности
- •Первичные ключи
- •Внешние ключи
- •Литература
- •Семантическое проектирование реляционных баз данных на основе ER-модели
- •Общий подход семантического моделирования
- •Основные понятия
- •Проектирование базы данных с помощью ER-модели
- •Литература
- •Проектирование реляционных баз данных при помощи нормализации
- •Жизненный цикл системы баз данных
- •Функциональные зависимости
- •Понятие функциональной зависимости
- •Тривиальные и нетривиальные зависимости
- •Замыкание множества зависимостей
- •Неприводимые множества зависимостей
- •Декомпозиция без потерь и функциональные зависимости
- •Диаграммы функциональных зависимостей
- •Сохранение независимости в смысле Риссанена
- •Многозначные зависимости
- •Нормализация
- •Понятие нормализации и её причины
- •Первая, вторая и третья нормальные формы
- •Нормальная форма Бойса–Кодда
- •Четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Литература
- •Основные принципы хранения данных во внешней памяти
- •Страничная организация хранения данных
- •Управление буферами внутренней памяти
- •Простая файловая организация страниц
- •Неупорядоченный файл
- •Упорядоченный файл
- •Индексирование
- •Индексно-прямой метод доступа
- •Индексно-последовательный метод доступа
- •Индекс на основе B+-деревья
- •Хэширование
- •Индексированные кластеры
- •Хэшированные кластеры
- •Литература
- •Управление транзакциями и синхронизация в реляционных СУБД
- •Понятие транзакции
- •Фундаментальные свойства транзакций
- •Изолированность транзакций
- •Синхронизационные блокировки
- •Простые блокировки
- •Гранулированные (намеренные) блокировки
- •Предикатные блокировки
- •Тупиковые ситуации
- •Метод временных меток
- •Механизм выделения версий данных
- •Литература
- •Журнализация и восстановление в реляционных СУБД
- •Журнализация и буферизация
- •Индивидуальный откат транзакции
- •Восстановление после мягкого сбоя
- •Восстановление после жесткого сбоя
- •Литература
- •Выполнение и оптимизация запросов в реляционных СУБД
- •Процесс оптимизации запроса
- •Преобразование запроса во внутреннюю форму
- •Преобразование запроса в каноническую форму
- •Выбор потенциальных низкоуровневых процедур
- •Генерация различных вариантов планов вычисления запроса и выбор плана с минимальными затратами
- •Низкоуровневая оптимизация операции выборки
- •Низкоуровневая оптимизация операции соединения
- •Литература
9.3.Изолированность транзакций
Вмногопользовательских системах с одной базой данных одновременно может работать несколько пользователей или прикладных программ. Предельной задачей системы является обеспечение изолированности пользователей, т. е. создание достоверной и надежной иллюзии того, что каждый из пользователей работает с базой данных в одиночку.
Всвязи со свойством сохранения целостности базы данных транзакции являются подходящими единицами изолированности пользователей. Действительно, если с каждым сеансом работы пользователя или приложений с базой данных ассоциируется транзакция, то каждый пользователь начинает работу с согласованным состоянием базы данных, т. е. с таким состоянием, в котором база данных могла бы находиться, даже если бы пользователь работал с ней в одиночку.
При параллельном выполнении транзакций возможны следующие проблемы (рис. ??):
1. Проблема потерянных обновлений (lost update) — при одновременном изменении одного блока
данных разными транзакциями одно из изменений теряется;
2.Проблема чтения «грязных» данных (dirty read; зависимость от незафиксированных данных) — чтение данных, добавленных или изменённых транзакцией, которая впоследствии не подтвердится (откатится);
3.Проблема неповторяющегося чтения (non-repeatable read) — при повторном чтении в рамках одной транзакции ранее прочитанные данные оказываются изменёнными или удалёнными;
4.Проблема фантомов — при повторном чтении в рамках одной транзакции прочитаны данные (новые «фантомные» кортежи), которых при предыдущих чтениях не было, хотя они удовлетворяли условиям отбора предыдущего чтения.
Начиная со стандарта SQL:1992 в SQL введены уровни изоляции, установка которых предотвращает указанные конфликтные ситуации. Уровни изоляции определяют, может ли читающая транзакция считывать («видеть») результаты работы других одновременно выполняемых завершённых и/или незавершённых пишущих транзакций. Введены следующие четыре уровня изоляции (начиная от самого высокого с наибольшей изолированностью, но при этом наиболее трудно распараллеливаемого):
3 уровень. Упорядочиваемость (сериализация; SERIALIZABLE) — на этом уровне результаты парал-
лельного выполнения транзакций для базы данных в большинстве случаев можно считать совпадающими с последовательным выполнением тех же транзакций по очереди в какомлибо порядке.
2 уровень. Повторяемость чтения (REPEATABLE READ) — уровень, при котором чтение одной и той же строки или строк в транзакции дает одинаковый результат: пока транзакция не завершена, никакие другие транзакции не могут модифицировать эти данные.
1 уровень. Чтение фиксированных данных (READ COMMITTED) — уровень с завершенным чтени-
ем, при котором отсутствует черновое («грязное») чтение (т. е. чтение одним пользователем данных, которые не были зафиксированы в базе данных командой COMMIT).
0 уровень. Чтение зафиксированных данных (READ UNCOMMITTED) — гарантирует только отсут-
ствие потерянных обновлений.
По умолчанию в СУБД обычно установлен уровень READ COMMITTED. В реализациях систем могут содержаться и другие уровни изоляции (например, SNAPSHOT в MS SQL Server с JDBC Driver).
Решаемые и нерешаемые проблемы того или иного уровня изоляции можно изобразить в виде таблицы ( — предотвращает, — не предотвращает):
61