Kit de Ferramentas de Refatoração de Banco de Dados: Flyway vs. Liquibase

Neste artigo, falaremos sobre o Flyway e o Liquibase , as duas mais populares ferramentas de refatoração de banco de dados baseadas em Java. O objetivo do artigo é comparar essas ferramentas e descobrir qual é melhor usar em quais casos.


Db omnibus


Via aérea


O conceito Flyway está centrado em seis equipes diferentes para oferecer suporte à refatoração e versão automatizadas de banco de dados. Esses comandos podem ser executados na linha de comando, durante o processo de criação (produzido usando Maven ou Gradle) ou diretamente do código Java usando chamadas de API. Ao executar esses comandos, você precisa fornecer os parâmetros para conectar-se ao banco de dados (url, nome de usuário, senha) que deseja refatorar.


O comando principal é chamado migrate e executa uma função que contém toda a essência da refatoração de banco de dados: verifica uma pasta especial com scripts sql (cada um com um número de versão no nome do arquivo) e verifica quais deles já foram aplicados ao banco de dados de destino. Em seguida, ele executa aqueles que ainda não foram aplicados a este banco de dados. No caso de um conflito, por exemplo, se o script que já foi aplicado mudou desde o seu uso, o Flyway interrompe sua operação com uma mensagem de erro.


Um recurso exclusivo do Flyway é que os scripts de migração podem estar não apenas no formato SQL, mas também na forma de código Java. A segunda opção permite implementar migrações dinâmicas com lógica complexa. No entanto, você deve usar a abordagem Java com cuidado, pois esses scripts de migração geralmente são difíceis de depurar se algo der errado com eles.


Além do comando principal de migrate , o Flyway possui comandos adicionais que facilitam o processo de refatoração do banco de dados.


O comando info mostra todos os scripts de migração disponíveis de uma determinada pasta e observa quais deles já foram usados ​​e quais serão aplicados apenas ao banco de dados de destino.


Para verificar se os scripts aplicados ao banco de dados foram alterados, o comando validate é usado. É útil sabermos se o script já aplicado da pasta foi alterado desde que foi aplicado ao banco de dados, pois isso pode significar que o script foi aplicado a diferentes bancos de dados em versões diferentes e isso pode causar problemas.


Se você acha que os scripts devem ser usados, apesar da falha mostrada pelo comando validate, você pode executar o comando de reparo. Ele redefinirá a tabela de banco de dados usada pelo Flyway para registrar quais scripts já foram aplicados (por padrão, esta tabela é chamada SCHEMA_VERSION).


E o último, mas não menos importante, comando clean limpa completamente o esquema selecionado (como você sabe, esse comando deve ser usado apenas para bancos de dados de teste).


Liquibase


O Liquibase adota uma abordagem diferente para implementar a refatoração de banco de dados. Diferentemente do Flyway, que suporta scripts de migração apenas nos formatos SQL e Java, o Liquibase permite abstrair do SQL e, assim, remover a refatoração do banco de dados de sua implementação específica.


Em vez de scripts SQL, o Liquibase suporta scripts de migração nos formatos XML, YAML e JSON. Nesses scripts, você define alterações no banco de dados no nível de abstração. Para cada alteração, o Liquibase possui um elemento correspondente em XML, YAML e JSON. Por exemplo, uma alteração que cria uma nova tabela de banco de dados no formato YAML se parece com isso:


 createTable: tableName: Customer columns: - column: name: name type: varchar(255) - column: name: address type: varchar(255) 

Alterações como add column , create index ou alter table e outras parecem semelhantes.
Durante a operação, o Liquibase aplica automaticamente todos os scripts que ainda não foram utilizados e, como o Flyway, salva seus metadados em uma tabela de banco de dados especial. Como o Flyway, o Liquibase pode ser chamado a partir da linha de comando das ferramentas de construção ou diretamente através de sua API Java.


Quando usá-los?


O Flyway e o Liquibase oferecem suporte a todas as funções necessárias para refatoração e versão de banco de dados profissionais, para que você sempre saiba qual versão do esquema de banco de dados está lidando e se corresponde à versão do seu software. Ambas as ferramentas são integradas ao Maven e Gradle e no ecossistema Spring Boot, para que a refatoração de banco de dados possa ser totalmente automatizada.


O Flyway usa o SQL para identificar alterações no banco de dados, para que você possa configurar os scripts SQL para funcionarem efetivamente com tipos específicos de bancos de dados em seu projeto, como Oracle ou PostgreSQL. Por outro lado, o Liquibase apresenta um nível adicional de abstração usando XML, YAML ou JSON para detectar alterações no banco de dados. Assim, o Liquibase é mais adequado para softwares que precisam ser instalados em diferentes ambientes com diferentes tipos de servidores de banco de dados. No entanto, se você precisar de controle total sobre seu SQL, o Flyway é a sua escolha, pois permite modificar o banco de dados usando SQL totalmente personalizado ou até mesmo código Java.


O problema com as duas ferramentas é que elas são suportadas por uma pessoa (do tradutor: de acordo com o autor) , e não por uma grande equipe. Isso pode ter um impacto negativo no desenvolvimento futuro de ambas as ferramentas, mas isso não é necessário. No momento em que este artigo foi escrito, a atividade no repositório Flyway GitHub era mais alta do que no repositório Liquibase .

Source: https://habr.com/ru/post/pt440696/


All Articles