Бесплатная миграция IT-инфраструктуры в облако

Сравнение PostgreSQL vs MySQL: что подходит вашему бизнесу?

Роман Андреев
Роман Андреев
Технический писатель
18 января 2023 г.
4219
7 минут чтения
Средний рейтинг статьи: 5

PostgreSQL и MySQL — одни из самых популярных реляционных систем управления базами данных (РСУБД). В статье рассмотрим функциональные различия между ними и сравним их производительность, чтобы вы смогли выбрать подходящую СУБД для своего бизнеса.

PostgreSQL vs MySQL

Несмотря на сближение функциональных возможностей Postgres и MySQL, различия между ними остаются. Например, Postgres лучше подходит для управления крупными и сложными базами данных (БД), а MySQL оптимальна для БД сайтов и онлайн-приложений, поскольку ориентирована на скорость работы. Это вытекает из устройства этих РСУБД, которое мы и рассмотрим.

Хранение данных в Postgres и MySQL

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

Поддержка

Стандарту SQL уже более 35 лет, при этом только разработчики Postgres стараются привести свой продукт к полному соответствию стандарту. Разработчики MySQL используют иной подход к SQL: если какая-то функция позволяет упростить работу с системой, она будет реализована даже при несоответствии этой реализации стандарту. Это делает MySQL более дружественной к пользователю в сравнении с PostgreSQL.

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

Языки программирования

Обе системы поддерживают большое количество языков программирования: из популярных отметим C++, Java, Python, lua, PHP, поэтому у сотрудников из отдела разработки компании не будет проблем с внедрением функций любой из этих систем.

Операционные системы

MySQL более универсальная система, которая работает в среде Windows, Linux, MacOS и в ряде других операционных систем. Postgres изначально «заточен» под Linux, однако с помощью интерфейса REST API становится таким же универсальным решением, которое работает под любой ОС.

Обработка данных

Возможностей для обработки данных больше у Postgres. Например, чтобы перемещаться по данным таблиц, используется курсор, при этом ответы записываются в память сервера БД, а не в память клиента, как это реализовано в MySQL. Также PostgreSQL позволяет строить индексы одновременно для нескольких столбцов. При этом поддерживаются разные индексы, позволяющие работать с несколькими типами данных. Еще эта СУБД предлагает использование регулярных выражений в запросах. Однако новые поля в Postgres добавляются только в конце таблиц.

Параллельная обработка данных лучше организована в PostgreSQL, поскольку эта платформа имеет встроенную реализацию MVCC (многоверсионный параллельный доступ). MVCC также может поддерживаться и в MySQL, но это возможно только при условии поддержки со стороны InnoDB. А относительно репликации отметим, что Постгрес поддерживает логическую, потоковую и двунаправленную, а MySQL — круговую, а также master-master и master-standby. Под репликацией мы понимаем копирование данных между БД, расположенными на разных серверах.

PostgreSQL и MySQL: сравнение производительности

Проведение тестов будет честным, если сравнивать две чистых системы, то есть решения «из коробки». Тестирование с индексом дает следующие результаты:

  • При добавлении Postgres оказывается более чем в 2,7 раза быстрее, обрабатывая БД на 400 тыс. записей за 5,5 секунд против 15 сек. у MySQL.
  • При внутреннем объединении Postgres обрабатывает 400 тыс. записей за 1,1 сек., а MySQL за 2,8 сек., что дает выигрыш более чем в 2,5 раза.
  • При сортировке с индексом аналогичное количество записей PostgreSQL  обрабатывает за 0,9 сек., а MySQL — за 1,5 сек.
  • Показатели при группировке следующие (БД аналогичная, на 400 тыс. записей): у PostgreSQL — 0,35 сек., у MySQL — 0,52 сек.
  • Выборка с индексом дает преимущество «Постгрес» в 2 раза: 0,6 сек. против 1,2 сек.

Что касается обновления в БД, то здесь Postgres демонстрирует постепенный рост по мере увеличения количества записей, а вот MySQL обрабатывает их за примерно одно и то же время, начиная со 100 тыс. записей. Это связано с разной реализацией хранения данных. Тем не менее преимущество у PostgreSQL даже на больших объемах данных существенное: 3,5 против 9,5 сек. на 400 тыс. записей, то есть более чем в 2,7 раза.

При отмене индексов PostgreSQL также выдает на удивление высокую производительность, обрабатывая БД на 400 тыс. записей за 1,3, 0,7 и 2,2 сек. при внутреннем объединении, выборке и обновлении соответственно. 

Таким образом, производительность Postgres оказывается выше в среднем в 2 раза (2,06). При этом изначально MySQL позиционировалась как платформа с улучшенной производительностью, однако постоянная оптимизация со стороны разработчиков PostgreSQL сделали их продукт более производительным.

Преимущества для разработчиков

Рассмотрим только уникальные функции, которые характерны для конкретной платформы. Поэтому, например, мы не будем касаться здесь поддержки MVCC или ACID, поскольку эти функции есть у обеих систем.

С точки зрения разработчика MySQL хороша тем, что:

  • Обеспечивает повышенную гибкость и легко масштабируется, поскольку для нее создано более десяти движков, использующих разные алгоритмы хранения данных.
  • Лучше обрабатывает небольшие БД с операциями чтения (то есть без записи в БД).
  • Удобнее в управлении и поддержке, поскольку эта СУБД проще настраивается и не требует большого количества подготовительных действий перед началом работы.

