URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 110461
[ Назад ]

Исходное сообщение
"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"

Отправлено opennews , 15-Фев-17 10:19 
Представлен (https://flywaydb.org/blog/flyway-4.1.0.html) новый выпуск проекта  Flyway (https://flywaydb.org/), в рамках которого развивается инструментарий для сопровождения баз данных и синхронизации их структуры со связанным программным обеспечением.  Flyway можно рассматривать как аналог системы контроля версий для БД, который выполняет задачу автоматизации отражения изменений в структуре базы данных для соответствия версии БД и версии программного обеспечения, работающего с этой БД.


Иными словами,  Flyway позволяет привязать состояние структуры БД к версией приложения и изменять данную структуру в зависимости от выбранной версии программы. Например, при переходе на новую версию приложения Flyway позволяет на всех серверах привести схему хранения данных к новой версии, а в случае отката на прошлую версию ПО - откатить изменение схемы в БД. Flyway также даёт возможность быстро узнать какой версии ПО соответствует имеющаяся БД, проверить целостность схемы и  в случае нарушения структуры (например, ручного добавления/удаления поля) исправить схему.

Код проекта написан на языке Java и распространяется (https://github.com/flyway/flyway) под лицензией Apache 2.0. Flyway может работать с СУБД PostgreSQL, MySQL, MariaDB, Oracle, SQL Server, SQL Azure, DB2, DB2 z/OS,  Google Cloud SQL Redshift, Vertica, EnterpriseDB, H2, Hsql, Derby и SQLite. Имеются встроенные средства для интеграции с системами сборки Maven, Gradle, Ant и SBT, а также плагины для  Spring Boot, Dropwizard, Grails, Play, Griffon, Grunt и Ninja. Применение Flyway возможно на любых системах для которых доступен язык Java, в том числе Windows, macOS, Linux и Android.


В новой версии добавлена поддержка EnterpriseDB, возможность использования в PostgreSQL  не работающих внутри транзакций конструкций (CREATE INDEX CONCURRENTLY, ALTER TYPE, VACUUM ), улучшена поддержка репликации MySQL, увеличена производительность массовых миграций.


URL: https://flywaydb.org/blog/flyway-4.1.0.html
Новость: http://www.opennet.me/opennews/art.shtml?num=46050


Содержание

Сообщения в этом обсуждении
"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 10:19 
Очень круто.

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 10:22 
Вот только даунгрейд миграций flyway не поддерживает. Модно только дропнуть базу через clean и затем снова накатить через migrate

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 10:42 
Миграции ещё и на SQL пишутся. Тот же liquidbase поддерживает YAML, что гораздо удобней.

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 14:27 
Хотите чтобы flyway сам все дропал вместов вас?

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено аноним_ , 15-Фев-17 20:50 
это и на обычном sql невозможно

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено _pochtynet_ , 15-Фев-17 10:26 
Лучше бы добавили роллбэки.

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 16:28 
Для Oracle на DDL

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 19-Фев-17 23:42 
Очень сильно удивился в своё время что оракл не может такое, а постгрес без проблем.
Проприетарщики мучались и вручную писали скрипты для отката в liquidbase.

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Dmitry , 19-Фев-17 23:36 
Это работа базы данных

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Пользователь Debian , 15-Фев-17 10:31 
Лого у проекта отличное.

Майкрософту бы поучиться!


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено A.Stahl , 15-Фев-17 10:59 
Вполне схожие логотипы по трудозатратам. У Микрософта нелепо раскрашенные квадратики, у этих ребят коряво нарисованная бочка с крылышками.

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 13:10 
А, так это крылья? Долго не мог понять, что не так с ногами

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 16:29 
> А, так это крылья? Долго не мог понять, что не так с
> ногами

Это много каблуков


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено б.б. , 17-Фев-17 07:09 
у perl6 на логотипе бабочка, чтобы заинтересовать семилетних девочек

а это - кого заинтересовать?


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Dmitry77 , 19-Фев-17 23:32 
а мне нравится логотип logstash - чурбан с усами

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 11:03 
Так а что оно умеет то? Просканить папку, посмотреть - выполнены ли все миграции в базе (зуб даю - с помощью сервисной таблички) и затем выполнить недостающие? И это вынесено в отдельный проект? там 20 строчек кода от силы, я такой функционал в своем фреймворке реализовал за пол часа...

Еще у них версия базы, как я понял, зависит от имени файла. Т.е. что-то типа V1_****, V2_*** и т.д. А что будет если будет несколько файлов с именем VN_**** ??? Ошибка или типа одна версия базы? А если эти файлы добавлены в одно время разными людьми, которые работают над непересекающимися фичами? Версии то разные должны быть.

Есть тут те, кто этим реально пользуется? Есть ли у данного продукта какие-то киллeр-фичи?


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено A , 15-Фев-17 12:25 
Неюзабельно. Как выше заметили: downgrade не поддерживается, разработка в команде очень проблематична в силу версионности через имя файла (ад для релиз-инженера).

Тот же alembic пусть и на коленке написан и, если я правильно понимаю, почти не поддерживается уже: работает в обе стороны, версионность через спец. переменную в файле, поддерживает даже собственными средствами мердж при расхождении веток фикстур, все как во взрослых xVCS.


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено VoDA , 15-Фев-17 14:06 
> там 20 строчек кода от силы, я такой функционал в своем фреймворке
> реализовал за пол часа...

Там несколько больше. И самому еще написать нужно. А так взял и получил результат.

> Еще у них версия базы, как я понял, зависит от имени файла.
> Т.е. что-то типа V1_****, V2_*** и т.д. А что будет если
> будет несколько файлов с именем VN_**** ??? Ошибка или типа одна
> версия базы? А если эти файлы добавлены в одно время разными
> людьми, которые работают над непересекающимися фичами? Версии то разные должны быть.

Если правильно помню (юзал лет 5 назад), то там запоминается какие ФАЙЛЫ накатили на БД. Так что все ок. Когда смержат в мастер и выкатят на прод - применяться оба файла.

Важно знать эту особенность и сделать naming convention на имена файлов. 100+ миграций все ок.

> Есть тут те, кто этим реально пользуется? Есть ли у данного продукта
> какие-то килл*р-фичи?

Основная килл*р фича - Just works. Самописные костыли из старых проектов менее удобны. Проще перейти на флайвей, чем поддерживать старье.

Из удобных лично мне - работа с pure-SQL. Ликвибейс умеет то же самое. Вопрос пристрастий.



"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 16:29 
> Там несколько больше. И самому еще написать нужно. А так взял и получил результат.

я про основной код. понятно, что там и обвязка для maven-плагина, и некоторый набор классов для встраивания в приложение, возможно что-то еще. Но основная задача решается в ~20 строчек (условно)

> Если правильно помню (юзал лет 5 назад), то там запоминается какие ФАЙЛЫ накатили на БД. > Так что все ок. Когда смержат в мастер и выкатят на прод - применяться оба файла.
> Важно знать эту особенность и сделать naming convention на имена файлов. 100+ миграций все ок.

Не, понятно что оба применятся. Вопрос в другом. У нас есть уже некоторое количество миграций. Допустим, самая последняя - V20_***

Я и другой человек, работающие над проектом, делаем независимо друг от друга разные фичи. Естественно, мы оба выбираем себе имя файлов миграций как V21_***. Имена файлов не пересекутся, но тем не менее мы какбэ оба делаем 21 версию базы, что неправильно - наши изменения никак между собой не связаны. И зачем вообще эта версия мне непонятно - например на прод сначала может уйти 30 версия, потом 25, а 22 например вообще ближайшее время туда не попадет, т.к. фичу по какой-то причине заморозили.

> Основная килл*р фича - Just works. Самописные костыли из старых проектов менее удобны.
> Проще перейти на флайвей, чем поддерживать старье.

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


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Led , 15-Фев-17 23:31 
> Так а что оно умеет то? Просканить папку

Почему только папку? Мамку тоже.


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено LinuxID , 15-Фев-17 11:07 
Ага! Летающая 200 литровая бочка с няшками ))

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 13:38 
Я не совсем понял, запросы же все равно писать придется, какой профит?

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено VoDA , 15-Фев-17 13:59 
Удобная либа которая проверит текущую версию БД и накатит нужные обновления. Проще взять готовое чем писать на коленке свое.

