Сервер даних

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

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

Архітектура клієнт-сервер складається з клієнтів та серверів. Основна ідея полягає в тому, щоб розміщувати сервери на потужних машинах, а додаткам, що використовують мовні компоненти СКБД, забезпечити доступ до них з менш потужних машин-клієнтів за допомогою зовнішніх інтерфейсів.

Мова SQL[ред. | ред. код]

Більшість СКБД використовують мову SQL (Structured Query Language — мова структурованих запитів), оскільки вона зручна для опису логічних підмножин БД. Призначення SQL:

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

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

Збережені та приєднані процедури[ред. | ред. код]

Існують розширені версії мови SQL, які підтримують такі розширення, як збережені та розширені процедури, а також управління ходом програми через розгалуження та організацію циклів. Збережені процедури — це попередньо відкомпільовані оператори мови SQL, які зберігаються на сервері бази даних, що використовує мову SQL. Клієнт запускає збережену процедуру за допомогою команди EXECUTE <ім'я процедури>. Таким чином, по мережі передаються лише два слова. Оскільки ця процедура вже відкомпільована та оптимізована, серверу не потрібно витрачати час на компіляцію та оптимізацію.
Як збережені процедури зазвичай використовуються часто виконувані запити.
Приєднані процедури (тригери) подібні збереженим процедурам та виконуються у відповідь на події, що відбуваються в БД. Коли з деякими додатками мови SQL пов'язана приєднана процедура, виконання цього оператора завжди запускає цілу серію команд, що входять в цю процедуру. Приєднана процедура автоматично виконує одну чи більше операторів мови SQL, всякий раз, коли виконує оператори INSERT, UPDATE або DELETE. Найважливіше застосування приєднаних процедур полягає в забезпеченні посилальної цілісності.

Операційне середовище серверів[ред. | ред. код]

Приклади серверів БД:

Кожний сервер БД може працювати на певних типах комп'ютерів та мереж. Операційними системами серверів можуть бути MSDOS, OS/2, Xenix, Unix, Dec VMS. Робочі станції користувачів зазвичай працюють під управління MSDOS, OS/2, Xenix, Unix. Існують можливості змішаного використання різних ОС. Велика частина SQL-серверів може зберігати опис БД в системному каталозі, який зазвичай буває доступний користувачам. Для звернення до цього каталогу використовуються SQL-запити. Реляційні СКБД можуть використовувати інформацію, що зберігається в системному каталозі для оптимізації SQL-запитів.

Посилальна цілісність реляційних БД[ред. | ред. код]

Більшість SQL-серверів підтримують посилальну цілісність реляційних БД, що складаються з окремих таблиць, які можуть бути об'єднані на основі загальної інформації.
Розглянемо на наступному прикладі: база даних містить таблицю клієнтів та таблицю замовлень, які пов'язані полем номера клієнта, що містяться в обох таблицях. Оскільки може бути більше одного замовлення від одного клієнта, співвідношення таблиць — «один-до-багатьох». Коли таблиці з'єднані, то таблиця клієнтів є батьківською, а таблиця замовлень — дочірньою. Якщо запис-батько стирається, а відповідні їй дочірні записи — ні, то кажуть, що дочірні записи «осиротіли». Посилальна цілісність означає, що ні в одній таблиці не припустимі записи-«сироти».
Запис може осиротіти трьома способами:

  1. Батьківський запис видалений;
  2. Батьківський запис змінений таким чином, що зв'язок між «батьком» та «нащадками» втрачений;
  3. Введений дочірній запис без відповідного батьківського.

Підтримання посилальної цілісності можливо кількома способами:

  • Через ключі, що зберігаються в таблицях БД (батьківські таблиці містять первинні ключі, що представляють собою комбінації зовнішніх ключів, які можуть бути знайдені всередині кожної з дочірніх таблиць).
  • Використання приєднаних процедур — процедурна посилальна цілісність. Приєднані програми забезпечують посилальну цілісність за рахунок автоматичного виконання операторів SQL всякий раз, коли зустрічається один з операторів UPDATE/INSERT або DELETE (або забороняється видалення батьківського запису, або стираються всі дочірні записи).

Транзакції та цілісність БД[ред. | ред. код]

Транзакція — сукупність логічно взаємопов'язаних запитів, спрямованих на узгоджену зміну деякої множини рядків в одній або декількох таблицях БД. Зазвичай при виконанні транзакцій оновлюється кілька таблиць та індексів, пов'язаних з цими таблицями. Для того щоб гарантувати синхронізацію поновлення та цілісність даних, в серверах зазвичай використовується принцип «все або нічого», що означає, що в БД вносяться або всі оновлення або жодне з них. З цією метою ведеться журнал транзакцій, в якому реєструється інформація про всі затребувані зміни. Цей журнал забезпечує можливість «прокрутити назад» здійснені транзакції та відновити попередній стан БД. Це стає важливо, коли зміни в БД, передбачені в одній транзакції, реалізовані лише частково, наприклад, через збій апаратури.

Узгодженість читання[ред. | ред. код]

Характерна для багатокористувацьких СКБД. Для її реалізації сервери володіють засобами автоматичного блокування. Рівні, на яких блокується таблиця під час оновлень:

  • вся таблиця;
  • сторінка (фізичний блок розміром від 1 до 4 Кбайт, що містить кілька записів).

Тупикові ситуації[ред. | ред. код]

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

Схеми оптимізації робіт на мові SQL[ред. | ред. код]

Мета оптимізації полягає у забезпеченні якомога більш швидкого отримання відповіді на запит з мінімальним числом звернень до БД Існує два типи оптимізації на мові SQL:

  1. Оптимізація по синтаксису;
  2. Оптимізація за витратами;

Оптимізація по синтаксису використовує той факт, що в мові SQL ефективність запиту залежить від того, як він сформульований. В цьому випадку оптимізація залежить від кваліфікації програміста.
При оптимізації за витратами відбувається збір відомостей про БД — числі таблиць, числі рядків, типі даних в кожному рядку, доступності індексування для конкретного стовпця, тощо. Оптимізатор використовує цю інформацію для вироблення найкращого плану обробки запитів.
Переваги методу оптимізації за витратами: завдання визначення найкращого способу виконання запиту перекладається з користувача на процесор БД. Недолік: знаходження оптимального методу само по собі може зайняти багато часу.