Почему FireBird?
Помимо явных лидеров на рынке СУБД есть и менее приметные, но не менее востребованные решения, например PostgreSQL или Sybase ASA. Но настоящим «серым кардиналом» можно назвать, пожалуй, лишь одну — FireBird (в переводе с англ. «жар-птица»).
Многим программистам знакома аббревиатура IB/FB. Так четырьмя буквами обозначаются целых две системы управления базами данных — InterBase и FireBird. Обе системы нетребовательны к ресурсам, платформонезависимы, просты в использовании и относительно легки в освоении. Очень часто клиентские программные утилиты поддерживают эти две СУБД одновременно.
В действительности FireBird бесплатна и распространяется вместе с исходными текстами (http://firebird.sourceforge.net ), но не лишним будет вспомнить, что же на самом деле означает эта «бесплатность». Основная идея лицензии FireBird состоит в том, что при использовании ее в своих проектах разработчик волен с ней поступать по собственному усмотрению — дарить, продавать, перекомпилировать, менять название и т.д. Согласно общепринятой практике, программы с подобными лицензиями можно пересобирать в Linux (и других Unix-системах) с использованием компилятора GCC, а для Windows делать сборки непосредственно из среды MS Visual Studio. Вообще, перекомпиляция какого-либо ПО для Linux-систем всегда считалась хорошим тоном — установка новых пакетов пройдет без проблем, если программа собрана из исходных текстов.
Еще недавно такая возможность существовала и для пользователей СУБД MySQL, но начиная с шестой версии новый владелец этого продукта компания Sun Microsystems закрывает доступ к исходным текстам отдельных модулей корпоративной версии СУБД. Плохо это или хорошо — каждый должен решить для себя сам, но факт, что на данное время есть только две бесплатные продвинутые реляционные СУБД, распространяемые с исходными текстами: PostgreSQL и FireBird.
Кстати, существует и коммерческий вариант FireBird — «Ред База Данных» 2.0, продукт корпорации «Ред Софт». Эту неожиданно родившуюся СУБД, полностью совместимую с FireBird, можно приобрести за деньги! Разработчики этого чуда емко охарактеризовали его как «FireBird для госструктур». В апреле 2008 г. эта СУБД получила от одного российского журнала звание «Продукт года». Хотя есть и другой не менее полезный вариант расставания с деньгами — их можно перечислить в сообщество FireBird (FireBirdSQL Foundation Inc.), некоммерческий фонд, целью которого является не только проведение в самых уютных уголках мира веселых пивных конференций, но и собственно улучшение программного пакета FireBird.
История FireBird. Жар-птица, дятел и другие
Изучая историю «жар-птицы», легко понять, что ее успех в России был предопределен. Давным-давно, когда многие Delphi-программисты (основная часть которых хорошо помнит, что такое Turbo Pascal или Borland Pascal for Windows) писали программы для BDE, признаком профессионализма считалось использование в проекте СУБД InterBase. А наличие в Delphi отдельной страницы готовых к использованию компонентов для InterBase подхлестывало всеобщий интерес следующих поколений разработчиков к этой СУБД. По традиции при знакомстве с InterBase было принято узнавать о героическом пути этой программы в армии США — о том, как ее ставили на танках «Абрамс». А когда Borland (в то время носившая загадочное название Inprise) выпустила свободно распространяемый SQL-сервер InterBase 6.0 (а точнее 6.0.0.627), да еще фактически подарила всем желающим исходные тексты этой версии, у сообщества Open Source появился отличный повод для создания нового проекта. К тому же и сами разработчики InterBase приняли в нем участие.
Уже первая версия FireBird позволила многим пишущим для InterBase 5.x высоко поднять голову, гордясь легальностью распространяемого ПО. Более того, компоненты среды Delphi, предназначенные для InterBase, оставались полностью совместимы с новой СУБД. Да что тут скромничать, и сейчас пакет борландовских компонентов IBX отлично справляется с типовыми задачами, решаемыми под FireBird, хоть и нет уже в этом особой надобности.
Менее известные клоны InterBase — это заглохший в 2003 г. российский Yaffil (в переводе с англ. «зеленый дятел»), ориентированный на архитектуру Windows, но просуществовавший фактически только два года, и загадочный всемогущий Fyracle (http://www.janus-software.com/fb_fyracle.html ), который позиционируется разработчиками как Oracle-mode FireBird, т.е. СУБД FireBird, дополненная возможностями PL/SQL. Поводом для разработки Fyracle послужила идея обеспечения минимальной необходимой совместимости при распространении бесплатной CRM, которая могла бы работать как с Oracle, так и с FireBird. Но сама эта идея привлекла внимание многих разработчиков по другой причине. Дело в том, что возможности PL/SQL в сравнении с незатейливым процедурным языком FireBird выглядят до сих пор очень заманчиво. Но абсолютно бесплатно можно загрузить только Fyracle Run-time Kit, к тому же на их сайте давно не появлялись новые сборки, соответствующие основным версиям FireBird, что говорит о полной непредсказуемости этого амбициозного проекта. К тому же при детальном рассмотрении сразу выясняется, что в Fyracle реализована лишь минимальная концептуальная часть от всего имеющегося современного синтаксиса PL/SQL.
СовременнАЯ FireBird
Сейчас с уверенностью можно говорить, что FireBird — развитое промышленное программное обес-печение, гарантирующее транзакционную целостность данных при использовании его с множеством пользователей, соответствующее правилам ACID:
Atomicity — атомарность транзакций;
Consistency — целостность данных;
Isolation — изолированность
(контроль доступа пользователей);
Durability — долговременность хранения данных.
Предназначенная для клиент-серверной архитектуры, эта СУБД предъявляет достаточно типичные требования при выборе серверного оборудования для серьезных проектов. А способность отлично работать с большими базами и множеством клиентских подключений давно успешно доказана как на выставках, так и в реальных коммерческих проектах. Тут действует универсальное правило — качество работы базы сильно зависит от того, кто ее проектировал.
В настоящее время можно насчитать три стабильные современные ветви FireBird — это FB 2.0.x, FB 1.5.x. и вышедший во второй половине апреля 2008 г. релиз FB 2.1.
Уже в версии 1.5 все модули были аккуратно переписаны с учетом современных стандартов языка C++. Версия 2.1 имеет футурологическую направленность: в нее успели заложить некоторые элементы, запланированные для архитектуры 3.0. В этой версии были добавлены триггеры для общих событий базы данных, глобальные временные таблицы, выражение «UPDATE OR INSERT», использование доменов для аргументов и переменных процедурного языка.
А вот «рабочей лошадкой» на апрель 2008 г. можно считать версию 2.0.x.
Конечно, применение СУБД FireBird очень часто сопровождается использованием среды разработки Delphi, но она подойдет и не только для Delphi-разработчиков. Существуют бесплатно распространяемые драйверы для ODBC, Java, .NET (1.1, 2.0, 3.5), а также библиотеки для низкоуровневого доступа через C++.
FireBird предоставляет возможности, стандартные для современных промышленных СУБД: триггеры, просмотры, хранимые процедуры, анонимные блоки, функции, заданные пользователем, домены, события, исключения, инкрементное резервное копирование данных. И при этом у «жар-птицы» остается отличительная черта — невысокие требования к аппаратным ресурсам и относительно простой процесс установки. Более того, в FireBird есть отдельный вариант сборки для встроенных однопользовательских решений (Embedded FireBird), работающий на одной-единственной библиотеке. Но при этом обеспечивается полная совместимость структуры базы для основного варианта использования этой СУБД.
Чего сейчас нет в FireBird
Data Partitioning и табличные пространства
Отсутствие возможностей логического и физического разделения данных сейчас уже как-то странно смотрится на фоне других СУБД. С другой стороны, современные аппаратные возможности и опыт в проектировании баз данных способны творить чудеса. В некоторых СУБД разделение данных (партицирование таблиц) реализовано сейчас так, как будто бы его вовсе нет. Иными словами, используя средства процедурного языка в FireBird, можно самостоятельно реализовать нечто похожее на разделение данных.
Схемы пользователей
Эта возможность позволяет хорошо структурировать базу данных и удобно разграничивать права доступа для пользователей. Нехватка схем — большой минус FireBird по сравнению с другими современными развитыми реляционными СУБД. И похоже, изменений в этом направлении пока не предвидится.
Работа с XML
Тему интеграции с форматом XML разработчики обошли во всех вопросах, оставляя программистам широкое поле для деятельности. В какой-то степени отсутствие этих функций может быть компенсировано обещаниями возможностей работы с внешними источниками данных в версии 3.0. Сейчас в FireBird собственные решения, связанные с использованием XML, можно реализовать с помощью хранимых процедур и функций, заданных пользователем.
Написание пользовательских функций под Java и .NET
Наверное, ни одна современная РСУБД не может обойти стороной этот функционал.
Java — мощный язык программирования, предоставляющий разработчику широкие возможности. Как бы ни выглядела непосредственная реализация, позволяющая использовать Java, она обязательно будет иметь успех, так как отлично ляжет в общую концепцию решения OpenSource: Linux, FireBird… Java!
Судя по планам разработчиков, создавать функции под Java и .NET можно будет уже в версии 3.0.
Операторы быстрого экспорта/импорта для внешнего файла
Имеющаяся сейчас в FireBird возможность называется «внешними таблицами» и напоминает специальное пыточное устройство для программиста любой квалификации. Она не заслуживает особого внимания при проектировании баз данных, если, конечно, разработчик хранилища данных не ставит себе целью тренировку собственного терпения и усердия независимо от результата. Тем не менее, если понаблюдать за диалогами на форумах, некоторые разработчики по отношению к внешним таблицам питают чувства, напоминающие стокгольмский синдром. В настоящий момент существует множество готовых платных и бесплатных решений (для «автоматики» и разовых операций) для репликации, экспорта/импорта данных, сохранения в файле выходной информации, но в сравнении, например, с возможностями MySQL заметен явный недостаток в этом вопросе.
Работа с объектами. Наследование
Наверное, реализация объектных возможностей в реляционной СУБД — достаточно неоднозначная функциональность с точки зрения ее полезности и общей идеологии хранения данных. Объектные расширения есть не у каждой распространенной СУБД, да и не всем они нужны.
В FireBird любой внешний объект всегда можно бросить в поле типа BLOB, а остальное уже, как обычно, зависит от программиста... Кроме того, в Интернете легко найти статьи о методах правильного хранения объектов в реляционных базах.
Гетерогенные запросы
Если сравнивать бесплатную FireBird c платной СУБД Sybase ASA, то в пользу последней может свидетельствовать возможность использования веб-сервисов и «чужих» таблиц из других СУБД. Похожими способностями обладают, кроме того, MS SQL Server и Oracle, а также серверное ПО Adobe ColdFusion, имеющее собственный механизм кросс-платформенных запросов. Ряд задач, требующих работы с данными разных источников, решаются на уровне клиентских программ, однако тема реализации гетерогенных запросов для FireBird обсуждается в Рунете уже давно. Хорошие механизмы интеграции нужны как воздух именно потому, что эту СУБД используют для задач, связанных со средним уровнем (MiddleWare, промежуточный программно-технический уровень предназначенный для преобразования данных, их первичной обработки и т.д.). Идя навстречу пожеланиям трудящихся, разработчики по крайней мере запланировали этот функционал на версию 3.0.
Встроенные возможности для работы с древовидными структурами
С обработкой и хранением древовидных данных на уровне пользовательских таблиц связана огромная часть задач. Тема отражения таких данных на табличное пространство уже давно тривиальна, но программисты, использующие FireBird, не раз высказывали участникам сообщества просьбы об оснащении сервера специализированными средствами для хранения и обработки деревьев.
В помощь разработчику
Сейчас к вашим услугам широкий диапазон драйверов, пакетов, компонентов, обеспечивающих возможность использования FireBird при работе в любой современной среде программирования и с любым развитым языком. Постоянно обновляются бесплатные драйверы для доступа к базе через ODBC, пакеты для работы из Java, .NET/MONO-провайдеры, объектные библиотеки С++ (как обертка для API), драйверы для работы на PHP. И все это богатство имеет соответствующую документацию, примеры использования и перспективы развития. Но, как прежде, особую любовь к FireBird питают Delphi-программисты, для которых можно назвать как минимум три пакета FireBird-компонентов, готовых к коммерческому использованию.
Ближайшие перспективы: FireBird 2.5
Разработчики FireBird постоянно отступают от собственных намерений, которые сами декларируют в планах развития. В апреле 2008 г. уже должна была быть выпущена бета-версия FireBird 2.5, но на тот момент имелась только очень предварительная альфа-версия. В ней (судя по сопровождающей ее документации) из «вкусностей» обещаны автономные транзакции, а список присутствующих в ней нововведений выглядит заметно скромнее списка исправленных ошибок.
А поскольку выпуск версии 3.0 все равно остается в туманной перспективе, то для этой версии были обещаны гетерогенные запросы и средства массовой загрузки данных.
Что читать
Борри Х. FireBird. Руководство разработчика баз данных. СПб.: БХВ-Петербург, 2006.
Бондарь А. InterBase и FireBird. Практическое руководство для умных пользователей и начинающих разработчиков. СПб.: БХВ-Петербург, 2007.
Сайт сообщества разработчиков FireBird |
|||
Самый полезный в Рунете сайт по СУБД InterBase/FireBird |
|||
Не всегда вовремя обновляемый информационно-новостной сайт |
|||
Новостной сайт, постоянно обновляется информация по событиям, связанным с FireBird |
|||
Сайт журнала The InterBase & FireBird Developer Magazine |
|||
Один из двух главных порталов по FireBird Знаете ли Вы, что абстрактный класс - это класс, содержащий хотя бы один виртуальный метод. Абстрактные классы не бывают изолированными, т.е. всегда абстрактный класс должен быть наследуемым. Поскольку у чисто виртуального метода нет тела, то создать объект абстрактного класса невозможно. Абстрактным классом можно назвать класс, специально определенный для обеспечения наследования характеристик порожденными классами.
|