По сравнению с ликвидом - проще и удобнее работой через SQL. Ликвид тоже умеет pure-SQL, но тогда теряются плюшки rollback.

Плюс флайвей позволяет для сложных преобразований делать java migrations. Иногда это проще, чем писать тонну Sql.


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 16:30 
> Плюс флайвей позволяет для сложных преобразований делать java migrations. Иногда это проще,
> чем писать тонну Sql.

А можно поподробнее про java migrations? Ну или хотя бы ссылочку - что это вообще за зверь в данном случае?


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено qsdg , 15-Фев-17 20:50 
Я так понимаю товарищ про то, что flyway не обязательно вызывать из командной строки, можно писать свою логику на любимой java, дёргая flyway либу как вздумается.

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 23:11 
> Я так понимаю товарищ про то, что flyway не обязательно вызывать из
> командной строки, можно писать свою логику на любимой java, дёргая flyway
> либу как вздумается.

я пробежался по примерам... чтобы сделать нормальную интеграцию под мои требования - нужно примерно столько же кода, сколько и самому всё реализовать...


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено VoDA , 16-Фев-17 16:01 
> Я так понимаю товарищ про то, что flyway не обязательно вызывать из
> командной строки, можно писать свою логику на любимой java, дёргая flyway
> либу как вздумается.

