Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
_БД_Раздел_4_.doc
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
732 Кб
Скачать
☆

Ускорение доступа к данным. Индексирование. Хеширование

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

Наибольший эффект дают метод индексирования и метод хеши­рования значений ключей отношения.

Индексирование

Индекс, индексирование представляет собой механизм доступа, ускоряющий выборку данных из таблицы.

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

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

Индексы позволяют находить строки, в которых значения клю­чевых полей совпадают с заданным значением или принадлежат за­данному интервалу.

Хеширование (перемешивание, иногда называли рандомизацией)

Хеширование (или хэширование, англ. hashing, от hash - перемешивание) – это метод прямого произвольного доступа к записям базы данных, обеспечивающий быструю произвольную выборку и редактирование записей.

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

Функцию преобразования ключа обычно называют функцией хеширования (хеш-функцией или функцией свёртки), таких функций много, они имеют разную эффективность. Результат вычисления хеш-функции – хеш-код (или хеш-адрес) – обычно целое число в диапазоне физических номеров строк таблицы.

В общем случае однозначного соответствия между исходными данными и хеш-кодом нет. Поэтому может существовать множество записей данных, дающих одинаковые хеш-коды – т.е. возникают так называемые коллизии. Вероятность возникновения коллизий играет немаловажную роль в оценке «качества» хеш-функций. В идеале для задач поиска хеш-адрес должен быть уникальным, чтобы за одно обращение получить доступ к элементу, характеризуемому заданным ключом (идеальная хеш-функция). Однако на практике идеал приходится заменять компромиссом и исходить из того, что получающиеся наборы с одинаковым хеш-адресом содержат более одного элемента – т.е. допускаются коллизии. Коллизии разрешаются за счет организации списков в дополнительных участках памяти.

На практике часто используют простые хеш-функции, например, f(k)= k mod p, где k – целое число, первичный ключ отношения; р – простое целое число; mod – операция, вычисляющая остаток при целочисленном делении.

Хеширование используется не только в базах данных – это широко используемый метод информатики. Хеширование полезно, когда широкий диапазон возможных значений должен быть сохранен в малом объеме памяти, и нужен способ быстрого, практически произвольного доступа. Заглядывая в адресную книгу, энциклопедию, алфавитный указатель, мы даже не задумываемся, что упорядочение по алфавиту является не чем иным, как хешированием.

В общем, в широком смысле, – хеширование есть разбиение множества ключей (однозначно характеризующих элементы хранения и представленных, как правило, в виде текстовых строк или чисел) на непересекающиеся подмножества (наборы элементов), обладающие определенным свойством. Это свойство и описывается хеш-функцией, и называется хеш-адресом. Решение обратной задачи возложено на хеш-структуры (хеш-таблицы): по хеш-адресу они обеспечивают быстрый доступ к нужному элементу.

В определенном смысле, хеширование похоже на использование массивов для прямого доступа к элементам данным по индексу массива. Как известно, массив задает отображение (A) множества индексов (I) на множество элементов (E), т. е. A: I → E. Массив позволяет по индексу быстро найти требуемый элемент. Хеширование решает в точности такую же задачу. Однако здесь уже в роли индекса выступает хеш-адрес, который определяется как значение некоей хеш-функции, применяемой к уникальному ключу. В этом смысле хеш-структуры можно рассматривать как обобщение массива.

Хеш-таблицы часто применяются в базах данных, и, не менее широко, в языковых процессорах типа компиляторов и ассемблеров, где они эффективно обслуживают таблицы идентификаторов. В таких приложениях, таблица – наилучшая структура данных.

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