MySQL против PostgreSQL для веб-приложений

Я работаю над веб-приложением, используя Python (Django), и хотел бы знать, будет ли MySQL или PostgreSQL более подходящим при развертывании для производства.

В одном podcast Джоэл сказал, что у него были некоторые проблемы с MySQL, и данные не были согласованы.

Я хотел бы знать, есть ли у кого-то такие проблемы. Также, когда дело доходит до производительности, которую можно легко настроить?

Ответ 1

Примечание для будущих читателей: Последний текст был отредактирован в августе 2008 года. Это произошло почти 11 лет назад. Программное обеспечение может быстро меняться от версии к версии, поэтому, прежде чем выбрать СУБД на основе приведенных ниже рекомендаций, проведите некоторое исследование, чтобы убедиться, что оно все еще является точным. Проверьте новые ответы ниже.


Лучше?

MySQL гораздо чаще предоставляется веб-хостами.

PostgreSQL - гораздо более зрелый продукт.

Это обсуждение посвящено вашему "лучшему" вопросу

. По-видимому, согласно этой веб-странице, MySQL работает быстро, когда уровни одновременного доступа низкие, и когда операций чтения намного больше, чем записей. С другой стороны, он демонстрирует низкую масштабируемость с увеличением нагрузки и коэффициентов записи/чтения. PostgreSQL относительно медленен при низких уровнях параллелизма, но хорошо масштабируется при увеличении уровней нагрузки, обеспечивая при этом достаточную изоляцию между одновременным доступом, чтобы избежать замедлений при высоких коэффициентах записи/чтения. Далее приводится ссылка на ряд сравнений производительности, потому что эти вещи очень... чувствительны к условиям.

Так что, если вы принимаете решение "что быстрее?", тогда ответ "зависит". Если это действительно имеет значение, протестируйте ваше приложение на предмет обоих."А если действительно, действительно важно, вы получаете двух администраторов баз данных (один, который специализируется на каждой базе данных) и заставляет их настраивать дерьмо из баз данных, а затем выбирать. Удивительно, насколько дорогие хорошие администраторы баз данных; и они стоят каждого цента.

Когда это важно.

Что, вероятно, не так, так что просто выберите любую базу данных, которая вам нравится, и идите с ней; лучшую производительность можно купить за счет увеличения объема ОЗУ и ЦП, а также более подходящего дизайна базы данных, умных приемов хранимых процедур и т.д. - и все это дешевле и проще для random-website-X, чем мучительного выбора, MySQL или PostgreSQL и специалист по тюнингу от дорогих администраторов баз.


Джоэл также сказал в том подкасте, что этот комментарий вернется, чтобы укусить его, потому что люди будут говорить, что MySQL - кусок дерьма - Джоэл не мог вернуть count строк назад. Множественное число анекдота не является данными. Он сказал:

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

и он также сказал:

Это просто анекдот. И это одна из вещей, которая расстраивает меня, на самом деле, о блогах или просто Интернете в целом. [...] Там просто странная тенденция превращать анекдоты в правду, и я на самом деле, как блоггер, я начинаю чувствовать себя немного виноватым по этому поводу

Ответ 2

Некоторые говорят, что MySQL прост и быстр.

Быстро. Хорошо, если вы используете механизм хранения MyIsam по умолчанию, это быстро. У этого есть почти нулевая серьезная функция базы данных, но это быстро. Если бы я был саркастичным, я бы сказал, что grep на плоском файле тоже очень быстрый. Довольно забавно, что не так далеко от того, как MyIsam хранит данные. Поэтому не ожидайте наличия какой-либо функции реляционной базы данных. Даже ссылки на ограничения целостности.

Простой - теперь предположим, что вы хотите получить справедливое подмножество реальных функций базы данных. Возможно, некоторые вещи, такие как ограничения целостности, триггеры, изоляция транзакций, функциональные индексы? Таким образом, очевидно, что вы должны отключить движок MyIsam и выбрать один из трех основных двигателей хранения. Кто был разработан разными поставщиками, каждый из которых имеет определенную конфигурацию/поведение.

Откажитесь от обзор механизмов хранения, и если у вас не будет головной боли, я соглашусь, что MySql прост из вашей точки зрения.