Наоборот. Flyway может дергать кастомный java который будет выполнять эпические преобразования. К примеру, инвалидирует Elastic cache или пересчитает данные новым алгоритмом.


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено VoDA , 16-Фев-17 15:59 
Лови :)

https://flywaydb.org/documentation/migration/java


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 16-Фев-17 17:05 
> Лови :)
> https://flywaydb.org/documentation/migration/java

как интересно... и кто-то этим реально пользуется?


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 14:20 
А есть аналоги этой флайвей?

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено qsdg , 15-Фев-17 20:54 
> А есть аналоги этой флайвей?

MyBatis migrations http://www.mybatis.org/migrations/ наверно самая простая.

Liquibase -- xml синтаксис, умеет делать diff между реальной базой и твоим XML скриптом.
Также поддерживает scope (там это называется context), когда можно указать что вот эти вот нужно накатывать только на прод, некоторые -- только на тестовую бд. При вызове указываешь какой context хочешь накатить.


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 14:25 
http://www.liquibase.org/

"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Шкурка_от_головки , 15-Фев-17 15:19 
Мой личный опыт с этой программой.
Понравилось:
1. именование файлов как версию миграции
2. чистый SQL
3. гибкая конфигурация

Не понравилось:
1. отсутствие транзакций. например, если пишите запрос в несколько строк, и одна из них ушла в fail, то откатить исполнившиеся строки нельзя.
2. Никакая работа с несколькими схемами. Вполне логично было бы разделить миграции для разных схем на разные директории, а работать с ними через одну программу.
3. отсутствие downgrade


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 16:32 
> 1. именование файлов как версию миграции

как по мне - очень спорно

> 3. гибкая конфигурация

в чем это проявляется?

> 1. отсутствие транзакций. например, если пишите запрос в несколько строк, и одна
> из них ушла в fail, то откатить исполнившиеся строки нельзя.

не все БД умеют транзакционность DDL (тот же mysql - не умеет)

> 2. Никакая работа с несколькими схемами. Вполне логично было бы разделить миграции
> для разных схем на разные директории, а работать с ними через
> одну программу.

а как же гибкая конфигурация?

> 3. отсутствие downgrade

насколько реально это нужно и как часто востребовано?


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Шкурка_от_головки , 15-Фев-17 17:26 
> как по мне - очень спорно

Помимо версии указывается еще описание миграции. По мне, так это лучше, чем тyпой таймстамп.

> в чем это проявляется?

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

> не все БД умеют транзакционность DDL (тот же mysql - не умеет)

Если программа берет на себя версионность БД, то как-то на уровне ПО можно это реализовать.

> а как же гибкая конфигурация?

Да, не все в ней гладко

> насколько реально это нужно и как часто востребовано?

Ну, это уже у каждого по-разному. Downgrade удобно использовать для отмены миграции, что приводит, соответственно, к уменьшению количества upgrade'ов.


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 17:32 
>> как по мне - очень спорно
> Помимо версии указывается еще описание миграции. По мне, так это лучше, чем
> тyпой таймстамп.

Чем это лучше чем например тyпой таймстамп (для сортировки) и краткое описание миграции? ПОтенциальную проблему с версией я уже выше описал - как по мне это достаточно частый use-case

>> в чем это проявляется?
> Различные префиксы, суффиксы, разделители для именования файлов и т.д. Подробности в комментариях
> файла конфигурации.

хотелось бы услышать про фичи, которые реально нужны и востребованы.

>> не все БД умеют транзакционность DDL (тот же mysql - не умеет)
> Если программа берет на себя версионность БД, то как-то на уровне ПО
> можно это реализовать.

каким способом в данном случае? возможности rollback нет (не уверен, что эта задача в случае pure SQL вообще решается, даже для одной БД). Как по мне - в данном случае претензия не по адресу.

