PostgreSQL vs MySQL — что выбрать?

Кибербезопасность для бизнеса

Что такое системы управления базами данных (СУБД)

Данные любых информационных систем (проектов, компаний, сайтов, приложений и т.д.) хранятся в структурированном виде в базах данных (БД).
Существуют программы, которые позволяют создавать БД, манипулировать данными в этой базе и в целом администрировать БД. Такие программы называются системами управления базами данных или СУБД (Database Management System, DBMS).

Функции СУБД:

  • Управление данными в оперативной памяти с использованием дискового кэша
  • Управление данными во внешней памяти (на дисках)

  • Сохранение истории (журналирование изменений)

  • Резервное копирование
  • Восстановление БД после сбоев
  • Поддержка языка определения данных
  • Поддержка языка манипулирования данными
Любая СУБД базируется на определенной модели, задающей структуру обработки данных, по которой классифицируется и сама БД, и ее система управления.
Мы посмотрим на различия между реляционной MySQL и объектно-реляционной PostgreSQL, на преимущества и недостатки обеих СУБД и постараемся понять, что лучше выбрать для своего проекта: PostgreSQL или MySQL?

Описание и общие характеристики MySQL и PostgreSQL

  • MySQL
    Это реляционная система управления базами данных, РСУБД. Представляет собо ПО с открытым исходным кодом, но есть и лицензионная часть. Реляционные (от relation — «связь», «зависимость») означает, что такие системы работают с данными, как с набором записей с уникальным ключом и атрибутов, расположенных в двумерных таблицах и имеющих между собой связи. Записи — это строки, а атрибуты — столбцы. Помимо простых манипуляций с данными (например, выбирать, обновлять, вставлять, удалять), их можно логически объединять из разных таблиц и разных столбцов таблиц. Например, из трех таблиц о сотрудниках «личные данные», «зарплата» и «отработанные дни» (с большим количеством столбцов в каждой) нужно выбрать и показать только столбцы с ФИО, зарплатой за год и отработанными днями за определенный месяц. Реляционная СУБД справится с этим легко и быстро при любом размере БД. Реляционные базы данных и системы управления ими, в частности MySQL, уже несколько лет наиболее популярны при создании веб-приложений и сервисов разной нагруженности. MySQL поддерживает большинство традиционных типов данных: символы, строки, даты и пр. Считается, что MySQL хороша для веб-сайтов, небольших и средних приложений и онлайн-транзакций. Она простая, надежная, быстрая и не перегруженная функциями, чем и объясняется ее популярность.
  • PostgreSQL
    Это объектно-реляционная система управления базами данных, ОРСУБД. Полностью свободное ПО. В отношении модели данных от предыдущей она отличается тем, что поддерживает некоторые технологии объектно-ориентированного подхода. В этом подходе программа представлена в виде совокупности объектов, относящихся каждый к своему классу, а классы выстроены в иерархию наследования. Объекты, классы и наследование реализованы и в структуре баз данных, и в языке запросов ОРСУД. PostgreSQL помимо традиционных типов данных также поддерживает неструктурированные и перечисляемые. Считается, что PostgreSQL хорошо подходит для работы с большими данными и сложной аналитики. Она многофункциональна, из-за чего работает медленней, чем MySQL, поэтому менее популярна.

Краткая история MySQL и PostgreSQL

  • MySQL была официально запущена в 1996 году компанией Oracle, которая и сейчас ее разрабатывает и поддерживает. Однако основным ее автором является программист Майкл (Монти) Видениус с 1979 года, работавший тогда в шведской компании TcX, а позже создавший MySQL AB. В результате серии поглощений права на эту СУБД последовательно переходили от MySQL AB к Sun Microsystems и затем к Oracle. Сейчас MySQL распространяется под общественной лицензией GNU General Public License и под коммерческой лицензией (платная поддержка).
  • PostgreSQL была разработана в 1996 году. Ее предшественницей была открытая Postgres, разработку которой начал в Беркли в 1986 году Майкл Стоунбрейкер — Тьюринговский лауреат и пионер в области технологий БД. Проект Postgres тогда спонсировали научные фонды и Министерство обороны США. После 8 лет разработки проект разделился на коммерческую БД IIlustra и свободный проект PostgreSQL, разрабатываемый энтузиастами сообщества. Сегодня PostgreSQL называют самой развитой СУБД с открытым исходным кодом.

