¿Por qué y cuándo Liquibase?

98

Intenté buscar esta pregunta en el desbordamiento de pila, pero no pude encontrar ninguna pregunta para esto.
Soy nuevo Liquibasey quiero saber

  • ¿Por qué Liquibase?
  • ¿Cuándo exactamente se debe usar Liquibaseen el proyecto?

Sé que esto es para mantener todos los cambios de la base de datos en un solo lugar, pero se puede hacer lo similar creando SQLarchivos simples en algún sistema de repositorio y actualizándolos con el tiempo.

Shakeel Shahzad
fuente

Respuestas:

69

El diferenciador clave entre un archivo de creación de esquema autogestionado y Liquibase (u otras herramientas de migración de esquema ) es que este último proporciona un registro de cambios de esquema. Este es un registro de los cambios de esquema a lo largo del tiempo. Permite que el diseñador de la base de datos especifique cambios en el esquema y habilita la actualización o degradación programática del esquema a pedido.

Existen otros beneficios, como:

  • Independencia del proveedor de la base de datos (esto es cuestionable, pero lo intentan)
  • documentación automatizada
  • diferencias de esquema de base de datos

Una herramienta alternativa es el corredor migratorio .

Puede optar por utilizar una herramienta de migración de esquemas cuando desee o necesite administrar automáticamente las actualizaciones de esquemas sin perder datos. Es decir, espera que el esquema cambie después de que su sistema se haya implementado en un entorno de larga duración, como un sitio de cliente o un entorno de prueba estable.

Synesso
fuente
1
Pero supongamos que creamos un archivo y escribimos nuestro primer script en él y lo confirmamos, digamos git. Ahora, con el tiempo, el esquema se actualizará y podemos volver a cualquier intervalo de tiempo y volver a cambiar el esquema también, ¿no?
Shakeel Shahzad
1
Con ese enfoque, puede recrear el esquema, pero no puede degradar / actualizar. La diferencia es la pérdida de datos.
Synesso
1
Pero la otra parte, ¿cuándo debe usarse?
Shakeel Shahzad
1
Synesso todavía no veo cómo se puede degradar una base de datos de producción automáticamente después de que ha estado en uso durante un tiempo y se han tomado decisiones sobre los datos utilizando, por ejemplo, columnas recién agregadas. No puede simplemente dejarlos ahora necesariamente. Además, no veo por qué esto es mejor que solo una serie de scripts SQL versionados mantenidos en el control de fuente que incluyen una simple inserción en una tabla de versiones al principio y una actualización al final para rastrear lo que se ha aplicado.
Khorkrak
Otra pregunta que agrega ... ¿cómo podemos registrar el error a través del correo electrónico en java? cuando los cambios de SQL se modifican a través de XML?
UmaShankar
18

He visto a liquibase crear disciplina entre los desarrolladores cuando se trata de modificar el esquema. Simplemente no puede ir y sobrescribir el cambio y ejecutar de otro desarrollador. En su lugar, crea su propio conjunto de cambios y lo agrega al final de la secuencia de cambios que se ejecutarán. Esto también aporta claridad sobre qué cambio se produjo, cuándo y quién lo introdujo.

Un enfoque muy "versionado" para el mantenimiento de esquemas.

Para empezar, da una impresión de "trabajo innecesario".

iCrus
fuente
4
¿Cuál soy yo? (Me da la impresión exacta que mencionaste: P) +1 por esa determinación crucial
Ismail Sahin
tiene razón, podemos realizar un seguimiento de todos los cambios, quién hizo los últimos cambios y cuándo. si necesitamos volver a un punto específico, liquibase será útil
Anoop PS
7

Cuando tiene varias instancias de base de datos en dev, qa, producción y desea tener una herramienta para rastrear automáticamente el historial de cambios y aplicar los cambios de manera inteligente (aplique la diferencia del esquema actual y el esquema final), herramientas como liquibase o flyway serán muy útiles .

Ted Xu
fuente
3

Creo que Liquibase es genial cuando su filosofía es que la base de datos es una ocurrencia tardía. Esta filosofía ha provocado la mayoría de bases de datos defectuosas en producción, y la mayoría de ellas son malas. Una base de datos debe diseñarse con una vista completa de todo el sistema empresarial, no construida por los desarrolladores de aplicaciones, cada uno trabajando en sus propios silos. El último método da como resultado soluciones temporales, datos desnormalizados, relaciones deficientes entre tablas, duplicación de áreas comerciales y un sistema general desordenado y de alto costo de mantenimiento que el cliente odiará poco después de la implementación debido a los problemas que causa. Si una base de datos está diseñada para reflejar EXACTAMENTE las relaciones comerciales, su vida útil será 5 veces más larga y cumplirá su propósito 5 veces mejor que una diseñada de manera fragmentada, como desafortunadamente la mayoría.

Liquibase no es un problema en sí mismo, pero permite la práctica de que los desarrolladores de aplicaciones diseñen la base de datos. Ese es el problema.

Bob Barry
fuente
19
Las especificaciones cambian, se agregan nuevas funciones, se corrigen errores. Incluso asumiendo que "una base de datos está diseñada para reflejar EXACTAMENTE las relaciones comerciales", es normal y se espera que necesite realizar cambios en la base de datos con el tiempo, porque las empresas y las relaciones comerciales cambian con el tiempo. Liquibase solo lo ayuda a administrar esos cambios. Eso es.
Steven Byks
En mi experiencia, muy pocos DBA y una gran cantidad de desarrolladores usan Liquibase; creo que @ bob-barry da en el clavo con la mayoría de los resultados finales. Sin embargo, los administradores de bases de datos que utilizan herramientas como Liquibase (o simplemente git antiguo para el historial de cambios) lo encontrarán útil.
PhillipHolmes
Las prácticas de bases de datos evolutivas, y ágiles en general, fomentan y permiten revisiones por pares. Para una base de datos con necesidades de rendimiento, los administradores de bases de datos siguen trabajando con los equipos de aplicaciones para realizar cambios en la base de datos. Herramientas como Liquibase permiten una refactorización más fácil, yendo en contra de su argumento de desnormalización. Hace 10 años, trabajé para un producto instalado en más de 20 clientes, cada uno con su propio parche y ciclos de actualización. Después de 2 años de pesadilla, y tratando de escribir tal herramienta a mano, saltamos a liquibase tan pronto como nos enteramos. Y teníamos tablas con 200 M de registros, tampoco enormes para ese momento, pero algo que necesitaba DBA.
user6317694
3
Espero encontrarte algún día en el cielo. Seguro que suena bien.
Bijan
3

Creo que por qué liquibase se puede responder si revisa el siguiente artículo http://shengwangi.blogspot.com/2016/04/liquibase-helloworld-example.html

Si lo lee con atención, la capacidad de degradar a una versión inferior desde una versión superior con la ayuda de comandos simples mvn o CLI es muy útil, lo que no obtiene si sigue el enfoque de confirmar su archivo sql en GIT porque entonces tiene que ejecutar manualmente esos scripts y tampoco tiene el cambio configurado como: - quién hizo el autor de los cambios, etc.

Shikhar Chaudhary
fuente
0

Siendo DevOps Persona de mi equipo, preferiría tener todos mis archivos SQL en un solo lugar, es decir, en mi SCM (Gestión de código fuente)

También durante la fase de CI / CD, si el esquema de base de datos se crea junto con él, ahorra mucho tiempo y recursos. No es necesario que otra persona administre su base de datos para ese cliente.

ORM como Flyway, Liquibase, EF, etc. ayuda a lograr esto.

Sloka Roy
fuente