Йона Харрис (Jonah Harris) и Мейсон Шарп (Mason Sharp) на недавней конференции Postgres Conference 2024
в Сан Хосе (Калифорния) анонсировали nextgres. nextgres - это пропатченный backend
процесс, который
имплементирует SQL-протокол MySQL. При работе с nextgres у вас будет ощущение работы с MySQL.
Авторы этого проекта - активные разработчики как MariaDB, так и PostgreSQL. Среди целей nextgres указано, что в грядущих версиях backend-процесс будет способен работать по протоколам MongoDB и ElasticSearch.
Уже есть рабочая alfa версия проекта и демонстрация его работы на примере Wordpress + MySQL, где в качестве СУБД используется nextgres, т.е. движок PostgreSQL.
Но что не так с MySQL? Пока что все хорошо. По-прежнему MySQL - это самая популярная СУБД с открытым исходным кодом. Однако, PostgreSQL стремительно растет (как раз об этом я говорил в конце прошлого эпизода) и завоевывает сердца разработчиков. Так, согласно опросам Stack Overflow в 2022 году PostgreSQL опередил MySQL. MySQL старается не отставать, так в 8ых версиях (8.0, 8.1, 8.2), например, появились индексы на выражения, улучшено партицирование, добавлены привычные нам SKIP LOCKED, SELECT ... FOR UPDATE и т.д. Т.е. MySQL тоже активно развивается, но тред это пока не изменило и выглядит на догоняющий по функционалу продукт.
Итак, какие варианты использования nextgres могут быть? Во-первых, у вас в команде есть компетенции по
PostgreSQL и вы не хотите расширять тех. стек. Во-вторых, в MySQL нет такого богатого инструментария по
расширению СУБД, как в PostgreSQL. В PostgreSQL вы можете найти расширение почти на любой случай жизни.
Например, pg_search
с реализацией BM25 алгоритма, аналогичный тому, что реализован в ElasticSearch.
Ранее упоминаемый pg_cron
, citus
для превращения PostgreSQL в распределенную СУДБ.
И даже такая экзотика вроде PGStorm
для использования GPU для ускорения требовательных к CPU
задач. Всего перечисленного в MySQL попросту нет. В MySQL вы не разработчик, а в первую очередь клиент СУБД.
В-четвертых, PostgreSQL отлично работает с большими таблицами благодаря параллельным
запросам (parallel query), более продвинутые индексы (их больше, есть partial индексы и т.д.).
Кстати, если вы хотите уйти от ElasticSearch (как это хотим сделать мы), то обратите внимание на
ParadeDB
. Это СУДБ для полнотекстового поиска на базе PostgreSQL.
Для баланса отмечу, что и в MySQL есть ряд преимуществ. Во-первых, MySQL Workbench. Это удобная среда разработки, крайне удобна для новичков. Особенно мне нравится возможность создавать Enhanced Entity-Relationship (EER) диаграммы. Во-вторых, MySQL все еще более популярен и вы до сих пор встретите готовые раннеры LAMP, MAMP, XAMP и т.д, с MySQL в роли СУБД по-умолчанию. В-третьих, исторически много приложений (магазины, CMS, CRM и т.д.) используют MySQL.
Если вы всё еще не определились с СУДБ, то подумайте про PostgreSQL. У него отличные перспективы.
Хочу рассказать про любопытный продукт, о котором я узнал как раз в контексте миграций с одной СУБД на другую.
Это Debezium
- сервис, который может подключиться почти к любой популярной СУБД (PostgreSQL,
MySQL, MongoDB, Oracle, SQL Server, Cassandra, Spanner и т.д. и отправлять через топик Kafka вам события о
вставках, обновлениях и удалениях данных.
Есть и более простой вариант установки, без Kafka - это Debezium Server
. Сервер, с помощью
коннекторов читает из СУБД-источника, формут JSON-событие и отправляет в messaging-сервер (поддерживаются
Redis, Amazon Kinesis, Apache Pulsar, Google pub/sub).