Из этих фактов я позволю вам задуматься о тех, кто говорит, что MySql является быстрым и простым.

Если вы хотите масштабировать больше, экономить время, иметь менее странные ошибки для поиска, иметь более простой код приложения, тратить больше времени на оптимизацию своего бизнеса, а не на борьбу с вашей базой данных, то решение с открытым исходным кодом - Postgresql.

Ответ 3

Я не использовал Django, но я использовал MySQL и PostgreSQL. Если вы будете использовать свою базу данных только в качестве back-end для Django, это не имеет значения, потому что это абстрагирует большинство различий. PostgreSQL является немного более масштабируемым (он не попадает в кирпичную стену так же быстро, как MySQL, поскольку размер данных/количество клиентов увеличивается).

Реальная разница возникает, если вы делаете новую систему. Затем я рекомендую использовать PostgreSQL, потому что у него есть намного больше возможностей, которые делают ваш уровень БД намного более настраиваемым, чтобы вы могли точно настроить его на любые требования, которые у вас могут быть.

Ответ 4

Просто прошуть через несколько месяцев.

Географические возможности двух баз данных очень разные. PostgreSQL имеет исключительное расширение PostGIS. Географическая функциональность MySQL практически равна нулю.

Если ваш веб-сервис имеет компонент местоположения, выберите PostgreSQL.

Ответ 5

Хотя это немного устарело, было бы полезно прочитать страницу MySQL Gotchas. Многие из перечисленных там предметов по-прежнему верны, насколько мне известно.

Я использую PostgreSQL.

Ответ 6

Я использую и то, и другое. Мой выбор для конкретного проекта сводится к следующему:

  • Лицензирование. Собираетесь ли вы распространять свое приложение (IANAL).
  • Существующая инфраструктура и база знаний
  • Любой специальный соус, который у вас есть.

В специальном соусе мне нравится:

  • простая/дешевая репликация = MySQL
  • Огромные задачи набора данных с небольшими результатами = PostgreSQL. Используйте языковые расширения и очень эффективные операции с данными. (PL/Python, PL/TCL, PL/Perl и т.д.)
  • Интерфейс с R Статистические библиотеки = PostgreSQL PL/R доступен в debian/ubuntu

Ответ 7

Ну, я не думаю, что вы должны использовать другой бренд базы данных во всех предыдущих разработках (сборке, постановке, prod), так как это вернет вас, чтобы укусить вас.

Насколько я понимаю, PostgreSQL является более "правильной" реализацией базы данных, тогда как mySQl менее корректен (менее совместим), но быстрее.

Итак, если вы в значительной степени пишете приложение CRUD, mySQL - это путь. Если вам нужны определенные функции из вашей базы данных (если вы не уверены, то это не так), тогда вы можете захотеть просмотреть postgreSQL.

Ответ 8

Если вы пишете приложение, которое может быть распределено довольно немного на разных серверах, MySQL несет большой вес над PostgreSQL из-за переносимости. PostgreSQL трудно найти на менее удовлетворительных веб-хостах, albet есть несколько. В большинстве случаев PostgreSQL медленнее, чем MySQL, особенно когда дело доходит до тонкой настройки в конце. В общем, я бы сказал, чтобы дать PostgreSQL выстрел на короткий промежуток времени, таким образом, вы не полностью избегаете этого, а затем сделаете суждение.

Ответ 9

Спасибо. Я использовал Django с MySQL, и все в порядке. Выберите свою базу данных о необходимых функциях. Трудно сравнивать MySQL и Postgres. Лучше сравнить Postgress с сервером SQl.

Ответ 10

@WolfmanDragon

PostgreSQL имеет (крошечную) поддержку для объектов, но это, по сути, реляционная база данных. Из о странице:

PostgreSQL - это мощная система с открытым исходным кодом реляционная.

Ответ 11

MySQL является системой управления реляционными базами данных, а PostgreSQL - объект - система управления базами данных. PostgreSQL хорошо подходит для разработчиков на С++ или Java, поскольку он дает нам больше контроля над написанием запросов. ORDBMS также предоставляет нам объекты и пользовательские типы. Сами запросы SQL намного ближе к стандартам ISO, чем MySQL.
Вам нужны ORDBMS или РСУБД? Это лучше ответит на ваш вопрос.