Мир SQL-серверов не настолько беден, чтобы делать выбор всего из двух-трех разновидностей. Главное, чтобы этот выбор был адекватным

Рассматривая кандидатуру СУБД для информационной системы или даже ее части, руководитель проекта нередко, желая того или нет, излишне сужает зону своего обзора двумя-тремя громкими именами, полагаясь на известность, «надежность поставщика» и яркие примеры использования, полуконфиденциально нашептанные на ушко представителями фирм. Мне, работающему с пользователями СУБД Oracle не первый год, на первый взгляд кажется «непатриотичным» знакомить читателя с другими системами. Но все же СУБД Oracle, наравне со своими коммерческими конкурентами обладающая многими замечательными достоинствами, технико-экономически не универсальна, и эта истина дороже условностей. Success stories (и грамотные руководители информационных служб это отлично понимают) для нас чаще, чем в других местах, взяты из «другой реальности» — крупных систем, больших оборотов и т. д., что для наших условий в 99,9% случаев неактуально. Словом, «радары» руководителей информационных служб должны фиксировать в первую очередь не громкость звука, а адекватность задачам.

Эту мысль высказал С. Кузнецов в статье «Гиганты среднего масштаба» (16-й выпуск рубрики «Директору ИС»), где он дал характеристику трем СУБД, альтернативным «ведущей пятерке». Аналогичная идея, как кажется, присутствует в статье А. Агеева и Е. Розанова «Интеграция плюсов» (см. 21-й выпуск), где примером служит СУБД Titanium. Я хочу рассказать еще о паре систем, живущих в очень своеобразной и чрезвычайно интересной нише «ПО открытых текстов». Дополнительным поводом для рассказа служит книжка MySQL&mSQL, выпущенная в июле этого года издательством O?Reilly. Заголовок книжки составлен как раз из названий этих двух систем.

Общий план СУБД MySQL и mSQL столь близки по исполнению, что в книжке их описание поместилось под одной обложкой, причем большая часть текста — общая для обеих систем. Это SQL-машины с несколько ограниченным по сравнению с некоторыми другими набором возможностей (об этом ниже), «легкие» и быстрые. Считается, что это системы для малых и средних приложений. Традиционно наиболее распространенная область их применения — Web-узлы, но есть и другие примеры. Обе системы разрабатываются методом «открытых исходных текстов» в соответствии с принципами создания, эксплуатации, поддержки и распространения, уже излагавшимися на страницах рубрики. Несколько ограниченным по сравнению с другим открытым ПО может выглядеть только распространение, обязующее, например, разработчика приобрести (правда, за небольшую плату) mSQL в случае, если программный продукт, имеющий «внутри» эту СУБД, начинает продаваться.

Маленькие истории. Истории возникновения обеих систем типичны для ПО открытых текстов и тесно переплетены между собой. Австралиец Дэвид Хьюз, работая над некоммерческим проектом и не найдя удовлетворительной дешевой SQL-СУБД, в какой-то момент пришел к мысли разработать такую СУБД самостоятельно, чем и занимался с начала 90-х. Точнее, его целью было создание такой SQL-системы, которая была бы а) быстра, б) нетребовательна к ресурсам компьютера и в) одновременно обрабатывала большое число подключений. Хотя в развитии системы точка не поставлена, сегодняшние версии вполне соответствуют поставленным целям.

В 1996 году монополия mSQL на дешевые SQL-СУБД оказалась нарушена. Несколькими годами раньше швед Микаэль Видениус, работая над Web-проектом и будучи неудовлетворенным тогдашней приспособленностью mSQL к своей задаче, решил создать свою собственную систему, MySQL, разработка которой стала вторым по масштабности (после Linux) прецедентом ведения «открытых» разработок в Internet. Поначалу MySQL был почти копией mSQL, отсюда их заметная похожесть.

Обе разработки оказались в конечном счете успешными: по некоторым оценкам, MySQL, например, без привлечения будоражащих воображение инвестиций и массированного маркетинга работает примерно на 500 тыс. серверах в мире. Нашим специалистам (и управленцам, и разработчикам) нелишне обратить внимание на то, что оба результативных проекта родились в противоположном Соединенным Штатам полушарии и координируются оттуда же. Немалая заслуга в этом сети Internet, выравнивающей условия работы специалистов в разных странах. Так что не стоит падать духом!

Что в них есть. Главным правилом при выборе пути создания обеих систем можно считать принцип «система может стать производительнее других, если отказаться от функций, не используемых в конкретных видах приложений» (при этом, кстати, не придется заставлять пользователя платить лишнее). Сначала о том, что в этих системах есть.

И та и другая СУБД используют (как и все прочие) свой диалект SQL, «расширенное сужение» стандарта: за основу взят SQL89 с элементами SQL92. Разработчик найдет здесь почти все, что он привык использовать в DML-операторах. Существенное расширение — меню базовых типов. Имеется связь с «языками сценариев» нового поколения (Perl, Python и др.), с браузерами (PHP) и с более традиционными языками посредством API-интерфейса (C, C++, JDBC).

В отличие от mSQL, MySQL выполнен в виде многопоточного сервера, что может обеспечивать ему большую эффективность при одновременном подключении многих пользователей к одной или разным базам данных.

Есть набор вспомогательных и административных программ. Например, с помощью одной из них копирование базы данных выполняется проще пареной репы: coтpy имя_старой_БД имя_новой_БД. Другими утилитами выполняются операции резервного копирования и восстановления, слежения за работой СУБД и прочие из арсенала администратора базы данных.

Чего в них нет. За пределами реализации в обеих системах остались такие привычные качества, как:

  • управление транзакциями из программы пользователя (отсутствуют привычные многим конструкции ROLLBACK и COMMIT),
  • триггеры и встроенные процедуры,
  • подзапросы в SELECT,
  • объекты в любом виде.

Для основной сферы использования систем эти качества были сочтены излишними, зато скорость обработки запросов без их реализации увеличивается в десятки или даже сотни раз. Впрочем, обе системы динамично развиваются, и, возможно, перечисленные свойства вскоре перейдут в разряд реализованных.

Где взять. Исходные тексты, подготовленные для генерации обеих систем на разных платформах, можно бесплатно переписать из Internet. Для mSQL адрес в Internet один: www.huges.com.au, а для MySQL таких адресов изобилие. Здесь можно сослаться на шведский «первоисточник», www.tcx.se. Большинство других Web-адресов — зеркальные копии упомянутого, причем два узла — российские (это mysql.directnet.ru и mysql.udm.net), а один — украинский (mysql.paco.net.ua; этот же адрес доступен по ftp). Общий объем файлов — не более 2 Мбайт.

На этих же узлах имеется достаточно пространная документация — нечастое явление для «открытых текстов»! Есть литература и в более привычном виде, вроде упомянутой книги O?Reilly.

Куда ставить? Всюду, где требуется «легкая» СУБД, быстрая обработка (регистрация, генерация ответа) данных, устроенных более сложно, чем плоский файл, где отсутствует возможность (или желание) тратить большие деньги на ПО и аппаратуру, если только соображения «высшего порядка» не диктуют обратного. Хороший пример упоминался: небольшие (для России — 99,99% от всех имеющихся) Web-узлы. Обе системы работают в Linux, всех основных версиях Unix, в Win32 и в OS/2. «Пробная версия» (а в большинстве случаев — и рабочая) бесплатна. Приятного знакомства!

Владимир Викторович Пржиялковский — независимый консультант, координатор ЕАГПО, с ним можно связаться по адресу prz@deneg.net.