
Область переполнения
Адрес (номер страницы) |
Номер накладной |
Название товара |
Арти- кул |
Коли-чество |
Дата поставки |
Ссылка на синонимы |
|
29 |
Брюки |
750 |
90 |
13.12.05 |
|
501 |
96 |
Сапоги |
220 |
120 |
13.12.05 |
|
|
40 |
Костюм |
300 |
35 |
14.12.05 |
|
503 |
|
|
|
|
|
|
504 |
|
|
|
|
|
|
505 |
|
|
|
|
|
|
Рис. 6. Пример хеширования с областью переполнения
Стратегия разрешения коллизий с помощью свободного замещения
В рамках даної стратегії пам'ять не поділяється на окремі галузі. Якщо в базу даних вводиться новий запис і значення хеш-функції відповідає адресі порожньої сторінки, запис поміщається на цій сторінці і стає першим в ланцюжку синонімів. Коли виникає колізія, новий запис розміщується на першому вільному місці в пам'яті. За допомогою посилань створюється ланцюжок синонімів, при цьому використовуються ті ж принципи, що і в стратегії з областю переповнення.
Технології пошуку і видалення записів в обох стратегіях також аналогічні.
При реалізації стратегії розв'язання колізій за допомогою вільного заміщення може виникнути ситуація, коли запис, що розміщується на першій вільній сторінці в пам'яті, займає місце, на яке пізніше буде претендувати запис, значення хеш-функції якої відповідає адресі цієї сторінки. У такій ситуації запис, що займає своє місце «незаконно», переміщається на іншу сторінку, при цьому змінюються посилання в ланцюжку синонімів.
Основною проблемою хешування є складність вибору оптимальної хеш-функції. При виконанні даної роботи аналізуються розміри записів та сторінок зовнішньої пам'яті, ймовірне розподіл одержуваних адрес. Невдало вибрана хеш-функція може викликати нерівномірний розподіл записів у пам'яті або формування занадто довгих ланцюжків синонімів.
Дуже складною є ситуація, коли кількість запам'ятовуються записів більше, ніж передбачалося, і необхідно збільшити місце в пам'яті для їх зберігання або розміри таблиці хешування. У цій ситуації потрібно виконати повне повторне хешування.
Слід мати на увазі, що хеширування дозволяє організувати швидкий пошук інформації тільки по одному полю, дані якого використовувалися для хешування. Не можна зберігати записи в порядку, що визначається декількома хеш-функціями.
Незважаючи на зазначені недоліки хешування, даний спосіб організації зберігання і швидкого витягання необхідних даних широко застосовується, в першу чергу в об'єктно-орієнтованих базах даних [12].