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

60. Зберігання таблиць.

18.2. Зберігання таблиць

Існують два принципових підходи до фізичного зберігання таблиць.

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

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

  • сумарно в середньому витрачається менше зовнішньої пам'яті, оскільки дублікати значень не зберігаються;

  • за один обмін із зовнішньою пам'яттю в загальному випадку зчитується більше корисної інформації;

  • додатковою перевагою є можливість використання значень стовпця таблиці для оптимізації виконання операцій з'єднання;

  • але при цьому потрібні істотні додаткові дії для зборки цілого рядку (або його частини).

Оскільки набагато поширене зберігання по рядках, ми розглянемо трохи більш докладно цей спосіб зберігання таблиць. Типова структура сторінки даних зображена на рис. 18.2.

Рис. 18.2. Сторінка даних зі збереженням по рядкам

До основних характеристик цієї організації можна віднести наступні:

  • кожний рядок володіє унікальним ідентифікатором, незмінним увесь час існування рядку. Структура ідентифікатора випливає з наведеного вище рис. 18.1.

  • зазвичай кожен рядок зберігається цілком у одній сторінці. З цього випливає, що максимальна довжина кортежу будь-якої таблиці обмежена розмірами сторінки. Виникає питання: як бути з «довгими»  даними, які в принципі не поміщаються в одній сторінці? Застосовуються кілька методів. Найбільш простим рішенням є зберігання таких даних в окремих (поза базою даних) файлах з заміною «довгого» даного в кортежі на назву відповідного файлу. Це рішення сильно обмежують можливість роботи з довгими даними (як, наприклад, видалити кілька байтів з середини 2-гігабайтного рядку?). В даний час все частіше використовується метод, коли «довгі» дані організовуються у вигляді B-дерев (двійкових дерев) послідовностей байтів;

  • як правило, в одній сторінці даних зберігаються рядки тільки однієї таблиці. Існують, однак, варіанти з можливістю зберігання в одній сторінці рядків декількох таблиць. Це викликає деякі додаткові витрати по частині службової інформації (при кожному рядку потрібно зберігати інформацію про відповідну таблицю), але зате іноді дозволяє різко скоротити число обмінів із зовнішньою пам'яттю при виконанні з'єднань;

  • зміна схеми таблиць, які зберігаються, з додаванням нового стовпця не викликає потреби у фізичній реорганізації таблиці. Досить лише змінити інформацію в описувачі таблиці та розширювати рядки тільки при занесенні інформації в новий стовпець;

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

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

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

Що ж до зберігання таблиць по стовпцях, то основна ідея полягає в спільному зберіганні всіх значень одного (або декількох) стовпців. Для кожного рядку таблиці зберігається рядок, який складається з посилань на місця розташування відповідних значень стовпців. Для розподілених баз даних, одним із прийомів є так зване вертикальне розділення таблиць, коли в різних вузлах мережі зберігаються різні проекції даної таблиці. Зберігання таблиці по стовпцях у певному сенсі є граничним випадком вертикального поділу таблиць.