Firebird

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук
Firebird
LogoFirebird.pngЛоготип Firebird
Розробник(и) спільнота Firebird
Стабільний випуск 2.5.2 (6 листопада 6 листопада 2012; 630 днів тому)
Нестабільний випуск 3.0 Alpha (1 серпня 2013; 362 дні тому)
Операційна система Кросплатформне програмне забезпечення
Тип Реляційна СКБД
Ліцензія Ліцензія IDPL, InterBase Public License, Mozilla Public License 1.1
Сайт www.firebirdsql.org

Firebird (іноді FirebirdSQL) — компактна, крос-платформова, вільна реляційна система керування базами даних, що реалізує більшість функцій ANSI SQL 2003. Вона може запускатись на більшості Unix-систем (в тому числі Linux та FreeBSD) та Windows.

Основні можливості[ред.ред. код]

  • Відповідність вимогам ACID: Firebird спеціально спроектовано таким чином, щоб задовільняти вимоги «атомарності, несуперечності, ізоляції та довговічності» транзакцій (англ. «Atomicity, Consistency, Isolation and Durability»).
  • Версійна архітектура: основна особливість Firebird — версійна архітектура, що дозволяє серверу обробляти різні версії одного запису в будь-який час таким чином, що кожна транзакція бачить свою версію даних, не заважаючи сусіднім. Таким чином читаючі транзакції не блокують пишучі, і навпаки. Окрім того, це дає можливість відмовитись від логу транзакцій і таким чином зменшити ймовірність пошкодження службової інформації бази даних.
  • Збережені процедури: за допомогою мови PSQL (процедурна SQL) можна створювати складні збережені процедури для обробки даних на боці сервера. Таким чином можна виносити на сторону сервера значну частину бізнес-логіки програмного пакету чи формувати дані для звітів.
  • Події: збережені процедури та тригери можуть ґенерувати події, на які, в свою чергу, може підписатися клієнтська програма і відповідним чином їх обробляти.
  • Генератори: дають можливість просто реалізовувати автоінкрементні поля; оскільки вони працюють незалежно від транзакцій, то можуть використовуватись для генерації первинних ключів чи керування тривалими запитами в інших транзакціях.
  • Бази даних в режимі «лише читання»: спрощують поширення даних наприклад на компакт-дисках, особливо в поєднанні з вбудованою (embedded) версією сервера.
  • Повний контроль над транзакціями: одна клієнтська програма може одночасно виконувати декілька транзакцій, включно з різними рівнями ізоляції. Окрім того, доступні протокол двофазного підтвердження транзакцій (що забезпечує гарантовану стійкість при роботі з кількома БД), оптимістичне блокування даних (блокується не вся сторінка даних, а лише змінені записи), точки збереження транзакцій та автономні транзакції (починаючи з версії 2.5).
  • Резервне копіювання на лету: завдяки в тому числі і версійній архітектурі немає потреби зупиняти сервер для резервування бази даних. Процес резервного копіювання зберігає стан бази даних на момент початку резервування, не шкодячи роботі інших клієнтів. Додатково існує можливість інкрементного резервування бази даних (починаючи з версії 2.0).
  • Тригери: для будь-якої таблиці можна назначити декілька тригерів, що спрацюють до чи після додавання, оновлення чи вилучення даних. У тригерах використовується мова PSQL, що дозволяє задавати початкові значення даних, перевіряти їх цілісність, збуджувати події та ін. Починаючи з версії 1.5 у Firebird з'явились універсальні тригери, що дозволяють обробляти вставку, оновлення та вилучення даних в одному місці.
  • Зовнішні функції: можна реалізувати за допомогою будь-якої мови програмування та у вигляді бібліотек користувацьких функцій (англ. UDF — User Defined Function) під'єднаних до сервера.
  • Набори символів: Firebird підтримує багато міжнародних наборів символів з багатьма варіантами сортування, зокрема типовий для українських користувачів Windows набір символів Win1251 підтримує три варіанти сортування, в тому числі win1251_ua, що дозволяє коректно сортувати отримані з бази дані з українськими символами на боці сервера. Окрім того, Firebird повністю підтримує Unicode, що дає можливість працювати з будь-якими наборами символів.
  • Firebird повністю підтримує стандарт SQL-92 та реалізує більшу частину стандартів SQL-99 i SQL-2003. Сюди входять вирази DML/DDL, об'єднання запитів, вирази UNION, DISTINCT, підзапити (IN, EXISTS), агрегатні функції (AVG, SUM, MIN, MAX, LIST (починаючи з версії 2.1)), вбудовані функції (ABS, CEIL, REPLACE, GEN_UUID тощо), обмеження цілісності (PRIMARY KEY, UNIQUE, FOREIGN KEY), та всі загальні типи даних SQL.

