- •Основные понятия информационных систем Информация и субд
- •Файловые системы
- •Структуры файлов
- •Именование файлов
- •Области применения файлов
- •Потребности информационных систем
- •Структуры хранения данных и методы доступа к ним
- •Доступ к базе данных
- •Диспетчер дисков
- •Диспетчер файлов
- •Кластеризация
- •Наборы страниц и файлы
- •Индексирование
- •Плотное и неплотное индексирование
- •Структура типа б-дерева
- •Хеширование
- •Задание
- •Расширяемое хеширование
- •Цепочки указателей
- •Управление данными, размещенными в оперативной памяти
- •Функции и архитектура субд
- •Примеры приложений субд
- •Обзор основных компонентов субд
- •Диспетчер памяти
- •Процессор запросов
- •Диспетчер транзакций
- •Параллелизм
- •Задание. Привести схему применения двухфазной блокировки для решения проблемы незафиксированной зависимости и проблемы несовместимого анализа.
- •Журнализация
- •Поддержка языков бд
- •Типовая организация современной субд
- •Ранние подходы к организации бд
- •Основные особенности систем, основанных на инвертированных списках
- •Структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Иерархические системы
- •Иерархические структуры данных
- •Манипулирование данными
- •Ограничения целостности
- •Сетевые системы
- •Сетевые структуры данных
- •Манипулирование данными сетевой схемы
- •Ограничения целостности сетевых систем
- •Достоинства и недостатки
- •Реляционные базы данных Общие понятия и терминология реляционного подхода
- •Тип данных
- •Фундаментальные свойства отношений (таблиц)
- •Реляционная модель
- •Каталог
- •Базовые таблицы, представления, снимки и запросы
- •Отношения и предикаты
- •Null-значения; потенциальные и внешние ключи
- •Базисные операции над реляционными данными
- •5.1. Реляционная алгебра
- •5.1.1. Общая интерпретация реляционных операций
- •Замкнутость реляционной алгебры и операция переименования
- •Особенности теоретико-множественных операций реляционной алгебры
- •Специальные реляционные операции
- •Операция взятия проекции
- •Операция соединения отношений
- •Операция деления отношений
- •Упражнения
- •Задание
- •Операция расширения и подведения итогов
- •Операция подведения итогов
- •Задания
- •Операторы обновления
- •Упражнения по запросам
- •5.2. Реляционное исчисление
- •Кортежные переменные и правильно построенные формулы
- •Еще раз о свободных и связанных переменных
- •Целевые списки и выражения реляционного исчисления
- •Реляционное исчисление доменов
- •Список литературы
Расширяемое хеширование
Еще один недостаток описанного выше способа хеширования возрастание числа коллизий с увеличением размера хранимого файла. Это приводит к значительному увеличению среднего времени доступа, поскольку все больше времени придется тратить на поиск записей в наборах конфликтующих записей.Расширяемое хеширование прекрасный способ (не единственный) разрешения этой проблемы. При использовании расширяемого хеширования потребуется не более двух доступов к диску для поиска заданной записи. При этом требуется, чтобы все значения хеш-поля были уникальны, что может быть реализовано только в том случае, если хеш-поле является ключевым.
Принцип работы расширяемого хеширования состоит в следующем.
Допустим, что в качестве хеш-функции используется функция h, а значение ключевого поля для некоторой записиrравноk. В результате хеширования значение ключевого поляkбудет получено значениепсевдоключа для записи r. Псевдоключ используется, как показано ниже, не в качестве адреса записи, а лишь как косвенный указатель на место их хранения.
Хранимый файл имеет связанный с ним каталог, который также сохраняется на диске. Он состоит из заголовка, содержащего значениеd, которое называетсяглубиной каталога, а также 2dуказателей на страницы с несколькими записями данных на каждой. Таким образом, с помощью каталога глубинойdможно организовать управление файлом, содержащим 2dразличных страниц с данными.
Если рассматривать первые dбит псевдоключа как целое беззнаковое числоb, тоi-й указатель в каталоге (1i2d) будет относиться к странице, содержащей все записи, для которых величинаbравнаi1. Иначе говоря, первый указатель будет относиться к странице с записями, у которыхbсоставлено из нулей, второй указательна страницу с записями, у которыхbравно 0…01, и т.д. теперь, для того, чтобы найти запись со значением ключевого поля, равнымk, нужно с помощью хеш-функции вычислить значение псевдоключаs, затем по первымdбит псевдоключа определить численное значениеi1 и найти в каталоге (первый доступ к диску) соответствующий емуi-й указатель на страницу, содержащую искомую запись (второй доступ к диску). Замечание. Поскольку каталог обычно имеет достаточно малый размер, его можно разместить в оперативной памяти и сократить число обращений к диску.
Каждая страница имеет заголовок с указанием локальной глубины рэтой страницы (рd). Пустьdравно трем и первый указатель в каталоге указывает на страницу с локальной глубинойр, равной двум (рис.6). равенство локальной глубины двум означает, что страница содержит не только записи со значениями псевдоключа 000, но и со значениями 00 (например, 000 и 001). Иначе говоря, указатель каталога 001 также указывает на эту страницу.
Теперь предположим, что требуется вставить еще одну запись с псевдоключом 000 (или 001) на полностью заполненную страницу 000. В таком случае страница будет разделена на две части с увеличенной на единицу локальной глубиной. Одна из частей (старая страница будет содержать все записи с псевдоключами 000, и на нее будет указывать указатель 000, а в другую часть (новую страницу) будут перемещены все записи с псевдоключами 001, и на нее будет указывать указатель 001.
Предположим, что через некоторое время страница 000 опять переполнилась и ее следует снова разделить с увеличением локальной глубины. Однако это невозможно сделать, поскольку локальная глубина уже равна глубине каталога. В таком случае следует создать дубликат каталога, т.е увеличить его глубину на единицу и заменить каждый указатель парой смежных указателей. Теперь страница с данными может быть снова разделена на две части с прежним указателем 0000 на старую страницу и новым указателем 0001 на вновь созданную. Следует отметить, что для дублирования каталога не требуется почти никаких затрат ресурсов, поскольку при этом не происходит обращения к страницам.
Каталог Страницы с данными
Глубина |
3 |
|
2 |
Локальная глубина: |
Первые два бита 00 | ||
Указатель 000 |
|
|
|
| |||
Указатель 001 |
|
|
| ||||
Указатель 010 |
|
|
3 |
Локальная глубина: |
Первые два бита 010 | ||
Указатель 011 |
|
|
|
| |||
Указатель 100 |
|
|
| ||||
Указатель 101 |
|
|
3 |
Локальная глубина: |
Первые два бита 011 | ||
Указатель 110 |
|
|
|
| |||
Указатель 111 |
|
|
| ||||
|
|
|
1 |
Локальная глубина: |
Первый бит равен 1 | ||
|
|
|
|
| |||
|
|
|
|
Рис.6. Пример реализации расширяемого хеширования