Лекція 8
Ingres: загальна організація системи, основи мови Quel
Історія СУБД Ingres
По своїй значущості для розвитку і поширення реляційного підходу до управління базами даної СУБД Ingres (Interactive Graphics and Retrieval System) знаходиться близько до System R, хоч історія і організація цієї системи багато в чому відрізняється від System R. Для початку коротко розглянемо історію Ingres.
Проект і експериментальний варіант СУБД Ingres були розроблені в університеті Берклі під керівництвом одного з найбільш відомих в світі вчених і фахівців в області баз даних Майкла Стоунбрейкера (Michael Stonebreaker). З самого початку СУБД Ingres розроблялася як мобільна система, що функціонує в середовищі ОС UNIX. Перша версія Ingres була розрахована на 16-розрядні комп'ютери і працювала головним чином на машинах серії PDP. Це була перша СУБД, поширювана безкоштовно для використання в університетах. Згодом група Стоунбрейкера перенесла Ingres в середу ОС UNIX BSD, яка також була розроблена в університеті Берклі. Сімейство СУБД Ingres з університету Берклі прийнято називати "університетської Ingres".
На початку 80-х була утворена компанія RTI (Relational Technology Inc.) для доведення університетських прототипів до рівня комерційних продуктів. З цього моменту стали розрізнювати університетську і комерційну СУБД Ingres. У цей час комерційна Ingres підтримується, розвивається і продається компанією Computer Associates. Зараз це одна з розвиненої комерційної реляційної СУБД.
Хоч в багатьох відносинах комерційні варіанти Ingres є більш розвиненими, ніж університетські, в учбових цілях набагато цікавіше говорити про університетські розробки. По-перше, як у разі будь-якого комерційного продукту, інформація про внутрішню організацію комерційної Ingres в основному носить закритий характер. У той же час, з приводу університетської Ingres є багато високоякісних публікацій. По-друге, університетську Ingres можна випробувати на практиці і навіть подивитися її початкові тексти. Нарешті, по-третє, саме в університетської Ingres були випробувані багато які оригінальні ідеї, що використовуються в цей час в багатьох інших системах. З використанням цієї системи в університеті Берклі (і інших університетах) проводилися багато які учбові і дослідницькі роботи.
Тому в даній лекції ми будемо розглядати організацію університетської версії СУБД Ingres, яка тісно пов'язана з особливостями мови QUEL (в такій же мірі, в який System R тісно пов'язана з особливостями мови SQL). Далі, кажучи про СУБД Ingres, ми будемо в цій лекції мати на увазі університетську Ingres.
8.2. Ingres як UNIX-орієнтована СУБД. Динамічна структура системи: набір процесів
СУБД Ingres проектувалася з розрахунку на використання в середовищі ОС UNIX. Ця система грала роль свого роду віртуальної машини. Орієнтація на використання UNIX наклала істотний відбиток на загальну організацію Ingres, на статичну і динамічну структуру СУБД.
Передусім, всі бази даних, що обслуговуються СУБД Ingres на даному UNIX-комп'ютері, зберігаються в одному піддерево файлової системи. Кожній базі даних відповідає окремий довідник, кожне відношення бази даних (включаючи службові відносини) зберігається в окремому файлі ОС UNIX. Захист програмних компонентів системи від несанкціонованого виконання і баз даних від несанкціонованого доступу засновується головним чином на загальному механізмі захисту файлів ОС UNIX. При установці СУБД Ingres автоматично заводиться спеціальний "користувач" ОС UNIX з ім'ям Ingres, від імені якого працюють всі системні процеси Ingres, і тільки йому дозволяється запускати ці системні процеси і звертатися до файлів баз даних. Більш точне управління доступом бере на себе Ingres.
Існують дві можливості виклику Ingres - в інтерактивному режимі командою мови Shell або з прикладної програми, написаної на мові EQUEL і перетвореній прекомпілятором мови EQUEL до програми на мові Сі. У першому випадку створюється наступна структура процесів:
У другому випадку структура процесів виглядає таким чином:
Процес 1 - це інтерактивний термінальний монітор, що дозволяє користувачеві формулювати, редагувати і виконувати набори команд Ingres (операторів мови QUEL).
У процесі 2 виконується лексичний і синтаксичний аналіз операторів QUEL, модифікація операторів з метою забезпечення цілісності баз даних, контролю доступу, підстановки уявлень, а також синхронізація паралельного доступу до бази даних.
Процес 3 є відповідальним за виконання операторів вибірки, занесення і видалення кортежів. У ньому виконується оптимізація запитів на основі техніки декомпозиції складних запитів. Крім того, для операторів модифікації кортежів проводиться попередня вибірка кортежів, що модифікуються і підготовка їх нових образів для реального виконання модифікації в процесі 4.
Нарешті, в процесі 4 виконуються так звані команди-утиліти - створення і знищення відносин, індексів і т.д., а також згадана відкладена модифікація кортежів.
Процеси пов'язані програмними каналами (pipes) ОС UNIX. Пряма інформація при обробці операторів передається по каналах А, В і C. Результати, включаючи повідомлення про помилки, передаються по зворотних каналах D, Е і F. Процеси працюють суворо синхронно: після посилки прямого повідомлення кожний процес дожидається отримання повідомлення у відповідь, а після посилки повідомлення у відповідь - чекає отримання чергового прямого.
Як видно, динамічна структура системи приблизно однакова у разах інтерактивного використання системи і у разі звернення до системи з прикладної програми. У останньому випадку по природних причинах відсутній лише процес 1, що здійснює функції термінального монітора.
Потрібно зазначити, що на описану структуру вплинув великий чином той факт, що перший варіант Ingres реалізовувався для 16-розрядних комп'ютерів, в яких розмір віртуальної пам'яті процесу був вельми обмежений. Оскільки процеси системи функціонували синхронно, принципової вигоди від наявності декількох процесів не було. Але підхід до розбиття системи на декілька процесів дозволив виробити розумну статичну структуризацію системи, в ряді компонентів якої не використовуються загальні дані. Крім