Организация данных в памяти эвм с использованием методов вычисления адреса по значениям ключей записей
Термин «методы вычисления адреса», известный как преобразование ключа в адрес, охватывает большую группу разработанных к настоящему времени методов поиска, которые начинаются с вычисления адреса по имени. Такие методы наиболее полно используют свойства памяти с произвольным доступом.
В методах вычисления адреса используется некоторая вычислительная операция, преобразующая значение ключа записи данных в соответствующий ему адрес памяти, т. е. реализуется адресная функция
Методы вычисления адреса подразделяют на две группы:
методы, в которых адресная функция реализует взаимно однозначное соответствие адресов и ключей;
методы перемешивания, в которых адресная функция реализует только однозначное преобразование ключа в адрес; обратное преобразование обычно не имеет места.
Методы первой группы.
Методы адресации с помощью ключа, эквивалентного адресу. Метод используется в случаях, когда такое преобразование возможно. Пусть в запись при ее поступлении в систему в качестве атрибута включается адрес памяти, с которого она размещается. В дальнейшем этот атрибут используется в качестве ключа. Например, адрес записи счета будет печататься в расчетной книжке клиента сберкассы и тогда при последующих обращениях к системе поиск записи счета клиента в БД осуществляется непосредственно по ключу-адресу.
Метод адресации с использованием алгоритма преобразования ключа в адрес. Метод предполагает линейную упорядоченность записей в файле, в котором выполняется адресация, и использование записей фиксированной длины. В соответствии с размером записей и характером их упорядоченности в файле составляют уравнение адресной функции, по которому преобразуются значения ключа записи в ее адрес в файле.
При своей простоте данный метод имеет серьезный недостаток-малое заполнение памяти, отведенной для хранения файла. В файле остаются свободные участки памяти, если ключи не преобразуются в непрерывное множество адресов. В рассматриваемом примере это будет в случае, если не все рейсы выполняются ежедневно. В этом случае по целому ряду адресов записи будут отсутствовать. Рассмотренные методы адресации просты и обеспечивают наиболее высокую скорость поиска данных. Поэтому их чаще всего применяют в диалоговых системах, где время поиска критично.
В рассмотренных методах адресация выполняется в два этапа: вначале ключ преобразуется в относительный адрес (относительно начала файла), а затем относительный адрес преобразуется в машинный. Использование относительных адресов делает организацию данных более гибкой.
Методы второй группы. Методы перемешивания известны также под названием методов хеширования, методов рассеянной памяти, иногда их называют методами рандомизации.
Основная идея хеш-адресации заключается в том, что каждый экземпляр хранимой записи размещается в памяти по адресу, вычисляемому с помощью некоторой адресной функции - хеш-функции - по значению первичного ключа записи. В случае необходимости не обязательно организовывать записи в соответствии со значениями именно первичного ключа. Формально можно выполнять организацию записей по значениям любого из полей, входящих в состав записи. Все определяется конкретным приложением.
Таким образом, чтобы первоначально запомнить экземпляр записи, необходимо вычислить адрес хранения в памяти и поместить экземпляр по этому адресу. При поиске экземпляра записи выполняются те же самые вычисления и запись считывается из памяти по полученному адресу.
Рассмотренные выше методы первой группы, использующие числовое значение первичного ключа в качестве адреса хранимой записи (либо выполняющие взаимно однозначное преобразование значения ключа в адрес), можно использовать только для ограниченного круга приложений. В общем случае эти методы неприменимы потому, что диапазон значений первичного ключа обычно много шире диапазона адресов памяти, выделенных для хранения записей.
Недостатки хеш-адресации. Полученная с помощью хеширования последовательность расположения в памяти экземпляров хранимых записей обычно не совпадает с последовательностью, определяемой первичным ключом. Фактически хранимый файл с хеш-адресацией обычно рассматривают как неупорядочный по значениям ключа. Другой недостаток хеш-адресации - возможность коллизий. Под коллизией понимается такая ситуация, когда для двух различных записей (с разными значениями первичного ключа) вычисляется один и тот же адрес памяти для хранения этих записей. Для обработки коллизий разработаны специальные методы, рассмотренные ниже.