Migraciones de base de datos
Esas grandes desconocidas
Madrid DevOps, 2025-03-12
Fuente: Mauricio Antón
Vuestro anfitrión hoy

Alex "pinchito" Fernández
DevOps de lomo plateado
Head of development en Fullcircle
Migrador de bases de datos impenitente
Fuente: Mi hija Lucía
Un clásico

Fuente: ChatGPT
(falso)
Lo que veremos hoy
- Cambios de esquema
- Cambios de tabla
- Cambios de almacenamiento
- Conclusiones
Cambios de almacenamiento

Fuente: Dantheman9758
Eran otros tiempos...
2013-2017 (mediasmart.io)

Caso práctico: Librecounter.org
- Proyecto personal
- Contador de visitas a la antigua
- Respeta la GDPR (no cookies)
- Usando MongoDB
Fuente: LibreCounter.org

2024-02-12: visita de midu.dev





No está mal para un linode de €8/mes








MongoDB apesta; probemos SQLite
- De ~20 a ~20k escrituras por segundo
- Perfecto para el caso de uso
- Rápido y fácil
- Backup instantáneo
Migración a SQLite
- Preparar el código, con tests
- Desplegar en producción
- Empezamos a guardar datos en SQLite
- ... ¿Y los datos antiguos?
Proceso de migración
- Hay que *pogramallo
- Y hay que limpiar los datos
- Se puede ejecutar múltiples veces
- El resultado se borra fácil
- Añadimos tests
Estrategia de combinación
Fuente: Jesusccastillo
El desafío a midu.dev
Fuente: cinemagia.ro
Pero de buen rollo
Fuente: el autor
Challenge extended
Fuente: Henry Burrows
Cambios de tabla
Fuente: gulf states camera club council
El trasfondo
- Empresa de deep tech
- Analíticas en tiempo real
- ClickHouse gestionado
- Guardar agregados (Materialized Views)
Creando una vista materializada
CREATE MATERIALIZED VIEW new_materialized_view ENGINE = MergeTree() ORDER BY (column1, column2) AS SELECT column1, column2, column3 FROM source_table WHERE some_condition;
Acumulados
Versionado de datos en tiempo real

¿Cómo versionar datos?

Diferentes pilas de datos

Fuente: AsmodeeGames
Caso práctico: nueva agregación
- ¿Qué pasa si cambia la forma de acumular?
- Hay que volver a agregar todo
- Se sigue copiando en background
- Creación de jobs específicos ("populate jobs")
Copia interna de datos
- Paso de v1 a v2
- Cambio atómico
- Paso de v2 a v3
- ...
Cambios de esquema
Fuente: Nicolas Poussin
Modificando datos estáticos
- Clásico cambio de esquema
- Migración hacia delante y hacia atrás
- Cambio reversible
Modificando datos dinámicos
- Clásico cambio de esquema
- Migración hacia delante y hacia atrás
- ¿Qué hacemos con los datos según llegan?
Caso práctico: añadir campo
Mínimo cambio no trivial

¡Magia!
ALTER TABLE users ADD COLUMN shoe_size int;

Fuente: Mortadelo y Filemón Wiki
- Permite añadir una columna
- La columna no tendrá datos
- ¿Default, backfill?
El cambiazo
EXCHANGE TABLES new_mv AND old_mv;

Fuente: LaPáginaNoOficial
- Cambio atómico
- Una de las MVs no tendrá datos
- Volvemos al traspaso entre tablas
El cambio atómico
ALTER TABLE mv MODIFY QUERY SELECT * from src;
Fuente: IberLibro.com

- Paso por una vista materializada intermedia
- La columna no tendrá datos
- ¿Default, backfill?
El transformador
ALTER TABLE table MODIFY COLUMN name Nullable(String);

Fuente: LaPáginaNoOficial
- Permite eliminar datos de una columna
- Paso previo al borrado
- El inverso no es trivial
Mutaciones
Cambios que manipulan datos de una tabla
Fuente: LaPáginaNoOficial

Cambios graduales

Conclusiones
- Cambios atómicos
- Dar entidad a las migraciones
- Cambios reversibles
- Respeta a las bases de datos
Referencias
- El autor: Reversible Engineering, Part 2: DevOps
- El autor: La arquitectura fluida 1: tras la arquitectura perfecta
- El autor: La arquitectura fluida 2: estrategias de migración
- Scott Ambler & Pramod Sadalage: Refactoring Databases
¡Gracias!
VISITE NUESTRO BAR
Soluciones digitales a medida
Desde un operador móvil virtual 100% operativo...
...a un prototipo de integración con OpenAI

Migraciones de base de datos
By Alex Fernández
Migraciones de base de datos
Migraciones de base de datos, esas grandes desconocidas. Presentación para Madrid DevOps, 2025-03-12.
- 141