RSS Telegram YouTube Apple Яндекс Spotify Google Amazon Почта

49. nextgres & debezium

28.04.2024

Скачать

К списку выпусков

Ссылки выпуска:

nextgres

Йона Харрис (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

Хочу рассказать про любопытный продукт, о котором я узнал как раз в контексте миграций с одной СУБД на другую. Это Debezium - сервис, который может подключиться почти к любой популярной СУБД (PostgreSQL, MySQL, MongoDB, Oracle, SQL Server, Cassandra, Spanner и т.д. и отправлять через топик Kafka вам события о вставках, обновлениях и удалениях данных.

Есть и более простой вариант установки, без Kafka - это Debezium Server. Сервер, с помощью коннекторов читает из СУБД-источника, формут JSON-событие и отправляет в messaging-сервер (поддерживаются Redis, Amazon Kinesis, Apache Pulsar, Google pub/sub).

Заметка о работе с pgx.Pool

К списку выпусков