Firebird

Firebird
ТипРеляційна СКБД
РозробникFirebird Foundation[en]
Перший випуск12 березня 2002
Стабільний випуск4.0.5[1] (8 серпня 2024; 4 місяці тому (2024-08-08))
Нестабільний випуск5.0.1 (2 серпня 2024; 4 місяці тому (2024-08-02))
ПлатформаКросплатформне програмне забезпечення
Операційна системаWindows, Linux, Solaris, OS X, FreeBSD, HP-UX, Android[2]
Мова програмуванняC++
Розмір14 МБ
Доступні мовианглійська
Українська мовані
Стан розробкиактивний
ЛіцензіяЛіцензія IDPL, InterBase Public License, Mozilla Public License 1.1
Онлайн-документаціяfirebirdsql.org/en/firebird-rdbms/(англ.)
Репозиторійgithub.com/FirebirdSQL/firebird
Вебсайтfirebirdsql.org

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

Основні можливості

  • Відповідність вимогам ACID: Firebird спеціально спроектовано таким чином, щоб задовільняти вимоги «атомарності, несуперечності, ізоляції та довговічності» транзакцій (англ. Atomicity, Consistency, Isolation and Durability).
  • Версійна архітектура: основна особливість Firebird — версійна архітектура, що дозволяє серверу обробляти різні версії одного запису в будь-який час таким чином, що кожна транзакція бачить свою версію даних, не заважаючи сусіднім. Таким чином, транзакції, що читають, не блокують транзакції, що пишуть і навпаки. Окрім того, це дає можливість відмовитись від журналу транзакцій і таким чином зменшити ймовірність пошкодження службової інформації бази даних.
  • Збережені процедури: за допомогою мови PSQL (процедурна SQL) можна створювати складні збережені процедури для обробки даних на боці сервера. Таким чином можна виносити на сторону сервера значну частину бізнес-логіки програмного пакету чи формувати дані для звітів.
  • Події: збережені процедури та тригери можуть генерувати події, на які, в свою чергу, може підписатися клієнтська програма і відповідним чином їх обробляти.
  • Генератори: дають можливість просто реалізовувати автоінкрементні поля; оскільки вони працюють незалежно від транзакцій, то можуть використовуватись для генерації первинних ключів чи керування тривалими запитами в інших транзакціях.
  • Бази даних в режимі «лише читання»: спрощують поширення даних наприклад на компакт-дисках, особливо в поєднанні з вбудованою (англ. embedded) версією сервера.
  • Повний контроль над транзакціями: одна клієнтська програма може одночасно виконувати декілька транзакцій, включно з різними рівнями ізоляції. Окрім того, доступні протокол двофазного підтвердження транзакцій (що забезпечує гарантовану стійкість при роботі з кількома БД), оптимістичне блокування даних (блокується не вся сторінка даних, а лише змінені записи), точки збереження транзакцій та автономні транзакції (починаючи з версії 2.5).
  • Резервне копіювання: завдяки в тому числі і версійній архітектурі немає потреби зупиняти сервер для резервування бази даних. Процес резервного копіювання зберігає стан бази даних на момент початку резервування, не шкодячи роботі інших клієнтів. Додатково існує можливість інкрементного резервування бази даних (починаючи з версії 2.0).
  • Тригери: для будь-якої таблиці можна назначити декілька тригерів, що спрацюють до чи після додавання, оновлення чи вилучення даних. У тригерах використовується мова PSQL, що дозволяє задавати початкові значення даних, перевіряти їх цілісність, збуджувати події та ін. Починаючи з версії 1.5 у Firebird з'явились універсальні тригери, що дозволяють обробляти вставку, оновлення та вилучення даних в одному місці.
  • Зовнішні функції: можна реалізувати за допомогою будь-якої мови програмування та у вигляді бібліотек користувацьких функцій (англ. User Defined Function, UDF) під'єднаних до сервера.
  • Набори символів: 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) і псевдонімів (англ. alias) для баз даних.

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

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

Всього було випущено сім релізів цієї гілки (2.0.7 від 12 квітня 2012 року є останнім). Примітки до випуску цієї версії доступні у форматі PDF[4].

