MaxEdu.ru
» » » Ingres: загальна організація системи, основи мови Quel
Вернуться назад

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-розрядних комп'ютерів, в яких розмір віртуальної пам'яті процесу був вельми обмежений. Оскільки процеси системи функціонували синхронно, принципової вигоди від наявності декількох процесів не було. Але підхід до розбиття системи на декілька процесів дозволив виробити розумну статичну структуризацію системи, в ряді компонентів якої не використовуються загальні дані. Крім того, з розвитком системи стали використовуватися і реальні можливості розпаралелювання.
8.3. Структури даних, методи доступу, інтерфейси доступу до даних
Організація даних в базі даних Ingres відрізняється від організації даних в System R передусім тим, що на логічному рівні підтримуються тільки відносини. Для кожного відношення може бути створено декілька індексів, але для індексів не підтримуються які-небудь спеціальні структури даних; вони представляються також у вигляді відносин (для яких, правда, вже не можна створювати індекси).
Як ми вже відмічали, кожне відношення бази даних Ingres зберігається в окремому файлі ОС UNIX. Підтримується декілька способів організації таких файлів: неключова, заснована на хешуванні і індексно-послідовна. При будь-якій організації кортежі відношення зберігаються в спеціальних "первинних" сторінках файлів в тому ж стилі, що і в System R. Відповідно, кожний кортеж володіє унікальним і не змінним під весь час існування кортежу ідентифікатором (tid), який "майже напряму" адресує кортеж.
При неключовій організації відношення файл складається тільки з первинних сторінок. Для пошуку кортежів, що задовольняють умові вибірки, потрібний послідовний перегляд всіх первинних сторінок файла. При організації на основі хешування файл також складається тільки з первинних сторінок, але розташування кортежів в сторінках визначається значенням функції хешування в залежності від встановленого ключа (частини кортежу). Нарешті, при індексно-послідовній організації кортежі відношення заносяться в файл в порядку зростання встановленого ключа. Для прямого доступу по ключу в тому ж файлі підтримується спеціальна індексна таблиця. Помітимо, що в початкових варіантах Ingres впорядкованість кортежів не підтримувалася в динаміці, тобто могла порушуватися при вставці нових або модифікації існуючих кортежів. Структура відношення може бути змінена в динаміці шляхом виконання спеціального оператора мови QUEL.
Для кожного з трьох видів організації відносин підтримувався набір функцій доступу (методів доступу) з фіксованим інтерфейсом. Це дозволяло додавати нові методи доступу без вимоги переробки частин системи, які ними користувалися.
Кожний набір функцій включав наступні функції:
1) openr (descriptor, mode, relation-name)
Ця функція відкриває відношення як файл ОС UNIX в режимі, що визначається значенням параметра mode (на читання або на читання і модифікацію). Крім того, у вихідний параметр descriptor заноситься інформація, що характеризує вказане відношення на основі системних каталогів. Після виконання функції openr параметр descriptor є обов'язковим вхідним параметром для всіх інших функцій.
2) get (descriptor, tid, limit_tid, tuple, next_flag)
Якщо функція викликається в режимі прямої вибірки кортежу (значення параметра next_flag є false), то у вихідний параметр tuple заноситься кортеж з ідентифікатором tid. При виклику в режимі сканування (next_flag = true) функція виконує при кожному виклику послідовну вибірку кортежів починаючи з кортежу з ідентифікатором tid і кінчаючи кортежем з ідентифікатором limit_tid. Початкові установки tid і limit_tid проводяться функцією find.
3) find(descriptor, key, tid, match_mode)
Функція встановлює у вихідний параметр tid ідентифікатор першого або останнього кортежу відношення, який відповідає значенню заданого ключа у відповідність з режимом, що задається вхідним параметром match_mode. Якщо відношення має неключову структуру, або якщо задане значення ключа не відповідає типу ключового атрибута відношення, в tid записується ідентифікатор фізично першого (або останнього) кортежу відношення.
4) paramd (descriptor, access_characteristics_structure)
5) parami (descriptor, access_characteristics_structure)
Ця пара функцій дозволяє дізнатися про ключові атрибути відношення, використання яких може оптимізувати доступ до цього відношення. Відповідна інформація записується у вихідний параметр access_characteristics_structure і використовується системою для вибору значення параметра match_mode при подальших викликах функції find.
6) insert(descriptor, tuple)
Заданий кортеж заноситься у вказане відношення у відповідності зі структурою відношення і значенням ключових полів.
7) replace(descriptor, tid, new_tuple)
8) delete(descriptor, tid)
Функції замінюють або видаляють кортеж відносин з вказаним ідентифікатором.
9) closer(descriptor)
Функція закриває відповідний файл ОС UNIX і, можливо, оновлює вміст відносин-каталогів.
Помітимо, що перераховані функції працюють тільки з вказаним відношенням. Зокрема, якщо для відношення визначені індекси, то їх автоматична модифікація при зміні відносин не проводиться. Крім того, функції не виконують ніяких дій по журналізації змін або синхронізації паралельного доступу.
8.4. Загальна характеристика мови QUEL. Мова програмування EQUEL
Маніпуляційна частина мови QUEL є чистою реалізацією реляційного числення кортежів. Це означає, що в операторах вказуються умови, що накладаються на кортежі, з якими необхідно виконати відповідні дії.
Основний набір операторів маніпулювання даними включає оператори RETRIVE (вибрати), APPEND (додати), REPLACE (замінити) і DELETE (видалити). Перед виконанням будь-кого з цих операторів необхідно визначити змінні, що використовуються в них кортежів, зв'язавши їх з відповідними відносинами шляхом виконання оператора RANGE:
RANGE OF variable-list IS relation-name
Продемонструємо основні властивості операторів QUEL на прикладах. Будемо використати базу даних СТУДЕНТИ і ГРУПИ:
RANGE OF S IS СТУДЕНТИ
RANGE OF G IS ГРУПИ
Приклад 1. Вибрати імена студентів, куратором яких є Іванов.
RETRIEVE (S.СТУД_ІМ’Я)
WHERE (S.ГРУП_НОМЕР = G.ГРУП_НОМЕР AND
G.КУРАТ_ІМ’Я = "ІВАНОВ")
Приклад 2. Занести у відношення НЕУСПІВАЮЧІ номери студентських квитків і імена неуспішних студентів.
RETRIEVE INTO НЕУСПІВАЮЧІ (S.СТУД_НОМЕР, S.СТУД_ІМ’Я)
WHERE (S.СТУД_УСП = "NO")
Приклад 3. Вивести прізвища студентів, що одержують стипендію нижче середньої.
RETRIEVE (S.СТУД_ІМ’Я)
WHERE (S.СТУД_СТИП < AVG (S.СТУД_СТИП))
Як і в SQL, підтримуються агрегатні функції COUNT, SUM, MAX, MIN і AVG.
Приклад 4. Включити в групу 310 студента Петрова.
APPEND TO СТУДЕНТИ (СТУД_ІМ’Я = "ПЕТРОВ", ....)
Приклад 5. Збільшити стипендію в 1,5 рази всім успішним студентам.
REPLACE S (СТУД_СТИП BY СТУД_СТИП * 1,5)
WHERE (S.CТУД_УСП = "YES")
Приклад 6. Видалити з списку груп всі групи, в яких не вчиться жоден студент.
DELETE G
WHERE (G.ГРУП_РОЗМІР = 0)
Крім операторів маніпулювання даними, мова QUEL містить оператори для створення і знищення відносин:
CREATE ім’я_відношення (ім’я_атрибута IS тип_атрибута,. ..)
DESTROY ім’я_відношення
а також два оператори зміни структур даних, що зберігаються:
MODIFY ім’я_відношення TO структура_пам’яті
ON (ключ1, ключ2,. ..) і
INDEX ON ім’я_відношення IS ім’я_індекса (ключ1, ключ2,. ..)
Оператор MODIFY змінює структуру відношення, що зберігається відповідно до параметра структура_пам’яті і заданого набору ключових атрибутів. Оператор INDEX створює окрему індексну структуру для заданих полів даного відношення. Створені індекси використовуються системою для оптимізації виконання операторів маніпулювання даними. Узгодженість вмісту відносин і індексів підтримується системою автоматично.
Мова QUEL містить також оператори визначення обмежень цілісності, представлень і обмежень доступу. На них ми зупинимося трохи пізніше.
У тому вигляді, в якому ми його стисло описали, мова QUEL призначена для інтерактивної роботи з базами даних Ingres. Для програмування прикладних інформаційних систем, які повинні взаємодіяти з базами даних, була розроблена мова програмування EQUEL, що є, по суті, розширенням мови програмування Сі шляхом вбудовування в нього операторів мови QUEL. Мова EQUEL визначається таким чином:
Будь-який оператор мови Сі є оператором мови EQUEL.
Будь-який оператор мови QUEL, якому передують два знаки '#', є допустимим оператором мови EQUEL.
Змінні Сі-програми можуть використовуватися в операторах QUEL, замінюючи імена відносин, імена атрибутів, елементи списку вибірки або константи. Ті змінні Сі-програми, які використовуються таким чином, повинні при своєму оголошенні бути помічені подвійним знаком '#'.
Оператор RETRIEVE (без INTO) супроводиться складовим оператором мови Сі, який виконується по одному разу для кожного вибраного кортежу.
Приклад програми на мові EQUEL, що видає номер групи на ім'я студента:
main()
{
## char stud_name[20];
## int group_number;
while (READ(stud_name_)
{
## RANGE OF S IS STUDENTS
## RETRIEVE (group_number = G.GROUP.NUMBER)
## WHERE (S.STUD_NAME = stud_name)
{
PRINT ("The group number of 'stud_name' is 'group_number');
}
}
}
Програма на мові EQUEL обробляється спеціальним препроцесором, який перетворює її в звичайну Сі-програму, що містить виклики Ingres з передачею як параметри текстів операторів мови QUEL. Подальшу схему ми вже обговорювали.
8.5. Загальний підхід до організації уявлень, обмежень цілісності і контролю доступу
Ми об'єднали ці три уявні не дуже близькими теми, тому що в Ingres для розв'язання відповідних проблем застосовується єдиний підхід, заснований на модифікації операторів SQL. Почнемо з уявлень. Як і в System R (точніше, в мові SQL), представлення бази даних - це деякий іменований запит з іменованими полями результуючого відношення.
Наприклад, оператор
DEFINE VIEW GROUP310
(STUD_NUMBER = S.STUD_NUMBER,
STUD_NAME = S.STUD_NAME,
STUD_STATUS = S.STUD_STATUS)
WHERE (S.GROUP_NUMBER = 310)
визначає відношення, що представляється, що включає номери студентських квитків і імена студентів з групи 310.
Передбачимо, що ми хочемо тепер знайти неуспішних студентів у відношенні GROUP310:
RANGE OF G310 IS GROUP310
RETRIEVE (G310.STUD_NAME)
WHERE (G310.STUD_STATUS = "NO")
Тоді після модифікації цей запит буде виглядати таким чином:
RETRIEVE (STUD_NUMBER = S.STUD_NUMBER, STUD_NAME =
S.STUD_NAME, STUD_STATUS = S.STUD_STATUS)
WHERE (S.GROUP_NUMBER = 310 AND
S.STUD_STATUS = "NO")
На тих же самих принципах побудований контроль доступу до даних і контроль цілісності баз даних. Наприклад, обмеження доступу до відношення СТУДЕНТИ може бути визначено таким чином:
DEFINE PERMIT RETRIEVE, REPLACE
ON S
TO PETROV
AT TTA5
FROM 9:00 TO 15:00
ON MON TO FRI
WHERE (S.GROUP_NUMBER = 310)
Це означає, що Петрову дозволяється читати і модифікувати відношення СТУДЕНТИ з термінала TTA5 у час від 9 до 15:00 в робочі дні тижня, причому тільки ті кортежі, які задовольняють сформульованій умові. При компіляції будь-якого оператора QUEL над відношенням СТУДЕНТИ цей оператор буде модифікуватися таким чином, щоб він був виконаний при виконанні умов хоч би одного з обмежень доступу.
Аналогічно, якщо для відношення СТУДЕНТИ визначено обмеження цілісності
DEFINE INTEGRITY
ON S
WHERE (S.STUD_STIP < 150,000)
то до умови будь-якого оператора зміни кортежів відношення СТУДЕНТИ буде через AND додаватися умови всіх обмежень цілісності, визначених для цього відношення.
На закінчення цієї лекції помітимо, що звичайно, в Ingres підтримується механізм паралельних транзакцій з відповідною синхронізацій доступу і журналізація змін баз даних. Однак нам не відомі які-небудь особливості механізмів, що застосовуються. На особливостях оптимізації операторів QUEL ми зупинимося в лекції, присвяченій оптимізаціям в мовах баз даних.

Внимание, отключите Adblock

Вы посетили наш сайт со включенным блокировщиком рекламы!
Ссылка для скачивания станет доступной сразу после отключения Adblock!

Скачать
Рефераты по информатике Історія СУБД Ingres По своїй значущості для розвитку і поширення реляційного підходу до управління базами даної СУБД Ingres (Interactive Graphics and
Оценок: 329 (Средняя 5 из 5)

Специалисты RetsCorp работают в digital-сфере более 7 лет. За это время мы разработали более 500+ успешных проектов. Основываясь на своем опыте и знании рынка, мы с уверенностью можем сказать, что будет работать, а что — нет. Заказывая создание лендинга для бизнеса в нашей студии, вы получаете работающие решения, необходимые именно вашему бизнесу.

Сотрудничая с нами, вы будете не клиентом, а нашим партнером. Благодаря этому мы будем развивать ваш бизнес как собственный. Мы так же как и вы заинтересованы в успехе проекта, поскольку ваша успешность будет нашей рекламой.

© 2014 - 2022 MaxEdu.ru