Історія розвитку[ред.ред. код]

РСКБД Firebird бере свій початок від іншої СКБД — Interbase американської фірми Borland. 25 липня 2000 року ця фірма оголосила про випуск джерельних кодів СКБД Interbase 6.0 у відкритий доступ. На їх основі почало розвиватись два проекти — власне Firebird та Yaffil («дятел»), що розроблявся російськими програмістами, та продовжилась розробка Interbase. Проект Yaffil у 2003 році приєднався до Firebird.

Версії[ред.ред. код]

  • 1.0 (12 березня 2002 року)- перша версія. Головні зміни: підтримка великих розмірів БД, підтримка нестандартних портів для підключення, можливість агрегації даних за UDF, можливість перестворення таблиць та процедур без їх вилучення, виправлення численних помилок.

Всього було випущено чотири релізи цієї гілки (до 1.0.3), наразі її розвиток і підтримку зупинено.

  • 1.5 (5 лютого 2004 року) — перехідна версія. Головні зміни: підтримка нових типів даних, єдині тригери на різні події, точки збереження (інакше вкладені транзакції), підтримка можливості песимістичного блокування, підтримка динамічних запитів (через execute statement), підтримка псевдонімів (аліасів) для баз даних.

Всього було випущено шість релізів цієї гілки (останній 1.5.5 від 12 грудня 2007 року[1]). Наступні релізи будуть містити лише критичні оновлення безпеки.

  • 2.0 (15 листопада 2006 року) — перша версія, що несумісна на рівні формату файлів з СКБД Interbase. Головні зміни: підтримка виведених (derived) таблиць в запитах, іменовані курсори в процедурах, збільшення розміру полів, що можуть бути проіндексовані, повніша підтримка стандарту SQL-99, анонімні блоки вибірки (execute block), інкрементальний бекап.

Наразі випущено 7 релізів версії (2.0.6 від 22 червня 2010 року є останнім). Нотатки до випуску цієї версії доступні в форматі PDF [1]. 2012 року вийде оновлення 2.0.7[2].

  • 2.1 (18 квітня 2008 року) — розвиток 2-ї версії. Головні зміни: підтримка таблиць моніторингу запитів, транзакцій та підключень, підтримка тимчасових таблиць, повний перехід на Unicode, нові агрегатні та вбудовані функції, підтримка NT-автентифікації, покращення мережевого протоколу (для роботи на повільних лініях), підтримка доменів в процедурах, підтримка сумісності текстових блобів та рядків, тригери рівня бази даних та транзакції, 64-бітна версія під Windows. Наразі випущено третій fix-реліз (2.1.3) [3]

21 червня 2012 року вийшло оновлення 2.1.5[4].


  • 2.5 (4 жовтня 2010 року) — подальший розвиток 2-ї версії. Серед основних нововведень найголовнішими є: повноцінна реалізація багатопотоковості клієнтської бібліотеки; створення нового типу сервера з архітектурою SuperClassic; автономні транзакції в PSQL; можливість додавання/зміни/вилучення користувача в DSQL, а не через використання сервісів чи утиліт; можливість міжбазових запитів; асинхронне завершення з'єднань; суттєве розширення моніторингу бази даних — можливість відслідковувати поточні запити SQL, примусово завершувати їх тощо.

Огляд версії доступний в форматі HTML[5]

6 листопада 2012 року було випущено оновлення 2.5.2[6].

3.0[ред.ред. код]

  • Гілка 3.0 переписана на мові C++ і відрізняється переробленою архітектурою, оптимізованою для використання на багатоядерних системах;
  • Новий об'єктно-орієнтований C++ API для розробки застосунків;
  • Нова гнучка система конфігурування;
  • Додаткові моделі автентифікації;
  • Підтримка агрегування прав доступу;
  • Зовнішні збережені процедури, тригери і функції (на Java, C++ та іншими мовами);
  • Підтримка завдання схем шифрування даних;
  • Можливість визначення користувацьких PSQL функцій і DDL тригерів;
  • Засоби для підключення розширень для моніторингу;
  • Можливість завдання тригерів, що спрацьовують при вилученні або зміні даних;
  • Реалізація повноцінного логічного типу BOOLEAN;
  • Можливість завдання таймауту, що обмежує час виконання запиту

