1. Страницы с записями во внешней памяти могут располагаться
неравномерно, с различным количеством пустых страниц между ними.
2. Возможно совпадение рассчитанных адресов страниц для двух или
нескольких записей (например адреса, вычисленные для номеров накладных 18,
29, 40, будут равны одному числу – семи).
Совпадение вычисленных адресов называется коллизией, значения данных,
для которых получены одинаковые адреса – синонимами.
Существует много стратегий разрешения коллизий, но основные из них две:
а) с областью переполнения;
б) свободного замещения.
Стратегия разрешения коллизий с помощью области переполнения
Область хранения разбивается на две части: основную область и область
переполнения (рис. 6).
При вводе в базу данных новой записи вычисляется значение хеш-функции,
которое используется для определения места расположения страницы в
основной области памяти. Например, если номер накладной равен 12, запись
будет размещена на странице с адресом 1 (см. обозначения курсивом на рис. 6).
Когда страница с полученным адресом занята и возникает коллизия, новая
запись заносится на первое свободное место в области переполнения. Например,
запись с номером накладной 29, следовательно, значением хеш-функции,
равным 7, будет размещена по адресу 500. В записи-синониме, которая
находится в основной области, делается ссылка на адрес записи, размещаемой в
области переполнения. В ситуациях повторения коллизий (номер накладной
равен 40, значение хеш-функции – 7) вновь вводимая запись помещается на
свободное место в области переполнения (например, если страница с номером
501 занята, по адресу 502). Она становится второй в цепочке синонимов (этим
обеспечивается сокращение времени на размещение новых записей) с помощью
изменения ссылок на адреса синонимов (см. рис. 6).
При поиске нужной записи вычисляется значение ее хеш-функции,
указывающее на адрес страницы в основной памяти. Если эта запись не является
искомой, последовательно просматривается цепочка синонимов до получения
необходимого результата. Очевидно, что скорость поиска существенно зависит
от длины цепочки синонимов. Считается, что в цепочке не должно быть более 10
синонимов [ 4 ].
При удалении записи в основной области памяти на ее место перемещается
вторая запись в цепочке синонимов, при этом все ссылки на синонимы в цепочке