PostgreSQL и MySQL являются самыми популярными Open Source реляционными базами данных. И часто возникает вопрос - чем отличается PostgreSQL от MySQL? Ответ на этот вопрос позволит понять, какая из баз данных лучше подойдет вашему проекту.

В данной статье мы сравним PostgreSQL и MySQL по различным параметрам и запишем их в сравнительную таблицу.

PostgreSQL vs MySQL

PostgreSQL

MySQL

Вывод

Лицензия

Собственная Open Source лицензия, аналогичная MIT и BSD лицензии

Open Source GPL

При этом сам MySQL принадлежит Oracle, что теоретически может привести к изменению лицензии в будущем и влиять на стратегию развития MySQL

Обе СУБД распространяются по либеральной Open Source лицензии. При этом PostgreSQL контролируется сообществом, а MySQL - компанией Oracle 

Популярность в мире

№4 среди всех СУБД в мире согласно рейтингу dbengines

№2 среди всех СУБД в мире согласно рейтингу dbengines

Обе СУБД занимают лидирующие строчки в мировых рейтингах, при этом MySQL на текущий момент распространен более широко, чем PostgreSQL

Тренд

Восходящий. Популярность PostgreSQL возрастает согласно рейтингу dbengines.

Нисходящий. Популярность MySQL незначительно падает согласно рейтингу dbengines

График запросов показывает рост популярности postgresql при падении популярности MySQL. При этом MySQL по прежнему более популярна.

Данные подтверждаются и различными международными рейтингами.

Модель подключения

PostgreSQL использует процесс для каждого соединения, где каждое соединение порождает новый процесс.

MySQL использует поток для каждого соединения, где каждое соединение порождает новый поток.

На практике это приводит к тому, что PostgreSQL обеспечивает лучшую изоляцию, но при большем потреблении ресурса. Для PostgreSQL рекомендуется проксировать соединение через пул соединений, такой как PgBouncer или pgcat.

Производительность

PostgreSQL обладает хорошей производительностью при умеренных нагрузках

MySQL обладает хорошей производительностью при умеренных нагрузках и чуть большей производительностью в сравнении с PostgreSQL при высоких нагрузках

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

Функции

PostgreSQL поддерживает пяти-уровневую архитектуру

Instance (also called cluster)

Database

Schema

Table

Column

Присутствует поддержка AСID-транзакций

Поддержка RBAC (безопасность)

Наличие оптимизатора запросов (лучший, чем у MySQL)

Физическая репликация с использованием WAL. И логическая репликация в режиме публикации/подписки.

MySQL поддерживает четырех-уровневую иерархию

Instance

Database

Table

Column

Присутствует поддержка ACID-транзакций

Оптимизация запросов есть, но она уступает PostgreSQL

Поддержка RBAC (безопасность)

Логическая репликация с использованием binlog

Функционал PostgreSQL и MySQL схож, но у PostgreSQL он несколько шире.

Расширяемость

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

MySQL имеет подключаемую архитектуру InnoDB

PosgreSQL более расширяемый и пластичный, в сравнении с MySQL

Удобство использования

Средняя

Высокая

нечувствительна к регистру

позволяет включать неагрегированные столбцы в SELECT, который использует предложение GROUP BY

Конечно, удобство это субъективное ощущение, но по ряду фактических свойств, MySQL проще.

Работоспособность (Operability)

При не экстремальных нагрузках СУБД работает стабильно

При не экстремальных нагрузках СУБД работает стабильно

И MySQL и  PostgreSQL работают стабильно при штатных нагрузках, но при экстремальных, могут наблюдаться сбои

Экосистема

PostgreSQL активнее поддерживается сообществом, и имеет более широкую экосистему, чем MySQL

MySQL имеет широкую экосистему, но уступающую PostgreSQL 

За счет более активного сообщества, PostgreSQL имеет более широкую экосистему, чем MySQL

Популярность в России

В России PostgreSQL более популярен.

В России MySQL менее популярен.

В России, как на более молодом рынке, PostgreSQL, имеющий восходящий тренд использования, более популярен, чем MySQL

Популярность PostgreSQL vs MySQL

На сегодня в мире MySQL используется чаще, чем PostgreSQL.

При этом в России ситуация обратная. По количеству запросов в Google MySQL лидирует, но при этом по количеству запросов в Яндекс лидирует PostgreSQL.

Динамика популярности показывает, что PostgreSQL постепенно вытесняет MySQL.

