Сейчас мы расскажем, почему, начиная с версии 12.1, GitLab перестанет поддерживать MySQL.
В июле 2017 GitLab предупредил, что прекратит поддержку MySQL. Так вот, с выпуском 12.1 период подготовки к этому завершится, и больше мы MySQL поддерживать не будем. Решение непростое, и мы хотели бы поделиться доводами.
MySQL не очень подходил для нашего сценария использования
Есть немало удачных внедрений MySQL, однако в нашем случае он не совсем подходил. По сравнению с PostgreSQL MySQL имеет ряд ограничений, что приводило к проблемам с PostgreSQL при попытках приспособить MySQL. Вот небольшой список ограничений:
- С MySQL не получалось эффективно поддерживать вложенные группы
- Также есть ограничения по полям, которые мы обходим с помощью различных ухищрений, а в результате mysql может просто не сохранить данные
- MySQL не добавит тип столбца
TEXT
, если не задать параметр length - MySQL не поддерживает частичные индексы
- Уже этот набор ограничений создал несколько моментов (включая Geo), по которым мы и так не поддерживали MySQL
Он замедлял нас
Для обхода "больных" мест мы написали специфичный код для MySQL, что по факту вылилось в поддержание еще одной подсистемы баз данных, а по факту — удвоенная сложность при слияниях кодовой базы. Поддержка такого кода также приводила к накладным расходам, что в результате привело к замедлению скорости выпусков.
Отдельно стоит упомянуть нашу систему CI, которая прогоняла тесты дважды, таким образом прекратив поддержку MySQL мы сократим время тестирования и расходы на инфраструктуру. Расходы, надо сказать, значительные, не окупаются малым числом пользователей на MySQL.
Мы теряли преимущества обеих серверных частей
Поддерживая обе серверные части (PostgreSQL и MySQL), мы не могли в полной мере воспользоваться ни одной из них. Там где хотелось бы использовать особенности производительности и надежности какой-либо из них, приходилось сводить все к наименьшему общему знаменателю. Пример (не единственный): мы хотели использовать LATERAL JOIN
PostgreSQL для оптимизации событий на панели управления, но у нас не получилось потому, что мы использовали MySQL.
Почти все наши клиенты на PostgreSQL
Ориентируясь на данные Usage Ping, мы четко увидели, что подавляющее большинство клиентов уже перешли на PostgreSQL. Тренд достаточно устойчивый, к примеру в последнее время на 1200 установок с MySQL было порядка 110000 установок на PostgreSQL.
Мы уверены, что наши пользователи, которые применяют MySQL, могут достаточно просто сменить базу данных, переходя на PostgreSQL при обновлении до gitlab 12.1 и новее.
К слову, сами мы не работаем с MySQL, а это значит, что мы не сталкивались с проблемами ДО наших пользователей.
Нужна помощь с миграцией?
Если вы из числа таких пользователей, то для руководства по переходу с MySQL на PostgreSQL ознакомьтесь, пожалуйста, с документами по миграции.