Сравнение PostgreSQL и MySQL всегда вызывало острую реакцию у их приверженцев. С технической точки зрения это две мощные СУБД с открытым исходным кодом, имеющие большую инсталляционную базу. Однако в действительности сильные стороны каждой из двух СУБД редко совпадают в такой мере, чтобы можно было с равным успехом использовать любую из них.
Если разобраться в сильных сторонах каждого продукта, то выбор обычно не вызывает трудностей. Чтобы должным образом оценить достоинства PostgreSQL и MySQL, давайте взглянем на их происхождение и историю развития. А также на их функции и производительность и на соответствие требованиям, предъявляемым к СУБД масштаба предприятия.
Историческая перспектива
Сообщество разработчиков PostgreSQL является старейшим, крупнейшим и наиболее быстро растущим. PostgreSQL зародилась в 1985 г. в Калифорнийском университете в г. Беркли в результате эволюции проекта Ingres. Несколько лет она оставалась в стенах университета, а затем была выпущена в мир ПО с открытым исходным кодом. Вокруг нее сложилось сообщество, насчитывающее сегодня свыше 1000 разработчиков и более 30 000 членов.
Главное достоинство крупного сообщества заключается во взаимодействии между пользователями и разработчиками. Это дает первым возможность непосредственно участвовать в создании новых функций. Такое разнородное сообщество олицетворяет модель, к которой стремятся многие сообщества сторонников открытого ПО.
Сообщество MySQL, напротив, зародилось в мире коммерческого ПО. Появление MySQL в Швеции в 1994 г. было вызвано потребностью в высокопроизводительной СУБД для обслуживания веб-сайтов. Спустя несколько лет она была передана сторонникам открытого ПО, оставаясь под контролем компании MySQL AB. Такой контроль способствовал превращению MySQL в одну из самых популярных СУБД в мире. (В результате в 2008 г. корпорация Sun купила MySQL AB). Популярность MySQL стала также главным фактором, побудившим Европейский союз одобрить сделку по поглощению Sun корпорацией Oracle, завершенную в начале этого года.
Особенности и функции PostgreSQL
PostgreSQL называют наиболее совершенной из имеющихся сегодня СУБД с открытым исходным кодом. Такую репутацию она завоевала благодаря усилиям разработчиков на протяжении десятилетий. Будучи полнофункциональной реляционной СУБД с открытым исходным кодом, PostgreSQL обладает многими качествами, необходимыми для поддержки важнейших приложений с большим числом транзакций.
Главное достоинство PostgreSQL заключается в надежном и защищенном хранении данных, которыми она управляет. Начиная с того, что подключения к базе данных контролируются с помощью корпоративных механизмов аутентификации, таких как LDAP или Kerberos. После аутентификации весь обмен информацией с СУБД может осуществляться по зашифрованным с помощью Secure Sockets Layer (SSL) подключениям, что обеспечивает надежную защиту данных.
При добавлении или модификации данных PostgreSQL налагает ряд ограничений, введенных пользователем для обеспечения качества данных в соответствии с бизнес-правилами. Диапазон этих правил простирается от простых проверок до более сложных, связанных с наличием внешнего ключа. После сохранения данных на диске важнейшим требованием становится возможность резервного копирования и, что еще более важно, восстановления после катастроф. У PostgreSQL имеется простая функция онлайнового резервного копирования, которая работает в сочетании с механизмом восстановления по состоянию на определенный момент (Point-In-Time Recovery, PITR), благодаря чему администраторы могут быстро восстановить утраченные данные.
Например, базовая архитектура PostgreSQL позволяет членам сообщества встраивать в СУБД сложные функции в виде модулей-надстроек. Прекрасный пример — поддержка в PostgreSQL геопространственных данных. Эта функция обеспечивается модулем PostGIS, представляющим простое расширение PostgreSQL, которое, как считают, делают ее самой мощной системой для работы с пространственными данными среди всех СУБД, как с открытым исходным кодом, так и коммерческих.
Другое расширение — способность PostgreSQL использовать множество языков различного типа для хранимых процедур. Это дает возможность разработчикам писать серверный код на том языке, который больше всего соответствует их потребностям. Например, триггер, который должен осуществлять сложную обработку текста, может быть написан на Perl, что позволит применить его мощные функции для работы с регулярными выражениями.
Особенности и функции MySQL
MySQL имеет репутацию наиболее популярной СУБД с открытым исходным кодом. Такая репутация сложилась благодаря высокой производительности и простоте MySQL. Эта СУБД изначально предназначалась для использования индексно-последовательного метода доступа (ISAM) к данным веб-сайтов. Особенность такого типа нагрузки заключается в применении преимущественно операции чтения при наличии множества простых запросов. Это обусловило появление кэша запросов, который еще выше поднял производительность MySQL. Ориентация на высокую производительность привела к созданию MySQL Cluster, что позволило СУБД использовать более одного физического сервера.
PostgreSQL — не единственная СУБД с открытым исходным кодом, которая допускает расширение функций с помощью внешних надстроек. Одна из наиболее сильных черт MySQL заключается в возможности подключать различные механизмы хранения. По умолчанию используется MyISAM, что обеспечивает высокую производительность, когда преобладают операции чтения. А механизм InnoDB обеспечивает надежность транзакций, которая необходима при большом количестве операций записи.
Кроме того, имеется ряд механизмов хранения, разработанных сторонними фирмами, такие как Brighthouse и DB2, которые еще больше расширяют возможности MySQL. Подобная гибкость позволяет администраторам настроить каждый экземпляр MySQL на работу с индивидуальными таблицами. Например, для таблицы с преобладанием операций чтения, таких как таблица кодов стран, можно использовать MyISAM, а для транзакционной, такой как таблица с заказами на покупку, — InnoDB.
Хотя у PostgreSQL и MySQL сложилась различная репутация в области поддержки конкретных типов приложений, обе СУБД часто используются с их широким спектром. Например, PostgreSQL известна как хорошая основа для транзакционных корпоративных приложений, но применяется также для поддержки многих веб-приложений. А MySQL, которая традиционно занимает прочные позиции в области веб-приложений, используется и для приложений, требующих поддержки транзакций. Главное, что обе они являются достаточно гибкими, чтобы иметь широкий спектр применения. Но по техническим соображениям или с позиций бизнеса одна из них может оказаться более подходящей для конкретных условий.
Решающая роль сообщества
Основное различие между PostgreSQL и MySQL отнюдь не технического свойства. В проектах ПО с открытым исходным кодом по определению главную роль играет сообщество. Сообщества разработчиков, которые создают и дополняют такие проекты, позволяет вдохнуть в них жизнь. Существует два типа сообществ.
Во-первых, проекты с полностью открытым исходным кодом создаются независимыми или имеющими собственные источники финансирования сообществами. PostgreSQL представляет собой старейшее и крупнейшее независимое сообщество такого рода. Его преимущество заключается в полной независимости от производителей.
Другой тип сообщества может сложиться вокруг производителя, который управляет проектом, а проект потенциально может быть кем-то куплен. Примером может служить MySQL. Этот проект первоначально финансировался и контролировался компанией MySQL AB, которая нанимала основных разработчиков и архитекторов. Затем сообществом стала управлять корпорация Sun, а теперь его контролирует Oracle.