Особливості доступу та оброблення даних в Firebird[ред.ред. код]

PSQL, DSQL та ESQL[ред.ред. код]

PSQL (Procedural SQL) — підмножина SQL в Firebird, за допомогою якої пишуться збережені процедури та тригери. Надає можливість програмісту обробляти даних у процедурному стилі — наприклад, за допомогою циклів.

Приклад

CREATE OR ALTER PROCEDURE SOME_PROC(
    IN_ID INTEGER)
RETURNS (
    OUT_ID INTEGER)
AS
BEGIN
   while (IN_ID < 10) do
    BEGIN
     OUT_ID = IN_ID;
     IN_ID = IN_ID + 1;
     suspend;
    END
END

DSQL (Dynamic SQL) — підмножина SQL, за допомогою якої здійснюються запити до даних. Підтримуються нейменовані параметри. Приклад

SELECT some_field1 FROM some_table WHERE some_field2=? AND some_field3 containing 'Wikipedia'

ESQL (Embedded SQL) — підмножина SQL, що використовується для написання швидкодіючих програм, де запити до даних є ключовими словами мови програмування. Після написання текст програми оброблюється спеціальним препроцесором (gpre), що входить до дистрибутиву. Застосовувався в програмах на мові С, проте в наш час[Коли?] практично вийшов з ужитку.

Не слід плутати Embedded SQL з Embedded версією серверу.

Приклад

EXEC SQL
BEGIN DECLARE SECTION;
char department[26], dept_no[16];
int dept_num;
EXEC SQL
END DECLARE SECTION;
. . .
printf("Enter name of department: ");
gets(department);
printf("\nEnter department number: ");
dept_num = atoi(gets(dept_no));
EXEC SQL
INSERT INTO COUNTRIES (DEPT_NO, DEPARTMENT)
VALUES (:dept_num, :department);

Альтернативний доступ до даних[ред.ред. код]

Окрім доступу через SQL, Firebird має можливість здійснювати операції з даними за допомогою GDML. Наразі цей спосіб є застарілим.

Доступ до Firebird[ред.ред. код]

Доступ до баз даних Firebird може здійснюватися через розподілену бібліотеку доступу (dll або so, залежно від платформи) — такий спосіб є стандартним; сама бібліотека є в комплекті дистрибутиву. Також є можливість доступу через java і .net провайдери.

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

Окрім того, є достатньо багато обгорток під різні мови програмування для цієї бібліотеки, що звільняють програміста від рутинної низькорівневої роботи. Так, для Delphi популярними є бібліотеки IBX, FibPlus, UIB. Для С++ — IBPP. Підтримка вбудована і в популярні скриптові мови, такі як PHP і Python.

Обмеження Firebird[ред.ред. код]

Розмір бази даних — необмежено (залежить від можливостей файлової системи)

Розмір таблиці бази даних — 32 ТБ

Максимальна ширина вибірки (сумарно всі поля; не враховуючи блоби; враховується фактичний розмір рядкових даних) — 64 Кб.

Індексів на таблицю — 850

Довжина об'єкта метаданих (назва таблиці, процедури тощо) — 27 символів.

Повний список обмежень

Додаткова інформація[ред.ред. код]

Апаратно-програмні вимоги та обмеження[ред.ред. код]

Firebird існує у версіях для Unix (Linux, FreeBSD, Solaris, MacOS, HP-UX) та Windows і вимоги до апаратного забезпечення залежатимуть також від типу ОС, котра обслуговує сервер. Окрім того вимоги знаходяться в прямій залежності від очікуваного завантаження сервера баз даних, обсягу оброблюваних даних та кількості одночасно працюючих користувачів і говорити про конкретні цифри непросто. Проте загалом ці вимоги доволі низькі: при незначних навантаженнях та обсягах баз даних можна очікувати пристойної роботи на сервері з центральним процесором частотою 100—200 МГц та обсягом оперативної пам'яті 96-128 МБ.

