Чем MySQL лучше PostgreSQL?


8

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

Я все еще новичок в мире PostgreSQL, и, поскольку я готов отойти от MySQL для всех своих будущих проектов, я хочу знать следующее: есть ли какая-то особенность MySQL, которая работает лучше (как в высокопроизводительный или более удобный для пользователей и т. д.), чем в PostgreSQL?

Мне интересно, что я собираюсь пропустить из MySQL. Я уже обнаружил, что поля AUTO_INCREMENT в MySQL более удобны, чем SEQUENCES в PostgreSQL, и развертывание в Windows было проблематичным в прошлом (больше не было проблемой. Для меня это никогда не было проблемой).

Что еще?


Вот своеобразное любопытство: stackoverflow.com/questions/2221787/…
Пол


Я ненавижу mysql, но он делает MERGE / UPSERT легче, чем PG, и я нахожу чувствительные к регистру поля раздражающими
Нил Макгиган

Ответы:


3

Вы явно подходите к этому с точки зрения разработчика, поэтому вы можете найти более полезные ответы в SO.

С административной точки зрения:
- Репликация (HA)
- Репликация (Масштабирование *)
- Репликация (резервные копии)
- Поддержка приложений
- Размер и глубина сообщества (Документация, Поддержка)
- Существующая база установки / доступные задания

* Обратите внимание, что вы упомянули postgresмасштабирование лучше. масштабирование означает что-то уникальное для всех, но, как правило, вещи, которые имеют путь к распределению нагрузки между несколькими серверами, масштабируются лучше, чем вещи, которые этого не делают.


Я также заинтересован в административных аспектах. Я не был уверен, где разместить это. Кстати, вы правы по поводу масштабирования. Под масштабами лучше я имел в виду, на одной машине, а не на кластерах. MySQL имеет очень небольшой прирост производительности на многоядерных системах, и в настоящее время многоядерные являются нормой. Кроме того, я видел MySQL идет от хорошей производительности практически бесполезно , когда нагрузка увеличивается, и было впечатление , что PostgreSQL бы перевалена нагрузка лучше, но я понимаю , что это спорно и должно быть осведомилось лучше. Кстати, аргументы репликации заслуживают рассмотрения.
Массимилиано Торромео

1
Раньше MySQL имел очень небольшой выигрыш в многоядерности, но если вы используете хорошо исправленную сборку 5.0, почти любую сборку 5.1, сборку innodb-plugin (/ xtradb) или сборку 5.4, которая больше не соответствует действительности. Не пытаясь быть конфронтационным, но ваше анекдотическое замедление mysql почти наверняка было бы решено, и ваши «впечатления» postgres справились бы с этим лучше - это пустое предположение. Ключевым моментом здесь является то, что postgres против mysql - это то, о чем вы можете много говорить с точки зрения развития софистики, но с точки зрения эксплуатации / бизнеса дело было закрыто несколько лет назад.
cagenut

Конечно, я указал, что это было просто впечатление, потому что, если я на самом деле не пытаюсь обслуживать одни и те же данные под одной и той же нагрузкой, я не могу быть уверен, и я знаю, что на самом деле ничего не доказываю. Спасибо за разъяснение последних достижений MySQL в производительности.
Массимилиано Торромео

Я просто всегда использую тип «serial» в postgres, я считаю это более удобным, чем «integer auto_increment». Или вы имели в виду что-то еще?
Птман

3

COUNT (*) также намного медленнее с PSQL. Вы должны создавать триггеры для такого рода функций.


1
Интересно, но, насколько я понял, это относится только к запросам COUNT (*) БЕЗ условия where в движке MyISAM. Кроме этого, он работает аналогично. Или postgresql все еще медленнее даже по сравнению с InnoDB и MyISAM с предложением where?
Массимилиано Торромео

Что ты имеешь в виду ? выберите count ( ) из foo; не работает в pgsql? Хотя верно, что count ( ) медленнее в postgres по сравнению с mysql, есть причина для этого и обходной путь. Хороший обзор можно найти по адресу wikivs.com/wiki/MySQL_vs_PostgreSQL
Sibster,

1
Он медленнее по той же причине, что и Myno
EarthMind

3
COUNT (*) медленнее из-за реализации MVCC. Вы получаете выгоду с точки зрения производительности чтения / записи, но поскольку транзакции могут находиться в различных состояниях, становится трудно определить, что такое «истинное» количество.
Эйвери Пейн

2

Поскольку Postgres эффективно выполняет копирование при записи для каждого обновления (чтобы иметь возможность обрабатывать транзакции), если вам не нужны транзакции и выполняется много операций записи относительно операций чтения, MySQL не будет иметь издержек, которые PostgreS буду. (каждая обновленная запись должна писать больше, обновлять индексы и т. д.)


1
Я думаю, что вы должны квалифицировать это немного. Да, это будет быстрее, но не будет гарантии согласованности ваших данных. Это отлично подходит для некоторых ситуаций (списание комментариев пользователей с веб-сайта), но может создавать проблемы в других (оформление заказа через Интернет).
Эйвери Пейн

1

Я могу вспомнить одну вещь, отсутствующую в PostgreSQL:

Я думаю, что было что-то также с блокировкой, вставкой или обновлением. Но я не могу вспомнить, что это было на самом деле. : S


1

Поле auto_increment «удобно» не очень актуально, не так ли? Oracle имеет последовательности и, несомненно, является наиболее широко используемой коммерческой базой данных в мире.

Огромное количество информации, которую можно найти о том, как PostgreSQL будет более безопасным при сбое и так далее. Я просто собираюсь указать вам на эту страницу вики PostgreSQL (без сомнения, цветное мнение, но это то, что вы ищете в любом случае).

Многие люди упоминают на этой странице, что MySQL более дружелюбен к новичкам. Так? Объясните мне, как это важно в критически важной среде.


Будучи последовательностями, наиболее широко используемый подход не делает поля auto_increment менее «удобными», и это актуально для меня, потому что я спрашиваю различия между двумя рассматриваемыми дБм. Но это не мешает мне перейти на pgsql, поэтому я согласен, что это не настоящая проблема.
Массимилиано Торромео

1

MySQL часто называют grep с поддержкой SQL . Что касается меня (сейчас на момент написания статьи), то это выглядит почти как PHP - довольно неловко, но популярно.

Мне интересно, что я собираюсь пропустить из MySQL.

Попробуйте переименовать базу данных для самого начала. ;) Затем добавить (пропустить) условные индексы.

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


0

Функция auto_increment удобна до тех пор, пока вы не поймете, что они сосут для таблиц с чрезвычайно высоким параллелизмом вставки, после чего они становятся узким местом, и вы вынуждены реализовать последовательность, используя таблицу MyISAM.

В любом случае, чтобы ответить на ваш вопрос, самое большое, что MySQL сделал для этого, - это легко настроить репликацию, которая позволяет связывать репликацию и читать ведомые. Тем не менее, Postgres будет иметь это в следующем выпуске, 9.0 (который уже находится в альфа-статусе).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.