С точки зрения разработчика PostgreSQL хороша тем, что:

  • Предлагает объектно-ориентированный подход к данным, что позволяет ввести функции наследования и создавать более сложные структуры табличных данных, не вписывающихся в стандартную реляционную модель.
  • Лучше обрабатывает БД с операциями записи, в том числе с валидацией записываемых данных.
  • Поддержка функций ООП открывает возможности для обработки данных в формате NoSQL, включая данные в таких форматах, как, например, XML или JSON.
  • Способна поддерживать БД без ограничения на объем данных. Есть компании, которые используют Postgres для поддержки своих БД размером до нескольких петабайт.

Сравнение PostgreSQL и MySQL наглядно

Для наглядности представим главные особенности обеих систем в виде таблицы:

 

PostgreSQL

MySQL

Соответствие стандарту SQL

почти полное

частичная совместимость

Поддерживаемые ОС

Solaris, Windows, Linux, OS X, Unix, Hp-UX

Solaris, Windows, Linux, OS X, FreeBSD

Применение

Массивные базы данных со сложными запросами (например, Big Data)

Более легкие базы данных (например, веб-сайтов и приложений)

Типы данных

Поддерживает расширенные типы данных, включая массивы, hstore

Поддерживает стандартные типы данных SQL

Наследование таблиц

Да

Нет

Триггеры

Поддерживает триггеры по большому количеству команд

Ограниченная поддержка триггеров по командам

Движки для хранения данных

Один (Storage Engine)

Разные

Как видим, ряд функций реализован только в Postgres. Обе системы поддерживают ODBC, JDBC, CTE (обобщенные табличные выражения), декларативное секционирование, GIS, SRS, оконные и ряд других функций.

Заключение

У обеих систем есть свои преимущества. MySQL справляется с задачами горизонтального масштабирования, ее проще настраивать и управлять ей, но если планируется расширение БД, а также работа с разными типами данных, лучше заранее подумать о внедрении Postgres. Кроме того, PostgreSQL — на 100% бесплатное решение, поэтому компании с ограниченным бюджетом могут использовать его, не опасаясь лишних трат.

Расскажите, какую СУБД для своего проекта выбрали вы?
Роман Андреев
Роман Андреев
Технический писатель
18 января 2023 г.
4219
7 минут чтения
Средний рейтинг статьи: 5
Комментарии 7
Kogutson
20.09.2024, 15:08

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

А когда InnoDB не поддерживал MVCC? И еще про встроенную реализации MVCC в PostgreSQL: https://www.cs.cmu.edu/~pavlo/blog/2023/04/the-part-of-postgresql-we-hate-the-most.html Мягко говоря - реализация не самая удачная

Kogutson
20.09.2024, 15:00

А можно как-то узнать дизайн теста, который проводился?

Igor Pigin
Igor Pigin
23.01.2023, 06:20

Возможно, для полных профанов статья и может быть сколько-то полезной, но даже для них не стоит писать откровенную ерунду. Не знаю, где автор нашел те цифры, показывающие разгромное преимущество производительности Постгрес, лично мне попадались только результаты бенчмарков, которые явного лидера совершенно не выявляли. Также полнейший бред представляет собой таблица сравнения: в MySQL есть и хранимые процедуры, и триггеры, и представления, и union... У меня чуть глаза на лоб не вылезли, когда я вот это вот всё читал. Придраться можно практически к каждому абзацу. Кошмар непрофессиональный, а не статья.

Igor Pigin
Igor Pigin
23.01.2023, 06:28

Если автор хотел показать преимущества Постгрес, за счет которых он сейчас действительно используется активно, то стоило подчеркнуть не сравнимо более мощную поддержку серверной логики. В MySQL хотя и есть хранимые процедуры и триггеры, но реализованы они достаточно ограничено. Тогда как в Посгрес, помимо встроенного языка PgSQL, можно использовать ещё и сторонние диалекты типа Python и т.п.

Команда Timeweb Cloud
Команда Timeweb Cloud
24.01.2023, 13:55

Игорь, добрый день! Благодарим вас за комментарий. Мы посмотрели описания свежих версий MySQL и Postgres — и да, действительно, там добавились новые возможности. Мы скорректировали таблицу по вашим замечаниям.

По поводу производительности Postgres: приведенные в статье цифры — это результаты тестирования коробочных решений. Схожие результаты можно найти в открытом доступе. Например, тут. При обработке больших данных Postgres всегда работает быстрее. Но возможно, у самых свежих версий MySQL 8.0.32 и PostgreSQL 15.1.1 показатели будут иными. Если поделитесь результатами, мы с радостью добавим их в статью.

Кстати, видим, что вы отлично разбираетесь в теме. Как смотрите на то, чтобы внести вклад в развитие нашего контентного раздела — написать инструкцию или статью на интересные вам и нам темы? Разумеется, за вознаграждение.

Если интересно: напишите, пожалуйста, нам на емейл content@timeweb.cloud. Готовы обсудить с вами темы статей и условия сотрудничества.

Александр Панцерный
Александр Панцерный
21.01.2023, 12:50

максимальный бред

Команда Timeweb Cloud
Команда Timeweb Cloud
24.01.2023, 05:51

Будем рады услышать почему у вас сложилось такое мнение и с какими выводами в статье вы не согласны