2.1 18 квітня 2008 Розвиток другої версії. Основні зміни: підтримка таблиць моніторингу запитів, транзакцій та підключень, підтримка тимчасових таблиць, повний перехід на Юнікод, нові агрегатні та вбудовані функції, підтримка NT-автентифікації, покращення мережевого протоколу для роботи на повільних лініях, підтримка доменів у процедурах, підтримка сумісності текстових blob-полів та рядків, тригери рівня бази даних і транзакції, 64-бітна версія під Windows. Останнім релізом цієї гілки є 2.1.7 від 5 грудня 2014[5].
2.5 4 жовтня 2010 Подальший розвиток другої версії. Серед нововведень найголовнішими є: повноцінна реалізація багатопотоковості клієнтської бібліотеки; створення нового типу сервера з архітектурою SuperClassic; автономні транзакції у PSQL; можливість додавання, зміни та вилучення користувача за допомогою DSQL, а не сервісів чи утиліт; можливість міжбазових запитів; асинхронне завершення з'єднань; суттєве розширення моніторингу бази даних — можливість відстежувати та примусово завершувати поточні запити SQL тощо. Огляд версії доступний у форматі HTML[6].

4 липня 2016 року було випущено оновлення 2.5.6[7].

3.0 19 квітня 2016[8] Версія 3.0 була найдовшим довгобудом в історії розвитку Firebird, перші роботи над версією почалися в 2006 році.

Основні зміни[9]:

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

Основні зміни[11]:

  • Реалізована підтримка логічної реплікації
  • Додані нові типи даних INT128 та DECFLOAT
  • Довжина назв об’єктів збільшена з 31 до 63 символів
  • Максимальний розмір сторінки збільшено до 32 KB
  • Додана можливість вказання часових поясів
  • Доданий набір функцій для роботи з цифроми підписами та ключами
  • Додана підтримка Android - згодом додана також до версії 3.0
5.0 2 серпня 2024[12] Версія 5.0 стала сюттєвим оновленням версії 4.0.

Основні зміни:

  • Багатопокова обрабка даних при резервному копіюванні, розгортанні та індексуванні даних
  • Скомпільований кеш команд
  • PSQL та SQL профайлери
  • Підтримка повернення декількох значень за результатом виконання команд DML
  • Нові встроєні функції
  • Покращені алгоритми стиснення даних
  • Мережеві курсори з розширеними параметрами
  • Додана підтримка MacOS у додачу до Android

Особливості доступу та оброблення даних в 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 символів.

Повний список обмежень [Архівовано 15 грудня 2010 у Wayback Machine.]

Додаткова інформація

Апаратно-програмні вимоги та обмеження

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» [Архівовано 24 листопада 2010 у Wayback Machine.]

Інструменти

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

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

  1. Firebird 4.0 is released [Випущено Firebird 4.0]. Firebird Foundation[en] (англійською) . 8 серпня 2024. Архів оригіналу за 6 червня 2021. Процитовано 6 червня 2021.
  2. System Requirements [Системні вимоги] (англійською) . Архів оригіналу за 6 жовтня 2016. Процитовано 30 вересня 2016.
  3. Firebird 1.5. Архів оригіналу за 9 жовтня 2016. Процитовано 30 вересня 2016.
  4. Firebird 2.0.7 Release Notes (PDF) (англійською) . Архів оригіналу (PDF) за 2 жовтня 2016. Процитовано 30 вересня 2016.
  5. Firebird 2.1. Архів оригіналу за 22 вересня 2016. Процитовано 30 вересня 2016.
  6. Firebird 2.5 Release Notes (англійською) . Архів оригіналу за 2 жовтня 2016. Процитовано 30 вересня 2016.
  7. Firebird 2.5.6. Архів оригіналу за 2 жовтня 2016. Процитовано 30 вересня 2016.
  8. Firebird 3.0 is released [Firebird 3.0 випущено] (англійською) . 19 квітня 2016. Архів оригіналу за 20 квітня 2016. Процитовано 20 квітня 2016.
  9. Firebird 3.0.1 Release Notes (PDF) (англійською) . Архів оригіналу (PDF) за 2 жовтня 2016. Процитовано 30 вересня 2016.
  10. Firebird 4.0 is released [Firebird 4.0 випущено] (англійською) . 19 квітня 2016. Архів оригіналу за 6 червня 2021. Процитовано 6 червня 2021.
  11. Firebird 4.0 Release Notes (PDF) (англійською) . Архів оригіналу (PDF) за 6 червня 2021. Процитовано 6 червня 2021.
  12. Firebird 5.0.1 Release Notes (англійською) . Архів оригіналу (PDF) за 31 липня 2024. Процитовано 31 липня 2024.