Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
экзамен / database.pdf
Скачиваний:
51
Добавлен:
06.02.2018
Размер:
583.8 Кб
Скачать

http://slava.fateback.com

52

Метод преобразования системы счисления. Двоичный эквивалент ключа представляется в виде десятичной системы счисления:

n

X

ai · 10i = ( )

i=0

Затем это представление преобразуется к другой системе счисления:

m

X

( ) = bjpj,

j=0

где p — желательно простое число (на практике рекомендуется 7).

Младшие разряды этого числа bj умножаются на масштабирующий множитель, и в результате получается адрес.

Замечание. Прежде чем использовать какую-либо функцию хеширования, желательно оттестировать ее на имеющемся наборе ключей.

Выводы: В большинстве случаев хороший результат дает метод деления. Хотя в каждом случае есть наиболее приемлемый метод (более эффективный).

Методы обработки переполнения. Для функции хеширования переполнением называется появление синонима.

1.Метод открытой адресации. При появлении синонима на занятость проверяется следующая запись файла, если и она занята, то переходим к следующей записи, и так до конца файла, а затем переходим в начало файла, и начинаем искать записи с начала файла. Когда будет достигнут тот адрес, с которого начали поиск, файл окажется исчерпанным, а значит, надо сменить функцию хеширования.

2.Метод нелинейной адресации. Вычисляется функция ξ = Ai2 + Bi + C, где i — номер попытки найти свободное место, A, B — произвольные константы, C — текущий адрес. Значение этого полинома делится на количество записей в файле, и остаток от деления есть новый адрес. Определить по этому методу, заполнен файл или нет, практически невозможно.

Замечание. Для решения проблемы переполнения могут быть использованы и традиционные методы (области переполнения, отведенного свободного пространства, при этом

m = 01.7 ).

3.2.6 Списки и инвертированные файлы

Рассмотренные ранее методы ориентированы на первый и второй классы запросов. Для третьего класса (получить некоторые записи) предназначены мультисписки и инвертированные файлы. В принципе, возможна их реализация на предыдущих методах, но будут дополнительные затраты.

Рассмотрим структуру запросов для третьего класса.

1.Атомарное условие (АУ) имеет следующий вид: < элемент данных > θ const, где элемент данных — имя элемента данных, θ {>, <, >, 6, =, 6=}.

http://slava.fateback.com

53

2.Условие элемента данных (УЭД): УЭД = АУ1 АУ2 . . . АУn — дизъюнкция атомарных условий, относящихся к одному и тому же элементу данных.

3.Условие выбора записей (УВЗ): УВЗ = УЭД1 УЭД2 . . . УЭДm — конъюнкция различных УЭД, относящихся к разным элементам данных.

4.Условие запросов (УЗ): УЗ = УВЗ1 УВЗ2 . . . УВЗk — это есть ДНФ в явном виде. Из логики известно, что ДНФ существует для любого логического выражения.

Мультисписки. Записи в основном файле связываются в цепочки по совпадающим значениям одноименных атрибутов. Мультисписок имеет двухуровневый индекс. 1-ый уровень — наименование, 2-ой уровень — значение. Требование: записи в индексах фиксированной длины (в записях каждого уровня — по одному указателю на начало списка). Записи второго уровня содержат счетчик длины цепочки.

При поиске записей выбирается цепочка минимальной длины (по индексу второго уровня). Минимальность длины — это одно ограничение, а в запросах может быть много ограничений. Остальные условия запроса проверяются в процессе обхода цепочки в основном файле.

Недостатком мультисписка является возможность появления длинных цепочек.

Определение 3.3 Структура основного файла с ограниченной длиной цепочки называется

мультисписок с ограниченной длиной цепочки.

Замечание. Если длина какой-либо подцепочки превысит максимальное значение, то формируется новая подцепочка, и для нее необходимо создать указатель в индексе второго уровня.

Таким образом, в индексе второго уровня мы получаем записи переменной длины.

Длина поиска для такого мультисписка может быть сокращена, если каким-либо образом удастся вычислить нужную подцепочку.

Допустим, записи в основном файле упорядочены по первичному ключу, тогда по интервалу значений первичного ключа можно найти нужную подцепочку.

Недостатки: Основным недостатком мультисписка является наличие указателей в основном файле (нарушение требования локальности модифицирующих воздействий).

Инвертированные файлы.

Определение 3.4 Мультисписок с длиной цепочки, не превышающей 1, называется инвертированным файлом.

Это означает, что в структуре основного файла списков нет. В индексе второго уровня содержатся указатели на все записи основного файла с соответствующим значением. Для решения проблемы переменной длины записи второго уровня формируется индекс третьего уровня, содержащий списки указателей на записи основного файла, соответствующие значениям записей второго уровня. Блоки указателей имеют фиксированную длину и связываются друг с другом в цепочку.

Хорошо то, что если будет сбой, то он будет в индексном файле, который всегда можно восстановить.

При поиске записей операции конъюнкции соответствует пересечение множества указателей, а дизъюнкции — объединение.

http://slava.fateback.com

54

Определение 3.5 Инвертированный файл называется косвенным, если в качестве указателей используются значения первичного ключа.

Недостаток один — дополнительное время на поиск записей по первичному ключу.

Преимущества:

1.Записи в основном файле становятся открепленными: их можно сортировать, удалять, не меняя индекса. При добавлении индекс сменится.

2.Некоторые запросы можно выполнить, не обращаясь к основному файлу (к примеру, определить значение первичного ключа по значениям вторичных).

Определение 3.6 Инвертированный файл называется индексом соединения, если одновременно индексируется несколько основных файлов базы данных.

Для каждого файла 3-го уровня формируется своя цепочка. Записи второго уровня будут фиксированной длины!

Замечание. Структура второго уровня индекса — это набор B-деревьев.

Соседние файлы в папке экзамен