Стандарт SQL в MySQL и PostgreSQL

Для управления реляционными БД используется стандартизированный структурированный язык запросов (Structured Query Language, сокращенно SQL). Этот язык был разработан в 1974 году специально для создания, изменения и управления данными в реляционной БД, управляемой соответствующей СУБД. Изначально язык представлял собой способ работы с БД пользователя, но позже усложнился, обогатился и стал больше похож на язык программирования. Но, пожалуй, правильней всего его будет назвать лингвистическим средством для взаимодействия прикладного ПО с БД.

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

Функции MySQL и PostgreSQL

MySQL Это система управления реляционными базами данных, где данные, связанные друг с другом посредством ключей, располагают в таблицах.
  • Структурированные типы данных.
  • Различные типы таблиц.
  • Графический пользовательский интерфейс (GUI) — Workbench.
  • Инициирование нового соединения рассматривается как новый поток.
  • Следует некоторым стандартам ANSI SQL.
  • Поддерживает транзакции, однако должен использоваться тип таблицы InnoDB.
  • Ответ базы данных.
  • ODBC.
  • JDBC.
  • Обобщенные табличные выражения (CTE).
  • Декларативное секционирование.
  • Полнотекстовый поиск.
  • Логическая и полусинхронная репликация.
  • Оконные функции.
  • GIS и SRS.
PostgreSQL Это система управления объектно-реляционными базами данных, то есть можно создавать таблицы, соответствующие принципам объектно-ориентированного программирования (классы, наследование и т.д).
  • Вместе со структурированными поддерживает также неструктурированные и перечисляемые типы данных.
  • Графический пользовательский интерфейс (GUI) — pgAdmin.
  • Инициирование нового соединения рассматривается как новый процесс.
  • Близка к стандарту ANSI SQL.
  • Вложенные селекты.
  • Транзакции.
  • Ответ базы данных.
  • Внешние ключи.
  • Представления.
  • Хранимые процедуры.
  • Триггеры.
  • Unions.
  • Полные Joins.
  • Ограничители целостности.
  • Вакуум (очистка).
  • ODBC.
  • JDBC.
  • Обобщенные табличные выражения (CTE).
  • Декларативное секционирование.
  • Полнотекстовый поиск.
  • Логическая и полусинхронная репликация.
  • Оконные функции.
  • GIS и SRS.
Кибербезопасность для бизнеса

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

Для хранения данных в БД используются подсистемы хранения таблиц, которые еще называют движками. Они различаются способом записи данных на диск и методом считывания.
  • PostgreSQL поддерживает только один движок: Storage Engine.
  • MySQL поддерживает разные движки: InnoDB, MyISAM, Memory, CSV, Archive, Blackhole, NDB/NDBCLUSTER, Merge, Federated, Example.

Возможности обработки в MySQL и PostgreSQL

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

Производительность MySQL или PostgreSQL: что быстрее?

Часто скорость работы MySQL и PostgreSQL при их сравнении во время выбора для проекта — это самый важный критерий. Доступ к данным в 2021 году должен быть быстрым, ведь бизнес не будет ждать полдня ответа на свой запрос к своей же БД. Здесь мы акцентируем внимание на том, что главное отличие MySQL от PostgreSQL именно в скорости работы, MySQL быстрее. Но напомним, что иногда бывает важна не столько скорость доступа к БД, сколько качество самих данных и результатов их анализа. Поэтому более медленная по причине своей многофункциональности PostgreSQL хорошо подходит для аналитики и работы с Big Data, а более быстрая MySQL — для сайтов и приложений.

