Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
303
Добавлен:
11.05.2015
Размер:
3.89 Mб
Скачать

2.4.28. Итог

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

В следующих темах мы рассмотрим более сложные «готовые решения».

2.5. Алгоритмы хэширования

2.5.1. Введение

Сейчас мы рассмотрим конкретные алгоритмы хэширования, применяемые для получения адресов записей в методах доступа реляционных СУБД.

2.5.2. Хэширование

Методы хэширования применяются для адресации данных, хранящихся на устройствах с произвольным доступом, начиная 50-х годов прошлого века.

Процесс хэширования вначале назывался рандомизацией (randomising). Это вызвано тем, что процессу преобразования ключа в адрес вначале пытались придать чисто случайный (random) характер, пока не выяснилось, что этот процесс не может и не должен быть случайным.

Методы хэширования и их применение являются довольно простыми и, кроме того, они имеют два существенных преимущества по сравнению с методами индексирования.

1. Большинство записей можно найти в результате одного обращения к внешнему запоминающему устройству.

2. Включение и удаление записей осуществляются сравнительно легко.

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

В настоящее время известно много различных методов хэширования в применении к СУБД.

Мы же рассмотрим основные…

2.5.2. Факторы эффективности хэширования

Применяя методы хэширования при разработке метода доступа, следует обратить внимание на следующие факторы:

  • размер участка записей;

  • плотность заполнения, т.е. число участков записей определенного размера, используемых для размещения файла заданного объёма;

  • алгоритм преобразования ключа в адрес;

  • организацию работы с областями переполнения.

От оптимального выбора этих факторов зависит эффективность работы СУБД.

2.5.3. Размер участка памяти

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

Такой участок может содержать одну или несколько записей. Выбирая размер участка, и зная длину записи, можно определить число записей, помещающихся на одном участке.

Предположим, что в рулетке находится 100 шариков, которые будут направлены колесом рулетки в гнёзда. (Шарики в данном случае эквивалентны записям, а гнёзда – первичным участкам записи.)

Допустим также, что можно изменять объём гнезда (т.е. можно изменять число шариков, которое помещается в каждое гнездо).

Тогда, задав объём гнезда (размер участка), установим следующий порядок игры в рулетку: если шарик направлен в какое-нибудь гнездо, а оно уже заполнено до отказа, то этот шарик направляется в область переполнения.

Если в рулетке находится 100 шариков и имеется 100 гнезд, т.е. объем каждого гнезда равен 1, то шарики часто будут попадать в область переполнения.

Если число гнёзд равно 10 и объём каждого гнезда также равен 10, то в область переполнения будет попадать значительно меньшее число шариков, чем в первом случае.

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

Если мы выберем размер участка небольшим, то записи будут часто попадать в область переполнения, что приведёт к увеличению времени доступа к ним.

Выбор большого размера участка приведёт к уменьшению числа записей, попадающих в область переполнения, но одновременно возникнет необходимость считывания в основную память более крупных участков и поиска в них требуемой записи.

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

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

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