>> насколько реально это нужно и как часто востребовано?
> Ну, это уже у каждого по-разному. Downgrade удобно использовать для отмены миграции,
> что приводит, соответственно, к уменьшению количества upgrade'ов.

Не понимаю. Допустим я добавил миграцию и через пару месяцев решил ее зачем-то откатить. Да, было бы удобно, если бы я просто написал в файле миграции что-то типа "purge migration VXX_****" вместо пачки "ALTER TABLE....", но как это уменьшит количество upgrade'ов? Все равно ведь по сути нужно сформировать эту пачку и провести ее...


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Шкурка_от_головки , 15-Фев-17 22:33 
> Чем это лучше чем например тyпой таймстамп (для сортировки) и краткое описание миграции? ПОтенциальную проблему с версией я уже выше описал - как по мне это достаточно частый use-case

Да, при наличии двух и более файлов с одной версией он ругается. Но как часто Вы меняете базу, что не можете угнаться за версиями? Поэтому я и говорю о downgrad'е, что если необходимо внести изменения в миграцию, можно было ее downgrade'нуть изменить и upgrade'нуть измененную. А так получается, что при дальнейших изменениях, которые можно было бы объединить в один файл, приходится плодить маленькие миграции, тем самым увеличивая номер версии типи V1_2_45.

> каким способом в данном случае? возможности rollback нет (не уверен, что эта задача в случае pure SQL вообще решается, даже для одной БД). Как по мне - в данном случае претензия не по адресу.

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

> Не понимаю. Допустим я добавил...

Описал в начале, что я имел в виду говоря об уменьшении upgrade'ов.


"Выпуск Flyway 4.1.0, инструмента для контроля версий БД"
Отправлено Аноним , 15-Фев-17 23:09 
>Да, при наличии двух и более файлов с одной версией он ругается. Но как часто Вы меняете базу, что не можете угнаться за версиями?

в активной фазе разработки проекта база меняется очень часто. потом пилятся фичи, зачастую параллельно, в итоге - будут конфликты. У нас в основном проекте наваяли самописную подсистему управления миграций, там сделали тупо цифровой номер файла - постоянно конфликты лезут. Но там я хоть при комите вижу этот конфликт и поднимаю версию своего файла до нужной, иначе комит просто не пройдет. В случае же с flyway получается вполне можно закомитить 2 файла с одной версией (но разными именами файлов, т.е. комит пройдет) и проблемы вылезут уже позже... не очень хорошо. можно конечно хуками обвешаться, но это всё равно костыль.


> Поэтому я и говорю о downgrad'е, что если необходимо внести изменения в миграцию, можно было ее downgrade'нуть изменить и upgrade'нуть измененную.

и как ты предлагаешь в таком случае отслеживать изменения миграций? хеш-суммы файлов в базе хранить рядом с версией (и не одну а 3, на случай коллизий)? не, уж лучше так - каждый набор изменений в отдельном файле со своим набором sql операторов. Иначе потом придется по всем миграциям бегать смотреть, кто тебе дев-базу сломал (точнее, лезть в историю VCS), в текущем же варианте - посмотреть нужно будет только последние несколько файлов никуда не переключаясь.

> А так получается, что при дальнейших изменениях, которые можно было бы объединить в один файл, приходится плодить маленькие миграции, тем самым увеличивая номер версии типи V1_2_45.

поэтому я и говорю - решение с номером версии жутко спорное. как по мне гораздо лучше таймстамп и краткое описание в имени файла. количество файлов миграций по большому счету ни на что не влияет.

> Считаю, что если программа взялась работать с версионностью БД, то нужно это делать намного продуманней. С pure SQL, мне кажется, решается, если ограничить запросы только касающиеся структуры БД, и хранением для каждой миграции состояние структуры изменяемых таблиц.

Смотри, нужно для каждого запроса писать "обратный" запрос, который вернет базу в предыдущее состояние. Автоматически такие запросы написать ИМХО невозможно. А пользователи библиотеки такое делать ручками никогда сами не будут. Это решается только своим псевдо-языком миграций, но возникает проблема поддержки всех фич СУБД. Как я понимаю, тут поддерживаются разные СУБД, и нужно следить за изменениями в каждой... Так себе задачка.

И куда девать запросы на изменения данных? Вот нужно заказчику по хитрому условию обновить какое-то поле в большой таблице. Все, эту миграцию мы уже откатить не сможем, т.к. хранить в миграции состояние всех дев/превью/прод баз никто в здравом уме не будет. И разбираться потом, какие миграции откатываются а какие нет - тоже лишний гемор. Гораздо проще добавить новую миграцию.