У нас: 141825 рефератів
Щойно додані Реферати Тор 100
Скористайтеся пошуком, наприклад Реферат        Грубий пошук Точний пошук
Вхід в абонемент





того, з розвитком системи стали використовуватися і реальні можливості розпаралелювання.

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 ім’я_відношення


Сторінки: 1 2 3