
- •Предисловие
- •Основные функции систем управления базами данных (СУБД)
- •Основные понятия
- •Преимущества использования баз данных
- •Функции систем управления базами данных
- •Литература
- •Реляционная модель данных
- •Структуры данных. Фундаментальные свойства отношений
- •Целостность данных. Реляционные ключи
- •Манипулирование данными
- •Реляционная алгебра Кодда
- •Операции
- •Объединение
- •Пересечение
- •Разность
- •Декартово произведение
- •Сокращение (выборка, ограничение, селекция)
- •Проекция
- •Соединения
- •Деление
- •Приоритеты операций
- •Базис алгебры и ства операций
- •Базис
- •Свойства операций
- •Ограничения реляционной алгебры
- •Литература
- •Реляционное исчисление
- •Исчисление кортежей
- •Эквивалентность исчисления кортежей и реляционной алгебры
- •Исчисление доменов
- •Литература
- •Случаи неполной информации и ω-значения
- •Концепция трехзначной логики
- •Логические операторы
- •Кванторы
- •Арифметические операции и операции сравнения
- •ω-значения и домены
- •ω-значения и операторы реляционной алгебры
- •ω-значения и агрегирующие функции
- •Проблема интерпретации
- •ω-значения и ограничения целостности
- •Первичные ключи
- •Внешние ключи
- •Литература
- •Семантическое проектирование реляционных баз данных на основе ER-модели
- •Общий подход семантического моделирования
- •Основные понятия
- •Проектирование базы данных с помощью ER-модели
- •Литература
- •Проектирование реляционных баз данных при помощи нормализации
- •Жизненный цикл системы баз данных
- •Функциональные зависимости
- •Понятие функциональной зависимости
- •Тривиальные и нетривиальные зависимости
- •Замыкание множества зависимостей
- •Неприводимые множества зависимостей
- •Декомпозиция без потерь и функциональные зависимости
- •Диаграммы функциональных зависимостей
- •Сохранение независимости в смысле Риссанена
- •Многозначные зависимости
- •Нормализация
- •Понятие нормализации и её причины
- •Первая, вторая и третья нормальные формы
- •Нормальная форма Бойса–Кодда
- •Четвертая нормальная форма
- •Зависимости соединения и пятая нормальная форма
- •Литература
- •Основные принципы хранения данных во внешней памяти
- •Страничная организация хранения данных
- •Управление буферами внутренней памяти
- •Простая файловая организация страниц
- •Неупорядоченный файл
- •Упорядоченный файл
- •Индексирование
- •Индексно-прямой метод доступа
- •Индексно-последовательный метод доступа
- •Индекс на основе B+-деревья
- •Хэширование
- •Индексированные кластеры
- •Хэшированные кластеры
- •Литература
- •Управление транзакциями и синхронизация в реляционных СУБД
- •Понятие транзакции
- •Фундаментальные свойства транзакций
- •Изолированность транзакций
- •Синхронизационные блокировки
- •Простые блокировки
- •Гранулированные (намеренные) блокировки
- •Предикатные блокировки
- •Тупиковые ситуации
- •Метод временных меток
- •Механизм выделения версий данных
- •Литература
- •Журнализация и восстановление в реляционных СУБД
- •Журнализация и буферизация
- •Индивидуальный откат транзакции
- •Восстановление после мягкого сбоя
- •Восстановление после жесткого сбоя
- •Литература
- •Выполнение и оптимизация запросов в реляционных СУБД
- •Процесс оптимизации запроса
- •Преобразование запроса во внутреннюю форму
- •Преобразование запроса в каноническую форму
- •Выбор потенциальных низкоуровневых процедур
- •Генерация различных вариантов планов вычисления запроса и выбор плана с минимальными затратами
- •Низкоуровневая оптимизация операции выборки
- •Низкоуровневая оптимизация операции соединения
- •Литература
•Предельным случаем является полное опустошение корневой страницы дерева, которое возможно после слияния последних двух потомков корня. В этом случае корневая страница освобождается, а глубина дерева уменьшается на единицу.
Хэширование
Альтернативным и достаточно популярным подходом к организации индексов является использование техники хэширования. Общей идеей методов хэширования заключается в следующем:
•Каждый кортеж помешается в базу данных в такое место, адрес которого (т. е. идентификатор кортежа или, возможно, просто номер страницы) вычисляется как некоторая функция (называемая хэш-функцией) от значения определенного атрибута этого кортежа (называемое хэширо-
ванным полем — hash field, или иногда хэшированным ключом — hash key). Адрес, вычис-
ленный с помощью хэш-функции, называется хэшированным адресом.
•Для первоначального сохранения рассматриваемого кортежа СУБД вычисляет хэшированный адрес для нового кортежа и передает диспетчеру файлов команду на размещение этой записи по указанному адресу.
•Для последующей выборки записи с использованием значения хэшированного поля СУБД проводит такие же вычисления, как и прежде, и выдает диспетчеру файлов команду чтения/записи по вычисленному адресу.
Хеш-функция выбирается таким образом, чтобы записи внутри файла были распределены наиболее равномерно. Один из методов создания хеш-функции называется сверткой (folding) и основан на выполнении некоторых арифметических действий над различными частями поля хеширования. При этом символьные строки преобразуются в целые числа с использованием некоторой кодировки.
Использование метода хеширования для извлечения записей основано на полностью известном значении хеш-поля. Поэтому, как правило, хеширование не подходит для операций извлечения данных по заданному образцу или диапазону значений. Более того, хеширование не подходит для поиска и извлечения данных по любому другому полю, отличному от поля хеширования. Хотя с файлом может быть связано произвольное количество структур косвенного хэширования.
Недостатком большинства хеш-функций является то, что они не гарантируют получение уникального адреса, поскольку количество возможных значений ноля хеширования может быть гораздо больше количества адресов, доступных для записи. Каждый вычисленный хеш-функцией адрес соответствует некоторой странице, или сегменту (bucket), с несколькими ячейками (слотами), предназначенными для нескольких записей. В пределах одного сегмента записи размещаются в слотах в порядке поступления. Тот случай, когда один и тог же адрес генерируется для двух или более записей, называется коллизией (collision), а подобные записи — синонимами. В этой ситуации новый кортеж необходимо вставить в другую позицию, поскольку место с вычисленным для него адресом уже занято. Устранение коллизий усложняет сопровождение хешированных файлов и снижает общую производительность их работы.
Приведем некоторые методы устранения коллизий:
1.Открытая адресация (линейное зондирование, метод линейных проб):
Идея состоит в том, что сталкиваясь с коллизией при добавлении кортежа, мы последовательно (циклически, с переходом через конец на начало) просматриваем массив в поиске первого незанятого элемента. Если такой элемент обнаруживается, в него и заносится добавляемый кортеж. Если все элементы массива заняты, то это означает, что хэш-таблица переполнена и требуется расширение массива и новая расстановка его элементов.
Если коллизия обнаруживается при поиске (т. е. следуя применяемой хэш-функции мы обращаемся по свертке ключа к элементу массива и обнаруживаем, что он занят записью с другим ключом), последовательно (циклически) просматриваются следующие элементы массива, пока не будет найдена запись с указанным ключом, либо мы не наткнемся на свободный элемент массива. Последнее означает, что кортеж с указанным ключом в хэш-таблице отсутствует.
55
Недостаток состоит в том, что при разрешении коллизии вторичные элементы массива (те, на которые прямо не указывает хэш-функция) имеют обыкновение сосредотачиваться вблизи первичных элементов. Заполнение массива происходит неравномерно, и увеличивается вероятность следующих коллизий.
2.Двойное хэширование:
Состоит в том, что если при добавлении или поиска ключа в хэш-таблице возникает коллизия, то к ключу (или к комбинации ключа и текущего индекса массива) применяется вторичная хэшфункция, значение которой указывает циклическое смещение в массиве от текущего индекса к элементу, в который следует включать или в котором следует искать требуемую запись.
3.Метод квадратичных проб: упрощенное двойное хэширование в силу больших накладных расходов последнего.
Состоит в использовании в качестве вторичной хэш-функции квадратичной функции при вы-
числении индекса следующей пробы. В этом случае последовательность вычисления индексов проб при добавлении или поиске кортежа является следующей:
h0 Hpkq; hi ph0 i2q mod N, где H — основная хэш-функция, k — ключ, N — число элементом в хэш-таблице.
Основным недостатком метода квадратичных проб является то, что для включаемого кортежа может не найтись свободного элемента массива даже в том случае, когда реально около половины элементов являются свободными.
8.5. Кластеризованные и некластеризованные отношения
в Oracle Database
Кластерами называются группы из одного или нескольких отношений, которые физически хранятся вместе, поскольку в них совместно используются общие атрибуты и доступ к ним часто осуществляется одновременно.
Если взаимосвязанные записи физически хранятся в непосредственной близости друг от друга, скорость доступа к носителю информации повышается. Взаимосвязанные атрибуты отношений в кластере называются ключом кластера. Ключ кластера хранится только в одном экземпляре, поэтому наборы отношений, размещенных в кластере, занимают меньше места по сравнению с отношениями, хранящимися отдельно (а не кластеризованными).
Под кластеризацией еще может пониматься просто упорядоченность хранимых отношений по индексируемому атрибуту. Приведенное определение кластера связано со структурой хранения в базе данных Oracle Database.
Индексированные кластеры
В индексированном кластере хранятся вместе кортежи, имеющие одинаковый ключ кластера. Корпорация Oracle (в её СУБД могут использоваться кластеры) рекомендует использовать индек-
сированные кластеры при следующих условиях:
•в применяемых запросах предусматривается выборка записей в диапазоне значений ключа кластера;
•размеры кластеризованных таблиц могут увеличиваться непредсказуемым образом.
Кластеры позволяют повысить производительность выборки данных, но степень такого повышения зависит от распределения данных и от того, какие операции наиболее часто выполняются с данными. Применение кластеров способствует наиболее значительному повышению производительности запросов, в которых выполняется соединение таблиц, поскольку выборка общих кортежей соединяемых отношений осуществляется в одной операции ввода-вывода.
56