четверг, 9 декабря 2010 г.

PostgreSQL VS MySQL

Как то так сложилось, что большинство хостингов предоставляют связку LAMP для web, поэтому вопрос выбора базы данных для личного проекта передо мной не стоял. MySQL популярен, надёжен, удобен и ещё куча разных положительных эпитетов. Однако, с недавних пор, по роду работы, мне периодически  случается работать с  Postgre. И вот какие наблюдения я для себя сделал.
Postgre DML будет побогаче чем у MySQL. Это плюс. Например,

INSERT INTO table (id, name) VALUES (DEFAULT, 'qweqwe')    RETURNING id;

Вставка записи сразу же возвращает ID записи. В MySQL для этого требуется вызов LAST_INSERT_ID(). 

Еще пример: конструкция WITH в Postgre позволяет выполнять рекурсивные запросы. То есть ветку дерева можно вытащить одним запросом. В MySQL5 такого нет, к сожалению.

Вынесенные за пределы определения таблиц последовательности в PG сильно гибче чем AUTOINCREMENT в MySQL. Они могут быть цикличные, могут быть, эм… как сказать то… непоследовательные, в смысле с шагом. Они, что самое интересное, могут быть завязаны более чем на одну таблицу. Например, если мы хотим разнести функциональные и нефункциональные требования по разным таблицам (поскольку набор полей для них разный),  но хотим для них общее пространство идентификаторов, то в Postgre это решается очень даже элегантно. В MySQL придется городить, я даже пока плохо представляю что.

Обратная сторона медали тоже присутствует, куда ж без неё. 
Бесплатных, функциональных и удобных программ для администрирования MySQL пруд пруди. Может и для Postgre есть, но я не видел. Штатный PGAdmin, мягко скажем, корявка та ещё. Регистрозависимый синтаксис для имён таблиц в Postgre – это потенциальный источник багов. Кром того, таблицы, именованные в camelcase стиле требуют обрамления в кавычки, что требует их экранирования в коде, что требует недюжинного терпения. Да и в глазах рябит от подсветки синтаксиса каждой “заэскейпленой” кавычки.

Ничего не буду говорить про производительность, статей полно, Гугля в помощь. Отличия же в возможностях все таки склоняют мой выбор на будущее в сторону Postgre. Такие дела.

2 комментария:

Анонимный комментирует...

Синтаксис имен таблиц не считаю недостатком, тем более по сравнению с MySQL, у которого он в UNIX-системах - регистрозависимый, а в Windows - регистронезависимый.
Статей по сравнению в интернете полно, но хороших крайне мало. В большей части тестов авторы даже не заботятся о том, чтобы конфигурации баз соответствовали примерно одинаковому расходу ресурсов системы. А тестов, результаты которых были бы качественно и детально проанализированы и сделан грамотный вывод - единицы.

ua9msn комментирует...

Регистрозависимость имён таблиц - совершенно неудобная и вредная штука. Ошибиться при вводе с регистром на раз два, плюс кавычки вокруг. Плюс SQL из кода в PGAdmin не вставишь, надо слэши убирать, обратно - не легче. Ни разу не видел необходимости именовать таблицы в базе так, что бы отличался только регистр. Более того, проектировщику такой базы я бы посоветовал пересадить себе руки на место.

Отправить комментарий