Firebird
Матеріал з Вікіпедії — вільної енциклопедії.
| Firebird | |
|
Логотип Firebird
|
|
| Тип | Реляційна СКБД |
| Розробник | спільнота Firebird |
| ОС | Кросплатформне програмне забезпечення |
| Поточна версія | 2.1.1 — 17 липня 2008 |
| Тестова версія | 2.5 Alpha 1 |
|---|---|
| Ліцензія | Ліцензія IDPL, InterBase Public License, Mozilla Public License 1.1 |
| Сайт | www.firebirdsql.org |
Firebird (іноді FirebirdSQL) — компактна, кросплатформна, вільна реляційна система керування базами даних, що реалізує більшість функцій ANSI SQL 2003. Вона може запускатись на більшості Unix-систем (в тому числі Linux та FreeBSD) та Windows.
Зміст |
[ред.] Основні можливості
- Відповідність вимогам A.C.I.D: Firebird спеціально спроектовано таким чином, щоб задовільняти вимоги «атомарності, несуперечності, ізоляції та довговічності» транзакцій (англ. «Atomicity, Consistency, Isolation and Durability»).
- Версійна архітектура: основна особливість Firebird — версійна архітектура, що дозволяє серверу обробляти різні версії одного запису в будь-який час таким чином, що кожна транзакція бачить свою версію даних, не заважаючи сусіднім. Таким чином читаючі транзакції не блокують пишучі, і навпаки. Окрім того, це дає можливість відмовитись від логу транзакцій і таким чином зменшити ймовірність пошкодження службової інформації бази даних (проте створення логу транзакцій є в планах на версію 3.0).
- Збережені процедури: за допомогою мови 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), інкрементальний бекап.
Наразі випущено 5 релізів версії (2.0.4 від 28 квітня 2008 року є останнім). Нотатки до випуску цієї версії доступні в форматі PDF [1].
- 2.1 (18 квітня 2008 року) - розвиток 2-ї версії. Головні зміни: підтримка таблиць моніторингу запитів, транзакцій та підключень, підтримка тимчасових таблиць, повний перехід на Unicode, нові агрегатні та вбудовані функції, підтримка NT-автентифікації, покращення мережевого протоколу (для роботи на повільних лініях), підтримка доменів в процедурах, підтримка сумісності текстових блобів та рядків, тригери рівня бази даних та транзакції, 64-бітна версія під Windows. Наразі випущено перший fix-реліз (2.1.1) [2]
Серед основних нововведень найголовнішими є: повноцінна реалізація багатопотоковості клієнтської бібліотеки; створення нового типу сервера з архітектурою SuperClassic; автономні транзакції в PSQL; можливість додавання/зміни/вилучення користувача в DSQL, а не через використання сервісів чи утиліт; можливість міжбазових запитів; асинхронне завершення з'єднань тощо.
Наразі випущена 1-а альфа-версія. Попередній огляд версії доступний в форматі HTML[3]
[ред.] Особливості доступу та оброблення даних в 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
Розмір бази даних — 131 Тб
Розмір таблиці бази даних — до FB 2.0 36 Гб, для 2.0 і вище — 2.5 Тб для сторінки 4 Кб
Розмір зовнішньої таблиці — 4 Гб
Максимальна довжина запису (сумарно всі поля) — 64 Кб.
Максимальна кількість підключень:
* Windows SuperServer: 1024; * Windows ClassicServer: залежить від ресурсів системи і налаштувань (зазвичай не більш як 600); * Linux: за умовчанням до 60, без перекомпіляції ядра - до 600.
Індексів на таблицю — до FB 1.5 64, для FB 1.5 і вище 255
Максимальний розмір індекса — до FB 2.0 254 байти, для FB 2.0 і вище 25% розміру сторінки бази даних.
Довжина об'єкта метаданих (назва таблиці, процедури, тощо) — 27 символів.
[ред.] Відомі помилки (невиправлені)
Список виправлених й невиправлених помилок можна знайти на tracker.firebirdsql.org.
[ред.] Переваги й недоліки
[ред.] Переваги
- Невеликий розмір інсталяційного пакету
- Робота на великій кількості платформ
- Гарна підтримка в Delphi
[ред.] Недоліки
- Слабка підтримка багатопроцесорних систем
- Зберігання версій даних на сторінках даних, що може призвести до значного зниження швидкодії
- Відсутність логу транзакцій
- Відсутність міжбазових запитів
- Відсутність чіткого плану розвитку
- Відсутність повноцінної документації (пропонується використовувати документацію до Interbase 6.0, враховуючи зміни в наступних версіях, що відображені в release notes)
- Незначна кількість технічної літератури
[ред.] Додаткова інформація
[ред.] Апаратно-програмні вимоги та обмеження
Firebird існує у версіях для Unix (Linux, FreeBSD, Solaris, MacOS, HP-UX) та Windows і вимоги до апаратного забезпечення залежатимуть також від типу ОС, котра обслуговує сервер. Окрім того вимоги знаходяться в прямій залежності від очікуваного завантаження сервера баз даних, об'єму оброблюваних даних та кількості одночасно працюючих користувачів і говорити про конкретні цифри непросто. Проте загалом ці вимоги доволі низькі: при незначних навантаженнях та об'ємах баз даних можна очікувати пристойної роботи на сервері з центральним процесором частотою 100—200 МГц та об'ємом оперативної пам'яті 96-128 МБ.
[ред.] Конфігурації сервера
Серверна частина Firebird існує в трьох різних взаємозамінних конфігураціях, кожна з яких має свої переваги і, відповідно, недоліки:
- Класичний сервер (classic server) — на кожне клієнтське з'єднання породжується новий процес; оптимізована для використання на багатопроцесорних комп'ютерах
- Суперсервер — всі з'єднання працюють у одному процесі; менші вимоги до пам'яті при кращій швидкодії на однопроцесорних машинах.
- Вбудований сервер (embedded) — весь сервер знаходиться у декількох бібліотеках (існує версія Yaffill Personal з єдиною бібліотекою); ідеально підходить для однокористувацьких систем, окрім іншого не вимагає встановлення.
[ред.] Ліцензування
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», що й завершило конфлікт.
[ред.] Ресурси тенет
- http://www.firebirdsql.org/ Офіційний сайт проекту «Firebird»
- http://www.firebirdnews.org/ Бразильський сайт сайт новин проекту
- http://www.flamerobin.org/ Сайт вільного (ліцензія МІТ) кросплатформного інструменту для адміністрування баз даних «Firebird»
- http://www.ibexpert.com/ Сайт безкоштовного (для користувачів, що користуються локаллю win1251, в тому числі й для україномовних) інструменту для адміністрування баз даних «Firebird»
- http://www.firebirdsql.org/index.php?op=lists Список груп новин та поштових розсилок спільноти
- http://www.ibase.ru/ Російський сайт по InterBase, Firebird, Yaffil, компанія з продажу ПЗ.
- http://yaffil.ibase.ru/ Сайт проекту «Yaffil»
- http://www.sqlly.com/ Студія розробки «Firebird» (англ. Firebird Development Studio)
- http://sourceforge.net/projects/firebird Сайт завантаження джерельних кодів та бінарних збірок серверу
- Факти про Firebird Звантажити у вигляді PDF(англ.)
- Утиліти й засоби адміністрування Посилання на сторінки представлених спільнотою програм
- 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.
- DotNetFirebird (Using Firebird SQL in .NET)
- news://gmane.comp.db.firebird.russian - ресурс для російськомовних розробників та тестерів Firebird
- Тексти ліцензій IPL та IDPL, під котрими поширюється «Firebird»