ску, з урахуванням того, що номер першої вільної записи в області переповнення зберігається у вигляді системної змінної.
. 5 Дозвіл колізії методом вільного заміщення
При цій стратегії файловий простір не поділяється на області, але для кожного запису додаються два покажчики: покажчик на попередній запис у ланцюжку синонімів і покажчик на наступний запис в ланцюжку синонімів. Відсутність відповідного посилання позначається спеціальним символом, наприклад нулем. Для кожного нового запису обчислюється значення хеш-функції і, якщо даний адреса вільна, запис потрапляє на задане місце і стає першою в ланцюжку синонімів.
Якщо запис, який займає необхідне місце, не є першим записом у ланцюжку синонімів, значить, вона займає дане місце «незаконно» і при появі «законного власника» повинна бути «виселена», тобто переміщена на нове місце.
Після переміщення «незаконної» записи знову вноситься запис займає своє законне місце і стає першим записом у новій ланцюжку синонімів.
. 6 Індексні файли
Незважаючи на високу ефективність хеш-адресації в файлових структурах не завжди вдається знайти відповідну функцію, тому при організації доступу по первинному ключу широко використовуються індексні файли.
Індексні файли можна представити як файли, що складаються з двох частин. Спочатку йде індексна область, яка займає деякий ціле число блоків, а потім йде основна область, у якій послідовно розташовані всі записи файлу.
У деяких системах індексними файлами називаються також і файли, організовані у вигляді інвертованих списків, які використовуються для доступу по вторинному ключу. Залежно від організації індексного і основний областей розрізняють два типи файлів: з щільним індексом (індексного-прямі файли) і з нещільним індексом (індексного-послідовні файли).
. 6.1 Файли з щільним індексом, або індексного-прямі файли.
У цих файлах основна область містить послідовність записів однакової довжини, розташованих у довільному порядку, а структура індексного запису в них має наступний вигляд:
Таблиця
Значення ключаНомер записи
Тут значення ключа - це значення первинного ключа, а номер запису - це порядковий номер запису в основній області, яка має дане значення первинного ключа.
Найбільш ефективним алгоритмом пошуку на упорядкованому масиві є логарифмічний, або бінарний, пошук. У теорії ймовірності його називають методом половинного ділення. Максимальне число кроків пошуку визначається двійковим логарифмом від загального числа елементів (цілей) в шуканому просторі пошуку:
де N - число елементів.
При пошуку записів істотним є тільки число звернень до диска за заданим значенням первинного ключа. Спочатку проводиться пошук в індексному області, де застосовується двійковий алгоритм пошуку індексного запису, а потім шляхом прямої адресації в основний області проводиться пошук по номеру запису. Для того щоб оцінити максимальний час доступу до запису, необхідно визначити число звернень до диска в процecce пошуку.
Відповідно до формули число звернень до диска при пошуку записи визначиться наступним чином:
де - число індексних блоків, в яких розміщуються всі записи.
Враховуючи що після пошуку запису в індексному блоці потрібно ще раз звернутися до основної області, у формулі, додалася одиниця (+1).
Отже, способи організації файлів баз даних та відповідні їм фізичні моделі повинні бути спрямовані на скорочення часу звернення до дискового простору при її пошуку і скороченню часу на додавання і коригування змісту баз даних. На це і спрямований метод організації файлів з нещільним індексом.
. 6.2 Файли з нещільним індексом, або індексного-послідовні файли
Структура записів даних в таких файлах має вигляд, представлений на рис. 4.
При такій організації файлової структури процеси додавання нових записів відрізняються від аналогічних дій у файлах з щільним індексом. Кожна нова запис заноситься в відповідний блок на місце, визначене значенням ключового поля. У цьому випадку виконується наступна послідовність дій:
- визначається номер блоку основної області, в який необхідно помістити новий запис;
- знайдений блок зчитується в оперативну пам'ять;
- в оперативній пам'яті здійснюється коректування блоку;
- відкоригований блок записується на диск на колишнє місце...