Какие языки программирования поддерживают MySQL и PostgreSQL

  • MySQL поддерживает языки: PHP, C/C++, Delphi, Java, Node.js, Perl, Erlang, Go, Lisp, R.
  • PostgreSQL поддерживает языки: C/C++, Delphi, Java, JavaScript, Erlang, Go, Lisp, .Net, Python, R, Tcl, Ruby, Scheme, Lua, LOLCODE, Perl, sh.

С какими операционными системами работают MySQL и PostgreSQL

Совместимость MySQL с операционными системами. Возможна локальная установка и облачная поддержка в Windows, MacOS, Linux-подобных ОС (Oracle, Ubuntu, Debian, Fedora, Red Hat Enterprises, Generic, SUSE Linux Enterprise Server), FreeBSD, Oracle Solaris.

Совместимость PostgreSQL с операционными системами. Локальная установка и облачная поддержка осуществляется преимущественно на Linux-серверах. Также доступен веб-сервер PostgREST для работы с БД через программные интерфейсы REST API, который превращает вашу БД PostgreSQL в RESTful API. Доступность: MacOS,Windows, Linux-подобные ОС (Red Hat Linux, CentOS, Oracle Fedora, Scientific, Debian GNU, Ubuntu, SuSE, OpenSuSE и другие дистрибутивы и производные), BSD (FreeBSD, OpenBSD), Oracle Solaris.
Кибербезопасность для бизнеса

Поддерживаемые типы данных в MySQL и PostgreSQL

MySQL
MySQL PostgreSQL

Как MySQL и PostgreSQL индексируют данные

Индексирование данных позволяет системам работать быстрее, без сильной нагрузки. У наших двух СУБД типы индексирования немного отличаются.
Типы индексирования MySQL

  • Индексы в R-деревьях (например, для пространственных типов данных).
  • Индексы в B-деревьях (INDEX, UNIQUE, PRIMARY KEY, FULLTEXT).
  • Хэш-индексы и инвертированные списки при применении FULLTEXT.
Типы индексирования PostgreSQL

  • Индексы в B-деревьях.
  • Хэш-индексы.
  • Индексы выражений (вычисляемые не из значений в столбцах, а из функций).
  • Частичные индексы (упорядочивают информацию не из всей таблицы, а из ее части).
Наши услуги в сфере кибербезопасности

Поддержка пользователей в MySQL и PostgreSQL

При сравнении PostgreSQL и MySQL стоит отметить, что вокруг обеих СУБД сформировались крупные сообщества, где готовы помочь бесплатно советом, рекомендацией или кейсом из своей практики.
  • Поддержка пользователей MySQL
    MySQL — это самая популярная СУБД с открытым исходным кодом, поэтому в Сети можно найти огромное количество опытных специалистов, готовых помочь в любой проблеме безвозмездно. Да, официальную документацию считают недостаточной, но существует также разные руководства, справочники и даже бесплатные книги по MySQL, с помощью которых можно самостоятельно разобраться в большинстве вопросов. Искать профессиональное сообщество по этой СУБД лучше всего на сайтах MySQL и Percona. Кроме того, существует версия MySQL Enterprise Edition, которая распространяется по подписке и, помимо нескольких полезных инструментов, включает круглосуточную техподдержку от Oracle.
  • Поддержка пользователей PostgreSQL
    У этой полностью открытой СУБД сообщество менее обширное, но все же большое. Оно также оказывает разнообразную бесплатную поддержку пользователям и разработчикам на профильных форумах, а также через списки рассылки и по IRC. Но с учетом того, что экспертов по сложной PostgreSQL меньше, чем по простой MySQL, получить поддержку по ней несколько сложнее. Однако по PostgreSQL есть множество бесплатных книг и инструкций.

Разработка MySQL и PostgreSQL

Чем отличаются PostgreSQL от MySQL в отношение разработки обеих СУБД, так это тем, что развиваются они по-разному, хоть и имеют обе открытый исходный код. Этого не было заявлено официально, но пользователи считают, что компания Oracle, которая разрабатывает MySQL, намеренно не развивает СУБД активно, потому что хочет сохранить главное конкурентное преимущество системы — скорость. Кстати, создается довольно много форков MySQL. В отличие от нее разработчики PostgreSQL, а это совет нескольких компаний и независимые программисты, активно разрабатывают систему, наполняя ее все большим количеством функций.

Чем отличается программирование под каждую СУБД

Разница между MySQL и PostgreSQL в части программирования в трех вещах: наборах символов и строки по умолчанию, функциях IF и IFNULL и чувствительности к регистру.
Наборы символов и строки по умолчанию
В MySQL нужно преобразовать наборы символов и строки в кодировку UTF-8 (но не во всех версиях). PostgreSQL этого не требует и даже не допускает использования UTF-8.
Функции IF и IFNULL вместо CASE
В PostgreSQL вместо операторов IF и IFNULL надо использовать CASE. А в MySQL их вполне можно использовать.
Чувствительность к регистру
Для PostgreSQL регистр важен. Строки запросов должны точно совпадать с полями в БД. Если этого не будет, запрос не выполнится. Для MySQL регистр не важен, поэтому запросы со строками в БД не обязаны совпадать по регистру.

Когда разработчики выбирают MySQL, а когда PostgreSQL

  • Основные преимущества MySQL для разработчиков

    • Надежность, благодаря частым обновлениям, касающимся функций и безопасности.
    • Поддерживает JSON.
    • Минимальное проведение операций для получения данных с диска.
    • Удобная работа с кастомной разработкой (можно дописать базовый набор функций, создать интеграции с другими приложениями, делать специфические отчеты по запросам клиентов).
    • Легкое масштабирование системы.
    • Возможность установки дополнительных приложений для расширения функционала.
    • Может функционировать с любым языком программирования.
    • Легкая интеграция с CMS, CMF.
    • Много вариантов настройки и оптимизации сервера MySQL через настройку переменных.
    • Можно добавить графический интерфейс.
    • Если использовать движок InnoDB, то доступно управление параллельным доступом через многоверсионность (MVCC).
  • Основные преимущества PostgreSQL для разработчиков

    • Поддерживает функцию управления параллелизмом нескольких версий.
    • Полная совместимость с SQL и ACID.
    • Удобство работы за счет разных индексов.
    • Легкость миграции на другое решение.
    • Поддерживает JSON и другие функции NoSQL.
    • Надежность и целостность данных (например, в ней сложно разрушить таблицы).
    • Есть возможность сохранения произведенных процедур, за счет чего возможно расширение опций.
    • Можно разработать собственные плагины и использовать нестандартные функции, написанные на других языках программирования.
    • Функции не ограничивают размер БД, даже если она исчисляется петабайтами.
    • Высокая производительность и управляемость за счет MVCC.
    • Поддержка отзывчивого сообщества.

Зачем использовать MySQL?

Это высокоэффективная и высоконадежная СУБД в web-среде. Ее стоит использовать для сайтов и веб-приложений, в которых надо выполнять простые транзакции, поскольку она работает быстро и стабильно с небольшими и средними объемами данных. MySQL стоит использовать, если предстоит проводить распределенные операции; если нужна легкая установка и настройка СУБД; если проект кастомный и возможны специфические отчеты; если часто нужно только чтение, то есть высокопараллельные операции без записи в базу данных.

Зачем использовать PostgreSQL?

Если в приоритете — целостность данных при выполнении непростых процедур. Она подходит для работы с очень большими наборами данных и в ситуациях со сложными операциями записи-чтения с одновременной валидацией данных (например, в машинном обучении).

Недостатки MySQL

У этой СУБД профессионалы отмечают некорректность, нестабильность работы и сильную регрессию производительности при осуществлении репликаций БД. Также есть проблемы с транзакциями между таблицами разных подсистем хранения. Нет механизма, обеспечивающего блокировку во время транзакций. Совместимость с ACID только при использовании InnoDB и NDB. Поддерживает только некоторые функции SQL. не поддерживает другие функции NoSQL, хотя поддерживает JSON. Если планируется работа на SSD-дисках со скоростью примерно 20 Мбайт в секунду, то эта СУБД будет тормозить. Менять структуру данных тоже будет сложно. MySQL чувствительна к серверу с нестабильным поведением. Есть шанс сломать таблицы при неправильном завершении, тогда восстановить БД будет возможно только из полного бэкапа.
Также недостатком отмечают скудную официальную документацию.
Когда не стоит использовать MySQL?

В высоконагруженных проектах, при работе с большими данными, в сложной аналитике. При многопоточных процессах. Если требуется многофункциональная система.

Недостатки PostgreSQL

В простых операциях чтения производительность этой СУБД уступает другим. Также недостатком можно считать сложность системы, ее настройки. Если у вас несложный проект с относительно небольшой базой данных, по которой вы не планируете проводить сложную аналитику, PostgreSQL лучше не использовать. А если вы планируете интегрировать ее с какими-то внешними компонентами, то готовьтесь к тому, что ваша кривая обучения будет высокой. Также у PostgreSQL нет надежного способа обновления до основных выпусков. Эта СУБД не для новичков. Может замедлять сервер, под нее сложно найти хостинг.
Когда не стоит использовать PostgreSQL?

Когда важна скорость обработки данных. А также если у вас простые, ненагруженные проекты, в которых нет требований повышенной надёжности данных, поддержки ACID и т.д.

Какую же СУБД лучше выбрать: MySQL vs PostgreSQL?

Мы видим, что в разных ситуациях каждая из этих СУБД может подходить лучше другой. Различия MySQL и PostgreSQL довольно заметны, хотя во многом их функционал и схож.
  • Для сайтов и приложений хороша MySQL, поскольку она работает быстро и не перегружена функциями. Она хорошо работает в системах OLAP и OLTP. Подходит тем специалистам, которые не хотят или не имеют возможности долго настраивать СУБД «под себя». Ее легко устанавливать, поэтому она отлично подходит новичкам. Также подходит тем, кто планирует управлять данными структурного типа, размер которых не превышает 2 Гб. Под нее легко найти опытного администратора БД.
  • Для аналитики больших данных лучше подходит PostgreSQL. Она хорошо работает при выполнении сложных запросов, потому что у нее множество функций и полное соответствие стандарту SQL. Она хороша для чувствительных данных, к которым есть повышенные требования безопасности. PostgreSQL, тогда как MySQL.

Отзывы клиентов

Айри.рф работает как SaaS, обеспечивая ускорение и защиту сайтов. Нам важна 100% доступность серверов и максимальная отказоустойчивость. Нам как специалистам по облакам приятно иметь дело с профессионалами!
Николай Мациевский, генеральный директор Айри.рф
Мы открыли портал на базе системы управления сайтами UMI.CMS. Работая с 1998 года, мы накопили несколько десятков тысяч материалов и статей. В 2010 году мы призвали читателей активно комментировать статьи, и база стала расти еще быстрее. Вместе с ней росло и количество читателей. В определенный момент мы начали испытывать трудности, так как административная панель часто «подвисала», и порой приходилось ждать до нескольких минут, пока статья сохранится или откроется для редактирования. Все это серьезно замедляло нашу работу. Мы обратились к Сергею Житинскому, и уже через неделю «подвисания» исчезли, база стала работать нормально. Скорость работы редакторов с контентом возросла, мы стали размещать больше материалов, перестали тратить время на бесполезное ожидание. Что касается посещаемости ресурса, то она существенно увеличилась. Мы сотрудничаем с Житинским на постоянной основе и теперь стали клиентами его предприятия Git in Sky, хотя русскому уху приятнее официальное название его компании — ООО «Жить в небе».
Анатолий Степанов, главный редактор портала «Русская народная линия»
Поскольку почтовые рассылки - это один из основных элементов деятельности - к ТП Git in Sky чаще всего обращаемся по поводу каких-то неполадок с почтой, хотя в последнее время они случаются совсем редко - может быть - раз в полгода".
Денис Каланов, генеральный директор, ООО «АйТи-Событие»
На простом языке наша задача звучала так: «Мы хотим, чтобы сайт не падал, и чтобы ни при каких условиях (сбой, человеческий фактор, наводнение и т.п.) данные наших пользователей не пропали».