Основные преимущества PostgreSQL перед MySQL

  1. Лучший оптимизатор запросов.

    Оптимизатор запросов PostgreSQL представляет более зрелую, продвинутую функциональность в сравнении с MySQL.

  2. Большее соответствие стандарту SQL ANSI.

    Хотя PostgreSQL и не соответствует полностью стандарту ANSI (как и любая другая база данных, поддерживающая SQL), но в сравнении с MySQL есть заметная разница. Так, MySQL не поддерживает такие подзапросы как «LIMIT» или «ALL». MySQL также не поддерживает стандартные для SQL вещи, как «INTERSECT» или «OUTER JOIN».

  3. Более крупная экосистема.

  4. Более активное сообщество.

  5. Более широкий функционал.

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

  6. Больше актуальной документации в свободном доступе.

  7. Лучшая расширяемость. PostgreSQL содержит такие расширенные типы данных, которых нет в MySQL. А именно, типы сетевых адресов, собственный UUID, геометрические данные/ГИС, JSON, который можно индексировать,  временные метки с учетом часового пояса, свои операторы, типы данных и типы индексов.

Основные преимущества MySQL перед PostgreSQL

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

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

  3. В некоторых случаях MySQL выдерживает большую нагрузку.

  4. MySQL использует один процесс и поддерживает один поток, что требует меньше выделяемых вычислительных ресурсов.

Спорные и ситуативные факторы

  1. Скорость

    MySQL работает быстрее с командами только для чтения за счет параллелизма, в то время как PostgreSQL лучше работает с операциями чтения-записи, массивными наборами данных и сложными запросами. При этом разница в скорости идет на проценты, а не в разы, и скорее всего в 99% случаев использования, вы не заметите разницы.

  2. Горизонтальная и вертикальная масштабируемость.

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

Итоги

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


Вы можете развернуть базы данных PostgreSQL и MySQL в облаке Amvera Cloud c помощью push в выделенный Git-репозиторий. Для хостинга баз данных PostgreSQL и MySQL нужно выполнить несколько простых шагов, описанных в инструкциях для PostgreSQL и MySQL соответственно. Стоимость хостинга баз данных начинается от 170 руб. в месяц. Для теста системы вы можете ввести код QCOWI100, который добавит немного баланса для проведения экспериментов без необходимости предварительной оплаты.

Комментарии (5)


  1. selivanov_pavel
    24.08.2023 06:58

    Забыли упомянуть важный момент. Для MySQL есть Galera Cluster (или он же в виде Percona XtraDB Cluster), который даёт честный мульти-мастер (с ограничениями на размер транзакций, должны влезать в оперативку, но для большинства случаев этого хватает). Мульти-мастер бывает нужен редко. А вот возможность переключать нагрузку между базами простым L3 балансировщиком типа haproxy, не боясь потерять/отменить какие-то транзакции - это просто прекрасно. Ну и при потери сетевой связности меньшая часть кластера просто перестаёт принимать запросы, не надо никаких костылей для STONITH прикручивать.


    1. n_bogdanov
      24.08.2023 06:58
      +1

      Лучше тогда все-таки про group replication вспомнить, так как galera это тоже сложное стороннее решение. А group replication уже в ядре СУБД.

      К слову в postgres можно тоже всё решать балансировщиками, которых ещё и несколько на выбор.


      1. selivanov_pavel
        24.08.2023 06:58

        Воу, а я и не знал про такое. Будем смотреть.

        https://www.percona.com/blog/battle-for-synchronous-replication-in-mysql-galera-vs-group-replication/ - это, конечно, блог перконы, но некоторые аргументы выглядят разумно. Простота State Transfers, например.

        в postgres можно тоже всё решать балансировщиками, которых ещё и несколько на выбор

        Да, но это дополнительная сложность и ещё одно место, где что-то может пойти не так. Если нет выделенного DBA, который будет со всем этим хозяйством разбираться, то хочется, чтобы оно просто работало.


  1. n_bogdanov
    24.08.2023 06:58

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


  1. SWATOPLUS
    24.08.2023 06:58

    Количество запросов в Гугле не показатель популярности. В свое время по mysql было написано большое количество туториалов, новички гуглят эти статьи и поднимают статистику, прошаренные ребята (использующие pgsql) гуглят меньше.

    Куда репрезентабельнее было бы количество вакансий, где требуется знание pgsql. Я полагаю что в вакансиях слова MsSQL, Oracle и PostgreSQL будут встречаться на порядок чаще чем MySQL.