проф. М.А. Алексеев
бакалавр А.А. Климкина
Государственное
высшее учебное заведение
«Национальный горный университет», Украина
ВЫБОР МЕЖДУ MySQL И
PostgreSQL ПРИ ИСПОЛЬЗОВАНИИ ИХ В КРИТИЧЕСКИ ВАЖНЫХ СИСТЕМАХ.
В статье рассмотрена проблема
выбора между СУБД MySQL и открытой базой данных PostgreSQL при использовании их
в критически важных системах. Также описаны преимущества и недостатки этих
СУБД. Даны рекомендации для их использования.
Постановка
проблемы
Вопрос выбора СУБД для коммерческого
приложения является крайне важным, так как выбор СУБД влияет на скорость работы
системы, масштабируемость системы, возможности управления данными
(резервирование, экспорт, перенос данных, обслуживание базы данных), надежность
хранения данных. Поэтому вопросы эффективности использования различных СУБД в
критически важных системах являются актуальной и своевременной задачей.
Цель работы
Для сложных критически важных систем
самыми важными требованиями являются непрерывная работа и высокая скорость
обработки запросов. При этом требуется часто создавать резервную копию, не
останавливая систему. Немаловажным фактором также является возможность
масштабирования системы. В настоящий момент в таких системах активно
используются такие СУБД, как MySQL и PostgreSQL. Однако возникает вопрос, какая
из вышеперечисленных баз данных является наиболее производительной и надежной.
В данной статье представлен сравнительный
анализ MySQL 5.1 и PostgreSQL 8.3 и описан результат исследований.
Основная часть
При выборе СУБД для критически важных систем
важным фактором является лицензирование, так как разные лицензии удовлетворяют
разные потребности, и для них различные требования.
Рассмотрим проблему
хранения данных. MySQL имеет несколько различных механизмов хранения данных. Он
изначально использовал ISAM / MyISAM, который не поддерживает ни транзакций, ни
внешних ключей. Это сложилось исторически и у такого подхода есть оправдание,
если рассматривать работу с БД с точки производительности. Если транзакции и
внешние ключи нужны, то использование storage engine InnoDB обязательно. Так же
имеются другие механизмы хранения данных, но эта дискуссия сосредоточена в
основном на использовании таблиц InnoDB, поскольку они, как правило, имеют
самые современные наборы функций и являются типом таблиц по умолчанию в MySQL
версии 4.x. При выборе механизмов хранения в MySQL необходимо помнить о
некоторых особенностях, например, InnoDB и BDB являются единственными типами
таблиц, которые поддерживают транзакции. PostgreSQL, с другой стороны,
использует только один механизм хранения данных под названием «Postgres storage
system» («система хранения Postgres»), в котором транзакции и вешние ключи
полностью функциональны [2, с.85].
И PostgreSQL и MySQL
поддерживают индексирование одного столбца, нескольких столбцов, уникальных и
первичных ключей. MySQL поддерживает индексирование всего текста поля, и
PostgreSQL полнотекстовые индексы с некоторыми изменениями в базе данных,
которые включены в исходный код [2, с.45].
Базы данных хранят
данные, а все типы данных, которые база данных может хранить называются типами
данных. И PostgreSQL и MySQL поддерживают большинство стандартных типов данных.
В последние несколько лет поддержка больших объектов становится все более популярной,
и базы данных поддерживают их все лучше. PostgreSQL поддерживает
пользовательские типы данных, в то время как MySQL нет. MySQL и PostgreSQL
поддерживают хранение географических особенностей, известных как ГИС
(Географическая Информационная Система). PostgreSQL имеет дополнительно сетевые
типы данных, которые распознают IPv4 и IPv6 типы данных. Типы данных и их
информационная ёмкость в MySQL и PostgreSQL приведены в таблицах 1 и 2.
Таблица 1
Целые числа и числа с плавающей точкой
Тип данных |
MySQL |
PostgreSQL |
TINYINT |
1 байт |
|
SMALLINT |
2 байта |
2 байта |
MEDIUMINT |
3 байта |
|
INTEGER, INT |
4 байта |
4 байта |
BIGINT |
8 байт |
8 байт |
FLOAT,
DOUBLE, REAL |
4 или 8 байт |
4 или 8 байт |
DECIMAL,
NUMERIC |
65 десятичных знаков |
Без ограничений |
SERIAL,
BIGSERIAL |
8 байт |
4 или 8 байт |
BIT |
Есть |
Есть |
Таблица 2
Строки и данные
Тип данных |
MySQL |
PostgreSQL |
BINARY, CHAR |
255 |
10485760 |
VARCHAR, VARBINARY |
65535* |
|
TINYBLOB, TINYTEXT |
2^8 |
10485760 |
BLOB, TEXT, BYTEA |
2^16 |
Не огранчен |
MEDIUMBLOB |
2^24 |
|
LONGBLOB |
2^32 |
|
Одним из самых важных
условий надежности и беспрерывной работы СУБД в критически важных системах является
поддержка репликации. И MySql и PostgreSQL, имеют поддержку single-master
(Единственный ведущий), multi-slave (множественные ведомые) сценариев
репликации. Эти базовые уровни репликации включены в дистрибутив программы, и
их исходный код открыт. Так же PostgreSQL предлагает дополнительную поддержку
multi-master (Множественные ведущие), multi-slave (множественные ведомые)
репликации от внешних разработчиков, а также дополнительные методы репликации [3,
с. 7].
Выводы
1.
MySQL и PostgreSQL — это
системы управления базами данных, перед которыми стоят разные задачи и необходимо
чётко понимать, в чём их разница.
2.
MySQL показывает своё
преимущество на базах данных с большим количеством простых однотабличных
запросов, однако требует более внимательного подхода со стороны разработчика, а
также накладывает довольно серьёзные ограничения на хранимые данные и на
функционал СУБД.
3.
Для проектов, не
ориентированных на многомиллионную посещаемость, а также в академических целях
рекомендуется использовать PostgreSQL.
Список литературы:
1)
Tim Conrad. PostgreSQL vs. MySQL vs. Commercial Databases: It's All
About What You Need / InstantDoc
№9797.– November 2000. – C. 9–17.
2)
Somayeh Dodge. Evaluating different approaches of spatial database
management for moving objects / Map Middle East. – 2005. – C. 1– 144
3)
Лебедев А.А. Удаленная репликация: критерии выбора /
Storage News.
– № 2 (27). – 2006. – С. 6 – 9.;
4)
Даниела Флореску, Дональд Коссман. Переосмысление стоимости и
производительности систем баз данных, 2009. –
С. 43– 48.