Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lekcii_OBD.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.87 Mб
Скачать

5.Алгоритм роботи скбд при внесенні та видаленні запису в таблицю, що містить індексовані поля з використанням технології в-дерева.

Основною "ізюминкою" B-дерев є автоматична підтримка властивості збалансованості. Розглянемо, як це робиться при виконанні операцій вставки і видалення записів.

5.1.При вставці нового запису в таблицю виконується:

1.Пошук листкової сторінки. Фактично, виконується звичайний пошук по ключу. Якщо в B-дереві відсутній ключ із заданим значенням, то буде отримано номер сторінки, у якій йому слід знаходитись, і відповідні координати усередині сторінки.

2.Переміщення запису на місце. Природно, що вся робота виконується в буферах оперативної пам'яті. Листкова сторінка, у яку потрібно занести запис, зчитується в буфер, і в ньому виконується операція вставки. Розмір буфера повинний перевищувати розмір сторінки зовнішньої пам'яті.

3.Якщо після виконання вставки нового запису розмір використаної частини буфера не перевершує розміру сторінки, то на цьому виконання операції занесення запису закінчується. Сторінка може бути негайно виштовхнута у зовнішню пам'ять, або тимчасово залишатись в оперативній пам'яті в залежності від політики керування сторінками.

4.Якщо ж виникло переповнення сторінки (тобто розмір його використаної частини буфера перевершує розмір сторінки), то виконується розщеплення сторінки. Для цього створюється нова сторінка зовнішньої пам'яті, використана частина буфера розбивається приблизно навпіл (по границі ключа - з початку запису елемента індекса), і друга половина записується в нову виділену сторінку, а в старій сторінці модифікується значення розміру вільної пам'яті. Природно, модифікуються посилання за списком листкових сторінок.

5.Щоб забезпечити доступ від кореня дерева до ново створеної сторінки, необхідно відповідним чином модифікувати внутрішню сторінку, що є предком раніше існуючої листкової сторінки, тобто вставити в неї відповідне значення ключа і посилання на нову сторінку. При виконанні цієї дії може знову відбутися переповнення тепер уже внутрішньої сторінки, і вона також буде розщеплена на дві. У результаті буде потрібно вставити значення ключа і посилання на нову сторінку у внутрішню сторінку-предка вище по ієрархії і т.д.

Граничним випадком є переповнення кореневої сторінки B-дерева. У цьому випадку вона теж розщеплюється на двох, і заводиться нова коренева сторінка дерева, тобто його глибина збільшується на одиницю.

5.2.При видаленні запису виконуються наступні дії:

1.Пошук запису по ключу. Якщо запис не знайдений, то значить видаляти нічого не потрібно.

2.Реальне видалення запису в буфері, у якому прочитана відповідна листова сторінка.

3.Якщо після виконання цієї під операції розмір зайнятої в буфері області виявляється таким, що його сума з розміром лівої (чи правої – в залежності від алгоритму) сусідньої листкової сторінки, більше, ніж розмір сторінки, операція завершується.

4.Інакше виконується злиття з лівою (чи правою – в залежності від алгоритму) сусідньою листковою сторінкою, тобто в буфері генерується новий образ сторінки, що містить загальну інформацію двох сторінок, що об’єднуються.

5.Листкова сторінка, що стала непотрібною, заноситься в список вільних сторінок. Відповідним чином коректується список листкових сторінок.

6.Щоб усунути можливість доступу від кореня до звільненої сторінки, потрібно видалити відповідне значення ключа і посилання на звільнену сторінку з внутрішньої сторінки - її предка. При цьому може виникнути потреба в злитті цієї сторінки з її лівою або правою сусідньою внутрішньою сторінкою і т.д.

Граничним випадком є повне спустошення кореневої сторінки дерева, що можливо після злиття останніх двох нащадків кореня. У цьому випадку коренева сторінка звільняється, а глибина дерева зменшується на одиницю.

Як видно, при виконанні операцій вставки і видалення записів властивість збалансованості B-дерева зберігається, а зовнішня пам'ять витрачається досить ощадливо.

Проблемою є те, що при виконанні операцій модифікації занадто часто можуть виникати розщеплення і злиття. Щоб домогтися ефективного використання зовнішньої пам'яті з мінімізацією числа розщеплень і злиттів, застосовуються більш складні прийоми, у тому числі:

-розщеплення, що випереджають, тобто розщеплення сторінки не при її переповненні, а трохи раніш, коли ступінь заповнювання сторінки досягає деякого рівня;

- переливання, тобто підтримка рівноважного заповнення сусідніх сторінок;

-злиття 3-в-2, тобто породження двох листових сторінок на основі вмісту трьох сусідніх.

Варто зауважити, що при організації мультидоступу (багатокористувацького режиму) до B-дерев, характерного для їх використання в СУБД, приходиться вирішувати ряд нетривіальних проблем, для яких найбільш простий і очевидне рішення монопольного захоплення B-дерева на усе виконання операції модифікації не є припустимим.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]