@link00

Для каких задач больше подойдет MySQL а для каких PostgreSQL?

Хотелось бы услышать не религиозные споры, и сравнения что лучше/хуже. А именно ДЛЯ каких задач какая СУБД затачивалась и больше подойдет? Что лучше использовать в универсальном скрипте Интернет магазина?
  • Вопрос задан
  • 3793 просмотра
Решения вопроса 1
un1t
@un1t
Задачи примерно одинаковые. Для интернет магазина подойдет любая. Обе СУБД проверенны временем и используются в том числе на крупных и highload проектах.
Для дешевых сайтов лучше MySQL, т.к. есть на любом хостинге. Т.е. если вы пишите коробочную CMS на PHP, то лучше MySQL. Если облачный конструктор сайтов, то без разницы.

MySQL поддерживает и транзакции и полнотекстовый поиск и гео данные, но что-то релизовано в движке MyISAM, а что-то в InnoDB. Т.е. если нам надо и то и то, то придется юзать разные движки на таблицы, а это ломает например ссылочную целостность. В простгресе один движек и все это есть.

У MySQL еще некоторое время назад был самый топорный, читай медленный алгоритм join'ов. В этом плане Postgres был впереди. Ну как впереди, он давал преимущество на коряво написанных приложениях с большим количеством join'ов. Можно ли считать это преимуществом вопрос. Но в последний версиях MySQL 5.6 появились более быстрые виды join'ов. Лично мне это все до лампочи, потому что join'ы во первых были медлеными, а во вторых не масштабируются, поэтому я их не использовал. Да и Django умеет делать быстрый джойн на уровне приложения простым методом ORM - prefetch_related.

JSONB - технология Postgres, которая позволяет сохранять JSON в таблицу. Я бы не назвал это особым преимущестовм, в MySQL хоранить JSON не проблема, в обычно текстовом поле, только обработку делай на уровне приложения и все. В Джанге, опять же это делается установкой какой-нибудь батарейки django-jsonfield или написанием 15 строчек кода единоразово. Т.е. явно сильного преимущества тут нет, тем более, что такие штуки в любом случае удобнее в Монге хранить.

Массивы в Postgres. Было бы прикольно, если бы могли не только хранить, но и строить по ним индекс, как в Монге. Но нет, Постгрес предлагает строить по ним полнотекстовые индексы. Ну а если речь идет про полнотекстовый поиск, то на любом большом сайте уже есть поисковый движек, например Sphinx или ElasticSearch, соотвестваенно, я могу масивы и в MySQL серелизовать в строку и индексировать их этим движком.
Тут преимущество явно на стороне Монги (хотя ее мы тут не рассматриваем), Постргесу еще расти.

Постгрес умеет строить индексы по XML и видимо JSON. Подумаешь, если какая уже говорил, у нас на проекте есть полнотекстовый движек, то мы можем построить индекс по чему угодно и без Постгреса.

Полнотекстовый поиск. Вот тут у Postgres действительно есть преимущество как перед MySQL, так и перед MongoDB. Постгрес подерживает русский язык на уровне стемминга, что во многих случаях волне достаточно. Если надо морфологию, то уже поисковые движки надо использовать, а не БД. MySQL не поддерживает языки, а MongoDB поддерживает русский, но не поддерживает оператор AND (блин как это вообще может быть?!).

Вобщем пока таким явным преимущестовм Постгреса я вижу полнотекстовый поиск, для проектов в которых почему-то нет полноценных полнотекстовых движков. Но с установкой любого движка, это преимущество исчезает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
SowingSadness
@SowingSadness
web-разработчик
PostgreSQL лучше во всех аспектах, в том числе и по скорости ответа.
Уже нет причин использовать MySQL.

PostgreSQL можно продавать со своим продуктом. MySQL - нет.
PostgreSQL умеет массивы, MySQL - нет.
PostgreSQL умеет json, MySQL - нет.
PostgreSQL умеет DateTime с временными зонами, MySQL - нет.
PostgreSQL умеет работать с временными интервалами, MySQL - нет.
PostgreSQL умеет нормально работать с unicode, MySQL - нет.
PostgreSQL умеет DISTINCT по выбранным колонкам, MySQL - нет.
PostgreSQL умеет ограничивать значения индексов по условиям, MySQL - нет.
PostgreSQL имеет схемы, MySQL - нет.
PostgreSQL имеет наследование в таблицах, MySQL - нет.
PostgreSQL есть нормальная оптимизация JOIN, MySQL - нет.
PostgreSQL умеет материализованные представления, MySQL - нет.
PostgreSQL умеет PLSQL, MySQL - нет.
PostgreSQL умеет Python функции, MySQL - нет.
PostgreSQL умеет ключи из внешних источников, MySQL - нет.
PostgreSQL умеет нормальные(вложенные) транзакции, MySQL - нет.
MySQL есть проблемы с установкой и удалением своих сервисов под Windows, PostgreSQL - нет.
̶P̶o̶s̶t̶g̶r̶e̶S̶Q̶L̶ ̶у̶м̶е̶е̶т ̶а̶с̶и̶н̶х̶р̶о̶н̶н̶у̶ю р̶е̶п̶л̶и̶к̶а̶ц̶и̶ю̶, ̶M̶y̶S̶Q̶L̶ ̶-̶ ̶н̶е̶т.
Ответ написан
voidnugget
@voidnugget
Программист-прагматик
Прежде чем холиварить нужно разъяснить 3 вещи
1. Модель БД в 6ой нормальной форме могут проектировать единицы
2. Понимать как все эти схемы, каталоги, представления и материализованные представления вписываются в SOA, как производить тестирование, какие функции где хранить, как проставлять тригеры, как подчищать журналы, как разделить представления чтения/записи в рамках CQRS - знают единицы, а использует на практике и того меньше.
3. PostgreSQL можно сделать быстрее и эффективнее чем MySQL / MongoDB / Oracle, но не наоборот, хотя косячить можно везде :), и там много чёрной магии которая простым смертным просто недоступна. PostgreSQL слишком просто кастомизируется, и этим можно получить просто дикие приросты производительности, особенно если речь идёт о внедрении каких-то кастомных типов данных, индексов и функций агрегации. В остальных решениях "шаг вправо, шаг влево - расстрел". Если вам нужно простое решение которое "лишь бы работало с коробки" - вам точно не стоит использовать PostgreSQL.
Ответ написан
begemot_sun
@begemot_sun
Программист в душе.
И то другое. Postgres больше заточена на обработку данных внутри БД, на их целостность.
MySQL больше заточена на быстрый ответ для генерации страниц
Ответ написан
@polozad
Постгрес поддерживает SQL99 и SQL2008, чего мускулю здорово не хватает. Разговор стоит вести ещё и в разрезе движков, которых у мускуля вовсе не один.
Ответ написан
Комментировать
He11ion
@He11ion
PHP-monkey
Адов холивар. Используйте что умеете/нравится. Для мелко-среднего магазина лучше дельфинчик - проще и дешевле, для крупных/высоконадежных проектов уже придется запускать слоника/еще что-то серьезное.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы