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

Рано или поздно каждый уважающий себя разработчик задается вопросом: в чем же именно разница между PostgreSQL и MySQL. На самом деле почти никто не задает этот вопрос, но если вы только начинаете знакомиться с реляционными базами данных и типами данных, будет полезно получить общее представление о том, с чем вам, возможно, предстоит иметь дело дальше. Эта совсем небольшая статья рассмотрит ваши варианты.
И не переживайте, что это мало связано с no-code. Разобраться в базах данных и в том, как они работают, будет полезно в любом случае. Сама Directual работает на NoSQL, о чем мы уже как-то рассказывали.
В общем, поехали.
Данные, если говорить просто, — это набор фактов и наблюдений.
Разработчики не всегда были достаточно проницательны, чтобы осознать их важность, но по мере того, как интернет сближал мир, до них дошло, что нельзя больше относиться к данным как к необязательному дополнению.
Теперь бизнес зарабатывает на данных по-крупному. Компании копаются в них, чтобы оценить перспективных клиентов, понять, на что те способны, избежать рискованных предприятий и многое другое. Да, именно поэтому каждый сайт жаждет получить ваши cookies, маркетинговые данные, привычки и так далее. Вот так и делаются деньги.
Это, очевидно, требует более мощных баз данных, способных справляться со всей этой информацией. Теперь давайте разберемся с двумя самыми весомыми игроками на арене баз данных с открытым исходным кодом: PostgreSQL и MySQL.

«Самая продвинутая в мире реляционная база данных с открытым исходным кодом». Если вас не хвалят достаточно часто, можно похвалить себя и самостоятельно!
Перемотаем на 40 лет назад.
Первопроходец по имени Майкл Стоунбрейкер, мозг проекта Ingres, покинул Беркли, чтобы создать проприетарную версию Ingres. Затем он вернулся в Беркли, чтобы запустить пост-Ingres проект и решить множество проблем, с которыми в то время сталкивались другие базы данных.
Это и есть проект, который мы теперь называем PostgreSQL — на случай, если вам интересно, откуда взялось такое замысловатое название.
Он пришел с набором функций для работы с разными «объектно-реляционными» типами данных, включая правила поддержания здоровых связей между таблицами и репликацию данных между серверами. PostgreSQL впервые появился на сцене в виде версии 6.0 29 января 1997 года. И с того дня разношерстная команда разработчиков, компаний поддержки и волонтеров поддерживает работу этого программного обеспечения под открытой лицензией.
Это система управления объектно-реляционными базами данных с открытым исходным кодом, которая не просто соответствует SQL, но и до отказа набита функциями. К тому же вы можете расширять ее под любые корпоративные инструменты, которые вам нужны. Она была создана, чтобы работать плавно, и ее можно встроить практически в любое программное обеспечение.

Нишевый мем про PostgreSQL, который вы в конце концов поймете, если еще не знакомы с этой базой данных
PostgreSQL тяготеет к объектно-ориентированному программированию, а значит, вы можете модифицировать типы данных, чтобы создавать собственные пользовательские типы. И база практически готова прикрыть вас в любой ситуации. Она встречается повсюду, входя в топ-5 самых используемых баз данных, прямо следом за MySQL. Bloomberg, Goldman Sachs и Nokia используют PostgreSQL за кулисами.
Эта штука не привередлива в плане отраслей. Она открыта для всех желающих. Давайте посмотрим на несколько способов, которыми PostgreSQL применяется сегодня.
Веб-технологии: PostgreSQL — не однобокое решение. Это не просто реляционная база данных, она может также выступать в роли хранилища данных в стиле NoSQL. Вы можете получить лучшее из обоих миров — реляционного и документоориентированного — в одном продукте. Она отлично работает с современными фреймворками, такими как Django (Python), Hibernate (Java), Ruby on Rails, PHP и так далее. Благодаря возможности репликации вы можете масштабировать свой сайт, добавляя столько серверов баз данных, сколько нужно.
Государственные ГИС-данные: у PostgreSQL есть классное расширение под названием PostGIS. Оно обладает множеством функций для работы с разными геометрическими фигурами: точками, линиями, и оно оптимизировано так, чтобы поддерживать использование диска и памяти на низком уровне, что повышает производительность запросов. Такие службы, как электроснабжение, экстренное реагирование и водная инфраструктура, во многом полагаются на ГИС, чтобы отслеживать бригады и направлять их в нужные места, часто в весьма непростых условиях.
Производство: многие производственные отрасли нуждаются в средствах хранения данных, способных справляться с высокими требованиями. Именно здесь PostgreSQL может оптимизировать производительность цепочки поставок. База соответствует ACID и может быть настроена на автоматическое переключение при отказе, полную избыточность и обновления практически без простоя. Учитывая, что новая политика лицензирования Oracle сильно давит на небольшой бизнес, PostgreSQL становится решением по умолчанию.
Научные данные: научные проекты могут генерировать терабайты данных, с которыми нужно грамотно работать. У PostgreSQL мощные аналитические возможности и надежный SQL-движок, поэтому обработка больших объемов данных не станет проблемой. PostgreSQL также легко расширяется. Вы можете подключить Matlab и R для выполнения различных математических функций.
PostgreSQL — это не просто система управления базами данных, это тяжеловес с целой кучей преимуществ. Ее хвалят за богатый функционал, впечатляющую надежность, высокую производительность, гибкость и простоту репликации.
Давайте разберемся почему:
PostgreSQL поддерживает внешние ключи, хранимые процедуры, соединения и представления на множестве языков. База умеет хранить фотографии, звуки и видео. Открытый исходный код означает, что за ней стоит целая команда разработчиков, постоянно охотящихся за багами и делающих ее лучше.
Благодаря функции упреждающего журналирования (write-ahead logging) она с легкостью справляется со сбоями, что пригодится для онлайн-резервного копирования и восстановления на определенный момент времени. Вы можете откатиться к любой точке, покрытой данными WAL, используя старую физическую резервную копию базы данных.
К тому же эта «физическая резервная копия» не обязательно должна быть свежим снимком состояния базы данных. Даже если она устарела, повторное воспроизведение WAL-журнала за нужный период времени способно устранить любые внутренние несоответствия.
Встроенная синхронная репликация — часть пакета PostgreSQL, гарантирующая, что основной узел ждет каждую запись, пока узел-копия не зафиксирует данные в своем журнале транзакций.
Постоянство транзакции можно настроить для каждой базы данных, сессии и пользователя, независимо от ее синхронности. Это ускоряет транзакцию, поскольку не требуется проверять, дошла ли транзакция до синхронного резервного узла, что особенно полезно, когда некоторым рабочим процессам эти гарантии не нужны.
Говоря о расширяемости, речь идет о планировании роста.
PostgreSQL — мастер в этом деле. Она работает по принципу управления через каталог, храня информацию в базах данных, столбцах, таблицах и так далее. Кроме того, JIT-компиляция (just-in-time) выражений означает, что вы можете писать код на разных языках программирования без необходимости перекомпилировать базу данных и заново определять типы данных. Эта гибкость, позволяющая изменять любую операцию на лету, делает базу идеальным выбором для внедрения новых структур хранения.
Будучи проектом с открытым исходным кодом, PostgreSQL позволяет модифицировать код под разные платформы, а значит, вы можете настроить ее для работы на любой платформе, будь то Windows, Solaris, OS X или Linux. Она также может обрабатывать множество пользователей одновременно, блокируя только параллельные обновления одной и той же строки.

PostgreSQL против MySQL: слон против дельфина. Делайте ваши ставки.
MySQL был создан шведской компанией MySQLAB в 1995 году благодаря стараниям Майкла «Монти» Видениуса, Дэвида Аксмарка и Аллана Ларссона. Позже Sun Microsystems выкупила MySQLAB.
MySQL был разработан, чтобы дать бизнесу и домашним пользователям надежный способ управления данными. Альфа- и бета-версии платформы появились в свободном доступе к 2000 году, и большинство из них хорошо ладили с крупными платформами.
Примерно в то же время они открыли исходный код. Это позволило сторонним разработчикам вносить существенные изменения в систему. Конечно, переход на открытый исходный код означал прощание с частью выручки, но им удалось вернуть ее, когда MySQL стал привлекать все больше внимания.
К концу 2001 года они достигли ошеломляющих 2 миллионов активных установок. Чтобы дать представление о масштабе — это почти столько же, сколько живет в Словении! В 2002 году они расправили крылья и открыли штаб-квартиру в США. К тому моменту платформа уже насчитывала 3 миллиона пользователей, принося 6,5 миллиона долларов выручки. И с тех пор все только нарастало как снежный ком.
В целом это прямолинейная реляционная система баз данных. Она эффективна и удобна для пользователя, что делает ее именем, с которым вы часто будете сталкиваться в технологических кругах. Вооружившись SQL, вы сможете разобраться в целом ряде концепций структурированного языка запросов (SQL), чтобы создавать мощные системы хранения данных.
Самое приятное? Она бесплатна и с открытым исходным кодом, но также существует в нескольких проприетарных вариациях, если вам это по душе.

Слишком рано?
Сервер MySQL создан для работы с интенсивными нагрузками — он многопоточный и рассчитан на многозадачность. Он использует и транзакционные, и нетранзакционные движки и не потеет при установке. Пользователи любят его за простоту, надежность и скорость.
Теперь вы знаете, как появился MySQL, давайте посмотрим, что он предлагает.
MySQL любят за простоту. Он предлагает такие функции, как триггеры, хранимые процедуры и многое другое. Он оснащен полезными утилитами, включая программу резервного копирования, административный клиент и графический интерфейс. Новички могут ориентироваться в опциях с помощью GUI, что делает его популярным выбором.
MySQL может безопасно обрабатывать крупные проекты. Он адаптируется к меняющимся условиям, и, будучи открытым исходным кодом, вы вольны экспериментировать с кодом. MySQL быстрый, надежный и недорогой благодаря уникальной конструкции движка хранения. Он быстро загружается благодаря кэш-памяти.
MySQL со временем улучшил производительность благодаря таким функциям, как B-дерево дисковых таблиц со сжатием индексов, оптимизированные вложенные циклы соединений и выделение памяти на основе потоков. Он обеспечивает дополнительные преимущества по производительности при многопользовательской конкурентности за счет блокировки на уровне строк и постоянных считываний.
MySQL, как и PostgreSQL, придерживается модели ACID, обеспечивая безопасность транзакций. Он защищает данные с помощью восстановления на определенный момент времени и автоматической фиксации.
Если происходит сбой, система восстанавливается до последней контрольной точки, избегая потери данных. Сообщество с открытым исходным кодом помогает решать проблемы и исправлять баги.
Он также поддерживает целостность данных с помощью ограничений внешних ключей. Он использует систему паролей для обеспечения безопасного интерфейса, проверяя пароль в зависимости от хоста перед доступом к базе данных. Пароли шифруются при подключении к серверу.
MySQL бесплатен, с открытым исходным кодом, и может быть закодирован на различных языках. MySQL Connector/NET связывает данные с базой данных, а Connector/J обеспечивает поддержку MySQL для клиентских программ на Java. Для клиентов, использующих C или C++, а также языки с привязками к C, доступна клиентская библиотека, написанная на C.
Он предоставляет API для нескольких языков и является предпочтительной кроссплатформенной системой баз данных, которую можно использовать в Linux, Windows, Solaris и других системах. Широкая совместимость делает его масштабируемым.
Пользователи могут свободно использовать и модифицировать код MySQL, распространяемый по открытой лицензии. Сообщество с открытым исходным кодом готово быстро устранять любые баги или проблемы безопасности. MySQL предоставляет группы пользователей, форумы и поддержку для оперативного решения проблем, обучая пользователей работе с базой данных.
MySQL — это большая величина в веб-приложениях, множество серверов зависят от него. Не только для WordPress — другие, не связанные с WordPress проекты, такие как Joomla, TYPO3 и Drupal, используют MySQL в качестве основной базы данных.
Вот как MySQL демонстрирует свою надежность:
OLTP-транзакции
Транзакциям нужны и скорость, и точность. MySQL способен обрабатывать тысячи запросов в секунду. Транзакции должны придерживаться принципов атомарности, согласованности, изолированности и долговечности (ACID). MySQL следует этим принципам ACID, что делает его безопасным для важных транзакций. Если система выходит из строя посреди транзакции, она откатывается к контрольной точке.
Стек LAMP с открытым исходным кодом
MySQL — ключевая часть многих приложений в стеке программного обеспечения с открытым исходным кодом LAMP (Linux, Apache, MySQL и PHP/Python/Perl). LAMP — это привычное решение для веб-сервисов, часто выбираемое для динамических сайтов и высокопроизводительных веб-приложений.
Приложения для электронной коммерции
MySQL — распространенная транзакционная машина для платформ электронной коммерции. Он удобен для управления данными клиентов, транзакциями и каталогами товаров. В решениях для e-commerce MySQL часто используется вместе с другими, нереляционными базами данных, такими как хранилища ключ-значение, для синхронизации данных о заказах и хранения данных, не относящихся к товарам.
Если вы все еще ломаете голову над выбором правильной базы данных для своего бизнеса, здесь вы разберетесь, что именно вам нужно. PostgreSQL и MySQL — обе надежные базы, но вам нужно выбрать ту, которая подходит именно под ваши требования, как перчатка.
Давайте глубоко погрузимся в то, чем эти базы данных отличаются друг от друга.
PostgreSQL и MySQL более или менее идентичны.
При этом MySQL немного отстает в поддержке некоторых подзапросов, таких как «LIMIT» или «ALL», а также стандартных предложений SQL, таких как «INTERSECT» или «OUTER JOIN». Он не так соответствует SQL, как PostgreSQL, который отлично работает со всеми упомянутыми подзапросами. Так что если ваш бизнес активно использует подзапросы, вам лучше выбрать PostgreSQL.
И PostgreSQL, и MySQL справляются хорошо, но PostgreSQL превосходит MySQL более широким выбором:
MySQL поддерживает следующие языки:
Быстрая база данных — это не только про то, чтобы сделать ваш сайт шустрее, но и про облегчение нагрузки на сервер за счет выявления мусорных данных, которые можно выбросить.
PostgreSQL и MySQL — оба известны скоростью. Но однозначного чемпиона здесь нет. Результаты бенчмарков склоняются то в одну, то в другую сторону в зависимости от тестового окружения и используемого оборудования. В зависимости от ситуации, одна база может лучше справляться с множеством задач, а другая — показывать лучшую производительность на менее мощном оборудовании.
MySQL обычно опережает PostgreSQL по командам только для чтения, но за счет параллельных операций. PostgreSQL, с другой стороны, блистает при операциях чтения-записи, работе с большими наборами данных и сложными запросами.
MySQL — это прямолинейная реляционная база данных, тогда как PostgreSQL — объектно-реляционная база данных. У PostgreSQL более продвинутые типы данных, и она позволяет объектам наследовать свойства, что может усложнять ситуацию. У PostgreSQL единый, соответствующий ACID движок хранения, тогда как у MySQL есть 15 дополнительных движков хранения помимо стандартного InnoDB. Выбор движка хранения зависит от вашего случая использования.
PostgreSQL создает новый системный процесс для каждого нового соединения, потребляя больше памяти при большом количестве соединений. MySQL, напротив, использует единый процесс и поддерживает один поток на каждое соединение, что делает его более подходящим для небольших приложений.
PostgreSQL создан для соблюдения стандартов, богатства функций и расширяемости. Его производительность в целом сопоставима — чтение медленнее, чем в MySQL, но более эффективная запись больших объемов данных. Кроме того, PostgreSQL лучше справляется с параллельными задачами, чем MySQL.
Разрыв в возможностях между MySQL и PostgreSQL сокращается с годами. MySQL, особенно со старым движком MyISAM, все еще отлично справляется с чтением данных. Он также сумел подтянуться и приблизиться к возможностям PostgreSQL по записи больших объемов данных.
Не стоит слишком заморачиваться по поводу производительности, если вы выбираете инструмент для повседневных приложений. PostgreSQL и MySQL практически идентичны с точки зрения производительности.
Это означает, что базы данных, по сути, копируют данные из одной базы в ее дубликаты, чтобы у всех была одна и та же информация. Это дает такие преимущества, как отказоустойчивость, масштабируемость, автоматическое резервное копирование и отсутствие влияния долгих запросов на основной кластер.
И MySQL, и PostgreSQL умеют работать с репликацией. PostgreSQL предлагает синхронную репликацию, то есть работают и синхронизируются две базы данных. С PostgreSQL можно даже настроить синхронную и каскадную репликацию. В MySQL репликация однонаправленная и асинхронная, то есть одна база данных является основной, а остальные — копиями.
Обе базы также умеют работать с кластеризацией, используя общее хранилище для дублирования данных на каждом узле в окружении. Это помогает базам данных справляться со сбоями благодаря избыточности от дублирования данных на разных узлах.
У MySQL есть преимущество в виде поддержки JSON — важной функции NoSQL. Но PostgreSQL поддерживает пользовательские типы данных, массивы, hstore и XML. Больше типов данных означает больше функциональности. Например, PostgreSQL воспринимает массивы как тип данных и имеет функции, совместимые с ними.

Наглядный пример структуры таблиц MySQL
Хотя разные форматы данных имеют свои преимущества, с ними бывает сложно работать, поскольку они не следуют единому стандарту. Так что то, что работает с одной базой данных, не всегда подойдет для форматов PostgreSQL.
MySQL поддерживает его лишь частично, поскольку в нем нет всех функций, например ограничения проверки (check constraint). Впрочем, у него есть множество расширений. PostgreSQL поддерживает большинство основных функций SQL — если быть точным, 160 из 179 обязательных.
PostgreSQL в этом плане немного хвастается. Он поддерживает продвинутые типы данных, которых нет в MySQL — сетевые адресные типы, нативный UUID, геометрические/ГИС-типы, индексируемый JSON и временные метки с учетом часового пояса. Вы даже можете добавлять собственные операторы, типы данных и типы индексов. Так что если ваше приложение работает с неструктурированными данными или этими уникальными типами данных, PostgreSQL может стать вашим выбором. Но для базовых числовых и символьных типов данных подойдет любая из баз.
Индексы могут ускорить ваши SQL-запросы при работе с большими таблицами данных и повысить производительность базы данных. Без индексов ваши запросы будут выполняться медленно и станут головной болью для СУБД.
У PostgreSQL и MySQL свои варианты индексирования. У PostgreSQL есть частичные индексы, B-tree индексы, хеш-индексы и индексы выражений. У MySQL есть индексы, хранящиеся на R-деревьях, B-деревьях, инвертированных списках и хеш-индексы.
И PostgreSQL, и MySQL обрабатывают управление группами и пользователями, а также предоставление привилегий SQL. MySQL использует нативные службы Windows, PAM и LDAP для аутентификации пользователей, тогда как PostgreSQL использует аутентификацию клиентов на основе IP и фильтрацию с помощью Kerberos и PAM. Так что в плане безопасности они примерно равны.
У PostgreSQL есть множество волонтеров, предоставляющих бесплатные консультации через списки рассылки и IRC. Вы также можете купить платную поддержку у сторонних компаний. Также существуют книги и руководства по PostgreSQL, помогающие устранять неполадки.
У MySQL также есть большое волонтерское сообщество, предоставляющее бесплатную поддержку. Вы можете получить ее на сайтах Percona и MySQL. Oracle предлагает круглосуточную платную поддержку для своих коммерческих версий. Также существует множество руководств, книг и туториалов по MySQL для устранения неполадок.
Ну что ж.
Выбор правильной базы данных для вашего приложения немного похож на выбор подходящей машины для путешествия. Вы можете выбрать спорткар, если хотите скорость, или внедорожник, если ожидаете бездорожье. В мире баз данных вашим спорткаром может стать MySQL — известный своей скоростью. Вашим прочным внедорожником может стать PostgreSQL — с его возможностями работы как со сложными запросами, так и с высокой конкурентностью.
Вы строите сложную систему: возможно, вы создаете систему, которая делает нечто большее, чем просто хранит и извлекает данные. Может быть, это инструмент научного анализа или сложная CRM, которая должна обрабатывать данные и выполнять сложные вычисления. Способность PostgreSQL определять собственные типы данных и создавать пользовательские функции на различных языках программирования поможет в этом.
Вы приверженец стандартов: если вы из тех, кто любит следовать правилам буквально, то выбирайте Postgres. Он придерживается стандартов ANSI-SQL, как монах — своих обетов. У него в арсенале есть все продвинутые стандартные функции SQL.
Вы строите следующий Uber: работаете с сервисами на основе геолокации? PostgreSQL в связке с PostGIS без проблем справится с ГИС (геоинформационными системами) данными. Он с легкостью манипулирует геопространственными данными, помогая вам плавно предоставлять услуги на основе геолокации.
Высокая нагрузка: если вы создаете приложение с высокой нагрузкой, где множество пользователей будут одновременно пытаться читать или записывать данные, управление конкурентностью в PostgreSQL обеспечит нужную скорость даже в часы пик.
Быстро: нужно быстро запустить что-то в работу? MySQL. Он быстрый, простой в настройке и еще проще в использовании. Особенно если ваше приложение много читает данные, MySQL — настоящий демон скорости.
Избыточность: если вы хотите создать систему с отличной избыточностью и возможностями резервного копирования, MySQL может распределить вашу базу данных по нескольким серверам, и вы сможете спать спокойнее, зная, что ваши данные в безопасности.
У вас веб-проект: совместимость MySQL с PHP делает его любимцем веб-разработки. Если вы создаете сайт или веб-приложение, не ищите дальше.
Ограниченный бюджет: работаете в стартапе или небольшом бизнесе, где каждая копейка на счету? MySQL проще в управлении, требует меньше вычислительной мощности и в целом предлагает более экономичное решение.
В конце концов, все довольно просто. Вот и все:

Просто не используйте Excel или Google Sheets в качестве базы данных. Большинство людей определяются со своим технологическим стеком, пробуя строить небольшие вещи и смотря, как они работают. Конечно, если вы рассчитываете однажды сместить мистера Маска и запустить свой полноценный Twitter, тогда ваш выбор — PostgreSQL. Нужно что-то более легкое на текущий момент? MySQL.
Для всех остальных потребностей есть NoSQL, который является основой Directual и каждого ее пользователя. В конце концов, зачем возиться с базами данных, если можно обойтись без возни?
Дайте нам знать, если хотите узнать больше, или просто поздоровайтесь, написав нам на hello@directual.com. Или заходите в наши сообщества — ссылки в футере ниже.