Por que e quando Liquibase?

98

Eu tentei pesquisar esta pergunta sobre estouro de pilha, mas não consegui encontrar nenhuma pergunta para isso.
Eu sou novo Liquibasee quero saber

  • Porque Liquibase?
  • Quando exatamente um deve ser usado Liquibaseno projeto?

Eu sei que isso é para manter todas as alterações do banco de dados em um só lugar, mas o semelhante pode ser feito criando SQLarquivos simples em algum sistema de repositório e atualizando-o com o tempo.

Shakeel Shahzad
fonte

Respostas:

69

O principal diferenciador entre um arquivo de criação de esquema autogerenciado e Liquibase (ou outras ferramentas de migração de esquema ) é que o último fornece um log de alterações do esquema. Este é um registro das mudanças de esquema ao longo do tempo. Ele permite que o designer do banco de dados especifique as mudanças no esquema e permite a atualização ou downgrade programática do esquema sob demanda.

Existem outros benefícios, como:

  • Independência do fornecedor de banco de dados (isso é questionável, mas eles tentam)
  • documentação automatizada
  • diffs de esquema de banco de dados

Uma ferramenta alternativa é o flyway .

Você escolheria usar uma ferramenta de migração de esquema quando quiser ou precisar gerenciar automaticamente as atualizações de esquema sem perder dados. Ou seja, você espera que o esquema mude depois que seu sistema for implantado em um ambiente de longa duração, como um site do cliente ou ambiente de teste estável.

Synesso
fonte
1
Mas vamos supor que criamos um arquivo e escrevemos nosso primeiro script nele e o enviamos para, digamos, git. Agora, com o tempo, o esquema será atualizado e podemos voltar a qualquer intervalo de tempo e voltar o esquema também, não?
Shakeel Shahzad
1
Com essa abordagem, você pode recriar o esquema, mas não pode fazer downgrade / upgrade. A diferença é a perda de dados.
Synesso
1
Mas a outra parte, falta quando usar?
Shakeel Shahzad
1
Synesso Não estou vendo ainda como você pode fazer o downgrade de um banco de dados de produção automaticamente depois que ele estiver em uso por um tempo e as decisões tiverem sido tomadas sobre os dados usando, digamos, colunas recém-adicionadas. Você não pode simplesmente abandoná-los agora, necessariamente. Também não vejo por que isso é melhor do que apenas uma série de scripts SQL com versão mantidos no controle de origem, que incluem uma simples inserção em uma tabela de versão no início e uma atualização no final para rastrear o que foi aplicado.
Khorkrak
Outra questão acrescentando ... como podemos logar o erro por e-mail em java. quando as alterações de SQL alteram por meio de XML?
UmaShankar
18

Eu vi o liquibase criar disciplina entre os desenvolvedores quando se trata de modificar o esquema. Você simplesmente não pode ir e sobrescrever a mudança de outro desenvolvedor e executar. Em vez disso, você cria seu próprio changeset e o adiciona ao final da sequência de mudanças a serem executadas. Isso também traz clareza sobre que mudança ocorreu, quando e quem a trouxe.

Uma abordagem muito "versionada" para a manutenção do esquema.

Para começar, dá uma impressão de "trabalho desnecessário".

iCrus
fonte
4
Que sou eu (me dá a impressão exata que você mencionou: P) +1 para essa determinação crucial
Ismail Sahin
você está certo, podemos acompanhar todas as alterações, quem fez as alterações mais recentes e quando. se precisarmos voltar a um ponto específico, a liquibase será útil
Anoop PS
7

Quando você tem várias instâncias de banco de dados em dev, qa, production e deseja ter uma ferramenta para rastrear automaticamente o histórico de alterações e aplicar as alterações de forma inteligente (aplique o diff do esquema atual e do esquema final), ferramentas como liquibase ou flyway serão muito úteis .

Ted Xu
fonte
3

Eu acredito que a Liquibase é ótima quando sua filosofia é que o banco de dados é uma reflexão tardia. Essa filosofia causou a maioria dos bancos de dados ruins em produção - e muitos deles são ruins. Um banco de dados deve ser projetado com uma visão completa de todo o sistema de negócios, não em partes por desenvolvedores de aplicativos, cada um trabalhando em seus próprios silos. O último método resulta em soluções alternativas, dados desnormalizados, relacionamentos ruins entre tabelas, duplicação de áreas de negócios e um sistema geral confuso e de alto custo de manutenção que o cliente odiará logo após a implantação devido aos problemas que causa. Se um banco de dados for projetado para refletir COM PRECISÃO as relações comerciais, sua vida útil será 5 vezes mais longa e atenderá a sua finalidade 5 vezes melhor do que um banco de dados projetado de forma fragmentada, como infelizmente a maioria é.

Liquibase não é um problema em si, mas permite que os desenvolvedores de aplicativos projetem o banco de dados. Esse é o problema.

Bob Barry
fonte
19
Mudança de especificações, novos recursos adicionados, bugs corrigidos. Mesmo supondo que "um banco de dados é projetado para refletir COM PRECISÃO as relações comerciais", é normal e esperado que você precise fazer alterações no banco de dados com o tempo, porque os negócios e as relações comerciais mudam com o tempo. Liquibase apenas ajuda você a gerenciar essas mudanças. É isso aí.
Steven Byks
Na minha experiência, poucos DBAs e uma série de desenvolvedores usam Liquibase - acho que @obob-barry acerta na maioria dos resultados finais. DBAs que usam ferramentas como Liquibase (ou apenas o velho git para histórico de mudanças) irão considerá-lo útil.
PhillipHolmes
Práticas evolutivas de BD, e ágeis em geral, incentivam e possibilitam revisões por pares. Para um banco de dados com necessidades de desempenho, os DBAs ainda trabalham com as equipes de aplicativos para alterações no banco de dados. Ferramentas como Liquibase permitem uma refatoração mais fácil, indo contra seu argumento de desnormalização. Há 10 anos, trabalhei para um produto instalado em mais de 20 clientes, cada um com seu próprio patch e ciclos de atualização. Após 2 anos de pesadelo e tentando escrever tal ferramenta à mão, pulamos para o liquibase assim que soubemos sobre ele. E tínhamos tabelas com 200 milhões de registros, não muito grandes para aquela época, mas algo que precisava de DBAs.
user6317694
3
Espero encontrar você lá no céu algum dia. Claro que parece bom.
Bijan
3

Acho que por que liquibase pode ser respondido se você ler o artigo abaixo http://shengwangi.blogspot.com/2016/04/liquibase-helloworld-example.html

Se você ler atentamente, a capacidade de fazer o downgrade para uma versão inferior de uma versão superior com a ajuda de comandos simples mvn ou CLI é muito útil, o que você não obterá se passar pela abordagem de submeter seu arquivo sql no GIT porque então você tem que executar manualmente esses scripts e também não tem o conjunto de alterações como: - quem fez o autor das alterações, etc.

Shikhar Chaudhary
fonte
0

Sendo DevOps Pessoa de minha equipe, eu preferiria ter todos os meus arquivos SQL em um só lugar, ou seja, em meu SCM (Gerenciamento de Código Fonte)

Também durante a fase de CI / CD, se o esquema de banco de dados for criado junto com ele, isso economiza muito tempo e recursos. Você não teria que ter outra pessoa gerenciando seu banco de dados para esse cliente.

ORM como Flyway, Liquibase, EF etc. ajudam a conseguir isso.

Sloka Roy
fonte