1.11.2.1 Стратегии развития MySQL и PostgreSQL | Оглавление | 1.11.2.3 Тестирование скорости работы MySQL и PostgreSQL |
На странице crash-me
(http://www.mysql.com/information/crash-me.php)
приведен список ограничений и особенностей СУБД, которые могут быть
обнаружены автоматически с помощью специальных программ. Однако не стоит
забывать о том, что многие ограничения могут быть изменены настройкой
соответствующих баз данных. Впрочем, эта web-страница оказывается очень
кстати, если необходимо, чтобы создаваемое приложение нормально работало с
несколькими СУБД или для перевода приложения с одной СУБД в другую.
MySQL обладает следующими преимуществами перед PostgreSQL:
MySQL
обычно намного превосходит PostgreSQL по скорости работы. Кроме
того, в MySQL 4.0 реализован кэш запросов. Он позволяет во много раз
увеличить скорость обработки запросов для сайтов, на которых
преобладают неоднократно повторяющиеся запросы на чтение.
Cygwin
. Нам доводилось слышать о недостаточной стабильности
работы PostgreSQL в среде Windows, но самостоятельно эти сведения до
сих пор мы проверить не могли.
VACUUM
для освобождения занятого последствиями работы команд
UPDATE
и DELETE
пространства и проводить статистический анализ,
необходимый для достижения максимальной производительности PostgreSQL.
Запускать VACUUM
необходимо и после каждого добавления к таблице
нескольких столбцов. На напряженно работающих системах VACUUM
нужно
запускать более часто, в худших случаях - по несколько раз в день. А
ведь во время работы VACUUM
(а ее работа может продолжаться часы, если
база данных достаточно велика) база практически ``мертва''. Впрочем, в
PostgreSQL версии 7.2 выполнение основных функций этой программы
больше не приводит к блокировке базы, и пользователи могут продолжать
нормально работать с ней. Новая команда VACUUM FULL
берется за дело
более серьезно: она, как и в старых версиях, блокирует таблицу и
сжимает копию таблицы на диске.
mysql-test-run
и
crash-me
(http://www.mysql.com/information/crash-me.php), а также
пакет для замеров производительности. Тестовая система постоянно
обновляется, в нее добавляется код для тестирования всех новых
возможностей и почти всех воспроизводимых ошибок, которые попали в
поле нашего зрения. Перед выпуском каждой новой версии мы используем
эти пакеты для тестирования MySQL на нескольких платформах.
Наши тесты значительно превосходят по своим возможностям все
существующие в PostgreSQL аналоги, и обеспечивают высокое качество
кода MySQL.
PostgreSQL
.
ALTER
TABLE
.
HEAP
-таблиц или дисковых MyISAM
. See section 7 Типы таблиц MySQL.
InnoDB
и BerkeleyDB
. Так как все
системы поддержки транзакций в разных условиях работают по-разному,
это дает разработчику возможность найти наилучшее решение для условий,
в которых будет работать его система. See section 7 Типы таблиц MySQL.
myisampack
, MySQL-генератор сжатых таблиц (только для чтения).
INSERT
, SELECT
и UPDATE
/DELETE
над базой
или таблицей, MySQL предоставляет возможность определения
полного набора разнообразных привилегий на уровне базы, таблицы и
столбца. Кроме того, MySQL позволяет задавать привилегии для
комбинаций хост/пользователь. See section 4.3.1 Синтаксис команд GRANT
и REVOKE
.
InnoDB
) реализованы в виде файлов (по
одной таблице в файле), что значительно облегчает создание резервных
копий, перенос, удаление и даже создание символьных ссылок между
базами данных и таблицами, даже если сервер находится в нерабочем
состоянии.
MyISAM
(наиболее распространенного типа таблиц в MySQL). Ее использование
требуется только в случае физического повреждения файла данных
(например, в результате аппаратного сбоя). Позволяет восстановить
большую часть данных.
Недостатки MySQL по сравнению с PostgreSQL:
MyISAM
,
во многих случаях работает быстрее, нежели блокировки на уровне
страниц, строк или контроль версий. Недостаток этого подхода в том,
что если не учитывать механизм работы блокирования таблиц, один
длительный запрос может надолго заблокировать таблицу. Обычно этого
эффекта можно избежать, приняв соответствующие меры при разработке
приложения. Если это не удастся, всегда можно изменить тип таблицы и
сделать ее транзакционной. See section 5.3.2 Вопросы блокирования таблиц.
UDF
(user-defined functions
, определяемые пользователем
функции) возможности MySQL можно расширить и дополнить обычными
SQL-функциями или их объединениями. Но это сделать не так просто, да и
система не настолько гибка в этом отношении, как PostgreSQL. See section 9.2 Добавление новых функций в MySQL.
UPDATE
и в MySQL 4.1 - с помощью
подзапросов. В MySQL 4.0 можно одновременно удалять данные из
нескольких таблиц. See section 6.4.6 Синтаксис оператора DELETE
.
Ниже перечислены преимущества PostgreSQL по сравнению с MySQL на сегодняшний день.
Так как нам известен план разработки новых версий MySQL, мы включили в приведенную ниже таблицу версии MySQL, в которых будет реализована поддержка соответствующих возможностей. К сожалению, в сопоставлении мы сделать этого не могли, так как план разработки PostgreSQL нам неизвестен.
Возможность | Версия MySQL |
Подзапросы | 4.1 |
Внешние ключи | 5.0 (3.23 с InnoDB) |
Представления | 5.0 |
Хранимые процедуры | 5.0 |
Триггеры | 5.0 |
Объединения | 4.0 |
Полные связи | 4.1 |
Ограничения | 4.1 или 5.0 |
Курсоры | 4.1 или 5.0 |
R-деревья | 4.1 (для таблиц MyISAM) |
Наследование таблиц | Не планируется |
Расширяемая система типов | Не планируется |
Другие причины, по которым можно предпочесть PostgreSQL:
MyISAM
реализована поддержка R-деревьев).
OR
. Набор результатов тестов скорости MySQL,
расположенный по адресу
http://www.mysql.com/information/benchmarks.html покажет, каких
конструкций следует избегать при работе с различными базами данных.
Недостатки PostgreSQL по сравнению с MySQL:
VACUUM
затрудняет использование PostgreSQL в постоянно работающих
системах.
INSERT
, DELETE
и UPDATE
.
Полный список недостатков приведен в первой таблице настоящего раздела.
1.11.2.1 Стратегии развития MySQL и PostgreSQL | Оглавление | 1.11.2.3 Тестирование скорости работы MySQL и PostgreSQL |