- •Физическая организация данных в
- •Введение 4
- •1. Теоретические сведения
- •1.1 Физическая организация данных. Основные понятия
- •1.2 Эффективность организации блоков в файле
- •1.3 Организация файлов в виде кучи
- •1.4 Эффективность организации файлов в виде кучи
- •1.5 Организация хешированных файлов
- •1.5.2 Динамическое хеширование
- •1.6 Операции над хешированными файлами
- •1.7 Эффективность хешированных файлов
- •1.8 Индексированные файлы
- •1.9 Операции над индексированными файлами
- •1.10 Эффективность индексированных файлов
- •1.11 Плотное индексирование
- •1.12 B-деревья
- •1. 13 Операции на в-деревьях.
- •1.14 Эффективность в-дерева.
- •2 Задания на лабораторные работы
- •2.1 Задание 1. Организация файла в виде кучи
- •2.2 Задание 2. Организация хешированного файла
- •2.3 Задание 3. Организация индексного файла
- •2.4 Задание 4. Организация файла в виде в-дерева
1.5 Организация хешированных файлов
1.5.1 Статическое хеширование
Основная идея хешированных файлов состоит в том, что записи разбиваются на бакеты согласно значению ключа.
Хешированный файл – файл, в котором для вычисления адреса блока, в котором должна находиться та или иная запись, используется хеш-функция, аргументами которой являются значения одного или нескольких полей этой записи.
Записи в хешированном файле произвольным образом распределены по всему доступному для файла пространству. По этой причине данные файлы иногда называют файлами с произвольной структурой или файлами прямого доступа.
Одна из самых больших проблем в хешировании – выбор хеш-функции, позволяющий расположить хранимые данные равномерно по всем ее значениям.
Один из методов построения хеш-функции носит название свертка и основан на выполнении арифметических действий над различными частями поля перемешивания. При этом, например, символьные строки преобразуются в целые числа с использованием некоторой кодировки — на основе расположения букв в алфавите или ASCII-кодов символов.
Более популярный альтернативный метод основан на перемешивании на основе остатка от деления.
Таким образом, пусть имеется таблица сегментов, содержащая В указателей, по одному на каждый сегмент. Каждый указатель в таблице сегментов представляет собой физический адрес первого блока связного списка блоков для соответствующего сегмента. Сегменты пронумерованы от 0 до (В-1). Хеш-функция h отображает каждое значение ключа в одно из целых чисел от 0 до (В-1).
Если х - ключ, то h(x) является номером сегмента, который содержит запись с ключом х (при условии существования такой записи). Блоки, составляющие каждый сегмент, образуют связный список. Таким образом, заголовок i-го блока содержит указатель на физический адрес (i+1)-го блока. Последний блок сегмента содержит в своём заголовке NIL-указатель.
Список
элементов каждого бакета
Рисунок 5 – Схема организации хешированного файла
Использование метода хеширования для извлечения записей основано на полностью известном значении хеш-поля. Поэтому хеширование не подходит для операций извлечения данных по заданной маске или диапазону значений. Более того, хеширование не подходит для поиска и извлечения данных по любому другому полю, отличному от поля хеширования.
1.5.2 Динамическое хеширование
Перечисленные выше методы хеширования являются статическими, в том смысле, что пространство хеш-адресов задается непосредственно при создании файла. Считается, что пространство файла уже насыщено, когда оно уже почти полностью заполнено и администратор базы данных вынужден реорганизовать его хеш-структуру. Для этого может потребоваться создать новый файл большего размера, выбрать новую хеш-функцию и переписать старый файл во вновь отведенное место. В альтернативном подходе, получившем название динамического хеширования, допускается динамическое изменение размера файла с целью его постоянной модификации в соответствии с уменьшением или увеличением размеров базы данных.
Основной принцип динамического хеширования заключается в обработке числа, выработанного хеш-функцией в виде последовательности битов, и распределении записей по сегментам на основе так называемой прогрессирующей оцифровки этой последовательности. Динамическая хеш-функция вырабатывает значения в широком диапазоне, а именно b-битовые двоичные целые числа, где b обычно равно 32. Такой способ организации показан на рисунке 6.
Рисунок 6 – Динамическое хеширование