Конфігурації сервера[ред.ред. код]

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

  • Класичний сервер (classic server) — на кожне клієнтське з'єднання породжується новий процес; оптимізована для використання на багатопроцесорних комп'ютерах
  • Суперсервер — всі з'єднання працюють у одному процесі; менші вимоги до пам'яті при кращій швидкодії на однопроцесорних машинах.
  • Вбудований сервер (embedded) — весь сервер знаходиться у декількох бібліотеках (існує версія Yaffill Personal з єдиною бібліотекою); ідеально підходить для однокористувацьких систем, окрім іншого не вимагає встановлення.
  • Архітектура SuperClassic — нова архітектура, що поєднує в собі частини classic та super. Всі з’єднання працюють в одному процесі, але на кожне з’єднання створюється окремий потік. Вбудований сервер з версії 2.5 працює як SuperClassic.

Ліцензування[ред.ред. код]

Firebird випускається на умовах Публічної ліцензії Interbase (англ. IPL — InterBase Public License) та Початкової розробницької публічної ліцензії (англ. IDPL — Initial Developer's Public License), умови котрих збігаються з умовами Публічної ліцензії Mozilla версії 1.1. Це означає що Firebird повністю безкоштовний для використання та поширення. Відкриття джерельних кодів продукту, що використовує Firebird, не вимагається незалежно від ліцензії, під котрою цей продукт поширюється. Але у випадку, якщо ви модифікували джерельний код сервера, ви зобов'язані опублікувати його.

Конфлікт назв з Mozilla Firefox[ред.ред. код]

У квітні 2003 року Фонд Mozilla (англ. Mozilla Foundation) вирішив перейменувати свій оглядач тенет з «Фенікс» (Phoenix) на «Вогнептах» (Firebird). Це рішення викликало спротив Проекту Firebird через плутанину, що могла виникнути між користувачами, які були б введені в оману існуванням двох різних програм з однаковими назвами. Диспут продовжувався до того часу, поки розробники Mozilla не перейменували свій проект на «Mozilla Firebird». У своєму зверненні вони також вказали, що «Mozilla Firebird» — це лише кодова назва проекту. 9 лютого 2004 року Mozilla перейменувала свій оглядач на «Firefox», що й завершило конфлікт.

Поширені міфи[ред.ред. код]

  • Firebird - це «безкоштовний Interbase »
Firebird перших версій базувався на кодовій базі Interbase 6.0 Open Source Edition. Проте починаючи з версій Firebird 1.5 i Interbase 7.0 ці СКБД несумісні по структурі файлу бази даних і розвиваються кожна в своєму напрямі.
  • Можна створити «невідновлювану резервну копію» бази даних
Інструмент gbak при створенні резервної копії записує спершу метадані, а потім почергово сторінки даних з робочої бази. Якщо в метаданих, наприклад, є обмеження not null для значення стовпця, котре було внесене в процесі роботи з базою вже після того, як в стовпці були значення null, то при спробі відновлення такої бази даних ми отримаємо помилку. Проте сам gbak має параметри, що дозволяють коректно обробити такі помилки. Окрім того, починаючи з версії 2.0 появився інструмент nbackup, котрий резервує бази таким чином, що подібні помилки просто не проявляються (що, проте, не означає, що вони щезають самі по собі).
  • Firebird не має логу транзакцій і тому не дає можливості (відновити базу даних, проаналізувати діяльність користувачів та інше)
На відміну від MS SQL чи Oracle, Firebird є версійною СКБД, для котрої лог транзакцій не потрібен в принципі. Щодо відновлення бази даних див. вище. Щодо реєстрації/аналізу діяльності користувачів - вона реалізується з допомогою тригерів.

Див. також «Міфи про Interbase та Firebird»

Інструменти[ред.ред. код]

  • Interbase Expert - комерційне середовище розробки баз даних для ІБ/ФБ, проте безкоштовне для користувачів з встановленою локаллю WIN1251 (ОС Windows)
  • Database Master — FireBird Management Software
  • FlameRobin - вільне середовище розробки баз даних для ІБ/ФБ (кросплатформне)
  • [2] Студія розробки «Firebird» (англ. Firebird Development Studio)
  • Утиліти й засоби адміністрування Посилання на сторінки представлених спільнотою програм
  • BlazeTop — Візуальне середовище розробника й адміністратора InterBase та Firebird.
  • Jaybird — JCA/JDBC driver
  • IB Provider — OLEDB драйвер для доступу до Firebird. Є безкоштовна версія, що дозволяє працювати з OLE DB, ADO і ADO.Net
  • FIBPlus — Бібліотека компонентів Delphi, C++ Builder та Kylix для Firebird та InterBase.
  • UIB — безкоштовна бібліотека компонентів Delphi для Firebird та InterBase.

Ресурси тенет та документація[ред.ред. код]