Коллеги помогли подобрать правильную конфигурацию серверов, хранения и резервного копирования данных, всё настроили и научили программистов с этим работать. Что очень понравилось в сотрудничестве, так это то, что все работы были выполнены без остановки проекта и практически без участия нашей команды.

Также стоит отметить доступность коллег и быстрый отклик, а особенно — наличие "аварийного" чата, где всегда кто-то дежурит и где можно рассчитывать на оперативную поддержку.
Олег Баша, генеральный директор, Learme
Успешно сотрудничаем с конца 2013 года. Компания Git In Sky помогла нам перенести данные в «облака», оптимизировать инфраструктуру. Оперативно помогает справляться с возникающими сложностями.
— Кузнецов Антон, системный администратор
Стек технологий
Ansible • Terraform • MS Center • Puppet
Anycast • CDN • GeoIP • Multicast
postgers • MySQL • MSSQL • Redis • Mongo • Tarantool • ClickHouse
postgersql / pgbouncer / pgpool / patroni • Nginx • Rabbitmq • Redis / Sentinel • mysql / percona / maxscale / sqlproxy
Nginx • Apache • Openrestry • Traefik
Nginx • HAProxy • Traefik • Envoy
Frontend / Backend балансировка
Управление инфраструктурой
Кластеризация и отказоустойчивость
Ansible
Terraform
MS Center
Puppet
postgersql / pgbouncer / pgpool / patroni
nginx
rabbitmq
redis / sentinel
mysql / percona / maxscale / sqlproxy
postgres
mySQL
MSSQL
redis
mongo
tarantool
ClickHouse
anycast
CDN
geoIP
multicast
Nginx
openresty
Traefik
Apache
Nginx
HAProxy
Traefik
Envoy
СУБД
Сетевые технологии
Web серверы
Libvirt • VMware • KVM
LOM • BMC • ILo • IPvkm • Idrac
cPU • Mem • disk • net • HAProxy • Traefik • Load Balancing • Flamegraph
Prometheus • Zabbix • telegraf • Alertmanager • grafana • graphite
IpTables • UFW • WAF • Firewall • Pentests • Selinux • ACL / Exec Bits • Spam • Anti DDOS
Безопасность
Виртуализация
Мониторинг
libvirt
vMware
KVM
Prometheus
Zabbix
telegraf
Alertmanager
grafana
graphite
cPU
MEM
Disk
net
HAProxy
Traefik
Load Balancing
Flamegraph
LOM
BMC
ilo
ipvkm
idrac
iptables
UFW
WAF
firewall
pentests
selinux
ACL / exec bits
spam
Anti DDOS
Высокие нагрузки
Обслуживание датацентров

Часто задаваемые вопросы

Наши клиенты
и реализованные проекты
Git in Sky реализовал 250+ проектов в разных отраслях. Основные группы наших клиентов и кейсы:
Давайте обсудим
ваш проект
Оставьте заявку — наш специалист свяжется с вами для детального обсуждения задачи
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных согласно политике конфиденциальности
Также можете позвонить по номеру
8 800 222 19 68
Читайте также